Contenido

ArgoCD con Kind

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.

Argo CD

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