En este post documento cómo ejecutar una instancia de
ArgoCD
localmente, usando Kind para crear un cluster
Kubernetes.
Además, utilizaré cert-manager para crear un certificado autofirmado para
servirlo sobre HTTPS.
Creando el cluster con kind Lo primero es tener un cluster kubernetes. Se necesita tener kind
disponible
en el path (quizá descargándolo en ~/bin
o ~/.local/bin
). Ésta es la
configuración que he utilizado yo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# kind.yaml
kind : Cluster
apiVersion : kind.x-k8s.io/v1alpha4
nodes :
- role : control-plane
kubeadmConfigPatches :
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings :
- containerPort : 80
hostPort : 80
protocol : TCP
- containerPort : 443
hostPort : 443
protocol : TCP
Así que para crear el cluster basta escribir:
1
$ kind create cluster --config= kind.yaml
Esperar a que el proceso completo termine y… ¡Ya está!
Añadir ingress al cluster Para añadir ingress al cluster kind, se necsita añadir un controlador
ingress .
Esto es lo que he hecho yo para instalar el controlador nginx:
1
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
Requiere un par de minutos para descargar las imágenes y… ¡Hecho!
Cert manager Bien… Hagamos las cosas más o menos bien usando certificados autofirmados.
Será más sencillo de lo que pueda parecer.
Para instalar cert-manager basta ejecutra:
1
$ kubectl apply --validate= false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml
Ahora se requiere un issuer. Tengo que crear este archivo:
1
2
3
4
5
6
7
# cert-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: test-selfsigned
spec:
selfSigned: {}
Y ejecutar la orden siguiente:
1
$ kubectl apply -f cert-issuer.yaml
Eso es todo.
ArgoCD Ahora le toca a ArgoCD:
1
2
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Enlace local Lo serviré en argocd.local . Por eso necesito modificar mi /etc/hosts
con
esta línea:
1
127.0.0.1 localhost argocd.local
Ingress Una vez tenemos la URL, se requiere tener un ingress. Por eso necesito el
fichero:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## ingress.yaml
apiVersion : extensions/v1beta1
kind : Ingress
metadata :
name : argocd-server-ingress
namespace : argocd
annotations :
kubernetes.io/ingress.class : nginx
cert-manager.io/cluster-issuer : test-selfsigned
nginx.ingress.kubernetes.io/force-ssl-redirect : "true"
nginx.ingress.kubernetes.io/ssl-passthrough : "true"
nginx.ingress.kubernetes.io/backend-protocol : "HTTPS"
spec :
rules :
- http :
paths :
- backend :
serviceName : argocd-server
servicePort : https
host : argocd.local
tls :
- secretName : https-cert
hosts :
- argocd.local
y ejecutarlo:
1
$ kubectl apply -f ingress.yaml
¡Y ya estará listo!
Acceso Tan solo abre https://argocd.local para entrar. El usuario es admin y la
password es el nombre de la instancia docker con el servidor argo, que se puede
obtener con el comando:
1
$ kubectl get pods -n argocd -l app.kubernetes.io/name= argocd-server -o name | cut -d'/' -f 2