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