Zum Hauptinhalt springen
Version: 3.0.0-alpha (Diátaxis)

Ingress mit TLS bereitstellen

Diese Anleitung erklärt, wie Sie eine Anwendung über HTTPS mit einem automatischen TLS-Zertifikat auf einem Kubernetes-Hikube-Cluster exponieren, unter Verwendung der Addons cert-manager und ingress-nginx.

Voraussetzungen

  • Ein bereitgestellter Kubernetes-Hikube-Cluster (siehe Schnellstart)
  • kubectl konfiguriert für die Interaktion mit der Hikube-API
  • Ein Domainname, der auf Ihren Cluster zeigt (DNS A- oder CNAME-Eintrag)
  • Die kubeconfig des Child-Clusters abgerufen

Schritte

1. Addons certManager und ingressNginx aktivieren

Ändern Sie die Konfiguration Ihres Clusters, um die erforderlichen Addons zu aktivieren:

cluster-ingress-tls.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: my-cluster
spec:
controlPlane:
replicas: 3

nodeGroups:
web:
minReplicas: 2
maxReplicas: 5
instanceType: "s1.large"
ephemeralStorage: 50Gi
roles:
- ingress-nginx

addons:
certManager:
enabled: true
ingressNginx:
enabled: true
hosts:
- app.example.com
Hinweis

Das Feld hosts unter ingressNginx definiert die Domains, für die der Ingress Controller Datenverkehr akzeptiert. Sie können Wildcards (*.example.com) verwenden, um mehrere Subdomains abzudecken.

2. Die Rolle ingress-nginx einer Node Group zuweisen

Die Node Group, die den Ingress Controller hostet, muss die Rolle ingress-nginx in ihrer Konfiguration haben. Prüfen Sie, ob Ihre Node Group korrekt konfiguriert ist:

cluster-ingress.yaml
nodeGroups:
web:
minReplicas: 2
maxReplicas: 5
instanceType: "s1.large"
ephemeralStorage: 50Gi
roles:
- ingress-nginx
Tipp

Eine dedizierte Node Group für den Ingress ermöglicht es, den eingehenden Datenverkehr zu isolieren und die HTTP/HTTPS-Expositionsressourcen unabhängig zu dimensionieren.

3. Cluster-Konfiguration anwenden

kubectl apply -f cluster-ingress-tls.yaml

# Warten, bis der Cluster bereit ist
kubectl get kubernetes my-cluster -w

Prüfen Sie, ob die Addons im Child-Cluster bereitgestellt sind:

export KUBECONFIG=cluster-admin.yaml

# cert-manager prüfen
kubectl get pods -n cert-manager

# Ingress Controller prüfen
kubectl get pods -n ingress-nginx

# Externe IP des Ingress Controllers abrufen
kubectl get svc -n ingress-nginx ingress-nginx-controller

4. Einen Ingress mit TLS im Child-Cluster erstellen

Stellen Sie Ihre Anwendung bereit und erstellen Sie dann einen Ingress mit automatischer TLS-Terminierung:

ingress-tls.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.com
secretName: app-tls
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80

Wenden Sie die Konfiguration im Child-Cluster an:

kubectl apply -f ingress-tls.yaml
Hinweis

Die Annotation cert-manager.io/cluster-issuer: letsencrypt-prod weist cert-manager an, automatisch ein Let's-Encrypt-Zertifikat für die angegebene Domain zu beschaffen.

5. Zertifikat überprüfen

# Zertifikatsstatus prüfen
kubectl get certificate

# Erwartetes Ergebnis
# NAME READY SECRET AGE
# app-tls True app-tls 2m

# Zertifikatsdetails
kubectl describe certificate app-tls

Überprüfung

Testen Sie den HTTPS-Zugriff auf Ihre Anwendung:

# Ingress prüfen
kubectl get ingress my-app

# HTTPS-Zugriff testen
curl -v https://app.example.com

Erwartetes Ergebnis:

NAME     CLASS   HOSTS             ADDRESS        PORTS     AGE
my-app nginx app.example.com 203.0.113.10 80, 443 5m
Warnung

Die Bereitstellung des Let's-Encrypt-Zertifikats kann einige Minuten dauern. Wenn das Zertifikat im Zustand False verbleibt, prüfen Sie, ob Ihr DNS-Eintrag korrekt auf die IP des Ingress Controllers zeigt und ob Port 80 erreichbar ist (erforderlich für die HTTP-01-Validierung).

Weiterführende Informationen