This post will document how to run an
ArgoCD
instance locally, using Kind to create the
Kubernetes cluster.
In addition, I will use cert-manager to create a self-signed certificate to
serve it with HTTPS.
Creating the cluster with kind First of all, is to have a Kubernetes cluster. You will require to have kind
available in your path (maybe downloading to your ~/bin
or ~/.local/bin
makes the trick). This is the configuration file I used:
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
So, to create the cluster just type:
1
$ kind create cluster --config= kind.yaml
Wait until full process ends and… you got it!
Add ingress to your cluster In order to add ingress to the kind cluster, it’s required to add an ingress
controller .
Here you have what I did to install the nginx controller:
1
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
It requires a couple of minutes to download images and… Done!
Cert manager Well… let’s do things almost in the right way by using self-signed
certificates. This will be easier than it seems to be :)
To install cert-manager, just run:
1
$ kubectl apply --validate= false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml
Now it will require a issuer. I needed to create this file:
1
2
3
4
5
6
7
# cert-issuer.yaml
apiVersion : cert-manager.io/v1
kind : ClusterIssuer
metadata :
name : test-selfsigned
spec :
selfSigned : {}
And run next command:
1
$ kubectl apply -f cert-issuer.yaml
That’s it.
ArgoCD Now it’s time to install ArgoCD:
1
2
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Local link I will serve it at argocd.local . So I need to modify my /etc/hosts
to have
this line:
1
127.0.0.1 localhost argocd.local
Ingress Once we have the URL, it’s required to have an ingress. So I needed the file:
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
And run it:
1
$ kubectl apply -f ingress.yaml
And it will be ready!
Access Just open https://argocd.local to enter. The username is admin and the password
is the name of the argo server docker, which can be obtained with:
1
$ kubectl get pods -n argocd -l app.kubernetes.io/name= argocd-server -o name | cut -d'/' -f 2