Om via DNS namen de workloads van buitenaf (buiten het interne Kubernetes netwerk) te kunnen benaderen, kan gebruik gemaakt worden van Ingress. Hiervoor kan o.a. gebruik gemaakt worden van ‘ingress-nginx‘. De installatie kan uitgevoerd worden met Helm:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx
Ter controle en om te achterhalen wat het externe IP adres is, kan de ingress-nginx-controller service opgevraagd worden:
kubectl get svc ingress-nginx-controller
Dit externe IP adres dient gebruikt te worden om de DNS records naar te laten verwijzen.
Een ingress manifest zal er alsvolgt uitzien:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: go-app-ingress namespace: canary annotations: kubernetes.io/ingress-class: nginx spec: rules: - host: app.digitalinfo.nl http: paths: - backend: serviceName: go-app servicePort: 8080
Apply de manifest en als de DNS-record juist is ingesteld zal deze host via een browser aangeroepen kunnen worden.

http is niet veilig en liever willen we daar TLS voor gebruiken. Om certificaten te kunnen gebruiken om web-services aan te kunnen roepen met https, is het noodzakelijk om een ‘Certificate Manager‘ te installeren die de afhandeling van certificaten voor zijn rekening neemt. Raadpleeg de volgende installatie handleiding: https://cert-manager.io/docs/installation/kubernetes/ en dat komt neer op het volgende:
kubectl create namespace cert-manager helm repo add jetstack https://charts.jetstack.io helm repo update kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.crds.yaml helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.2.0
Vervolgens hebben we een ‘Cluster Issuer‘ nodig, bijvoorbeeld Let’s Encrypt. Hiervoor dient het volgende manifest:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: email: hier_komt_jouw_emailadres@domain.com server: https://acme-staging-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-secret-staging solvers: - http01: ingress: class: nginx
(ipv ‘staging‘ kan ook ‘prod‘ gebruikt worden, zie daarvoor de documentatie op https://cert-manager.io/docs/installation/kubernetes/ voor de juiste server)
Apply de manifest om de cluster-issuer aan te maken.
Nu kan de Ingress aangepast worden zodat een TLS certificate gebruikt gaat worden:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: go-app-ingress namespace: canary annotations: kubernetes.io/ingress-class: nginx cert-manager.io/cluster-issuer: letsencrypt-staging spec: tls: - hosts: - app.digitalinfo.nl secretName: go-app-tls rules: - host: app.digitalinfo.nl http: paths: - backend: serviceName: go-app servicePort: 8080
Apply deze manifest over de vorige Ingress en de browser zal nu door Kubernetes naar de https-versie gestuurd worden.