This documentation provides a detailed and complete guide for setting up a Kubernetes cluster with NGINX Ingress Controller, Cert-Manager, and Argo CD using Helm.
- Prerequisites
- Step 1: Apply CRDs
- Step 2: Install NGINX Ingress Controller
- Step 3: Install Cert-Manager
- Step 4: Install Argo CD
- Step 5: Create a ClusterIssuer
- Step 6: Verify Installations
Ensure you have the following tools installed:
- Kubernetes cluster
- kubectl
- Helm
First, apply the required Custom Resource Definitions (CRDs):
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v4.0.0/deploy/crds.yamlCreate a namespace for internal services:
kubectl create namespace internalInstall NGINX Ingress Controller using Helm:
helm install nginx nginx/nginx-ingress --version 2.0.0 -f nginxvalues.yaml -n internalcontroller:
enabled: true
electionID: "nginx-ingress-leader-election"
service:
type: LoadBalancer
enableCertManager: true
enableExternalDNS: true
ingressClass:
setAsDefaultIngress: trueInstall Cert-Manager using Helm:
helm install cert-manager cert-manager/cert-manager --version 1.16.2 --set crds.enabled=true -n internalCreate a namespace for Argo CD:
kubectl create namespace argocdInstall Argo CD using Helm:
helm install argocd argo/argo-cd --version 7.8.0 -f argovalues.yaml -n argocdglobal:
domain: argocd.wush.site
configs:
params:
server.insecure: true
server:
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
cert-manager.io/acme-challenge-type: "http01"
acme.cert-manager.io/http01-edit-in-place: "true"
tls:
- hosts:
- argocd.wush.site
secretName: argocd-tlsCreate a ClusterIssuer to manage certificates with Cert-Manager and Let's Encrypt:
kubectl apply -f issuer.yamlapiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: default
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: andrianta.321@gmail.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx-
Check NGINX Ingress Controller:
kubectl get pods -n internal
-
Check Cert-Manager:
kubectl get pods -n internal
-
Check Argo CD:
kubectl get pods -n argocd
-
Access Argo CD UI:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Access the UI via
https://localhost:8080and log in with the default admin credentials.
- Ensure the NGINX LoadBalancer service has an external IP assigned.
- Verify the DNS records are properly configured to point to the NGINX external IP.
- Ensure the
ClusterIssuerand certificates are correctly applied and valid.
This guide provides a comprehensive setup for a Kubernetes cluster using NGINX Ingress, Cert-Manager, and Argo CD. Adjust values according to your infrastructure needs.
