Ingress einrichten
Erstellen Sie eine Ingress-Ressource, um Ihre Ingress-Komponenten zu konfigurieren, Regeln für Routing-Anforderungen zu definieren und den Pfad zu Ihren App-Services anzugeben. Für jeden Namensbereich, der eine App oder einen Service enthält, die bzw. den Sie zugänglich machen möchten, ist eine separate Ingress-Ressource erforderlich.
Vorbereitende Schritte
Führen Sie die folgenden Vorbereitungsschritte aus, bevor Sie beginnen.
-
Vergewissern Sie sich, dass Sie die richtigen Berechtigungen haben, um Ingress einzurichten. Die folgenden IBM Cloud IAM-Rollen sind erforderlich:
- Plattformzugriffsrolle Administrator für den Cluster
- Servicezugriffsrolle Manager in allen Namensbereichen
-
Bestimmen Sie, ob Sie die von IBMbereitgestellte Ingress-Unterdomäne verwenden möchten. Wenn Sie die bereitgestellte Unterdomäne nicht verwenden wollen, müssen Sie Ihre eigene angepasste Domäne erstellen und registrieren.
Eine angepasste Domäne ist erforderlich, um Apps über private ALBs zugänglich zu machen.
-
Wenn Sie Apps über private ALBs zugänglich machen, müssen Sie jede private ALB in der Befehlszeilenschnittstelle aktivieren. Um die ALB-ID zu erhalten, führen Sie
ibmcloud ks ingress alb ls --cluster CLUSTER
aus.Klassische Cluster Weitere Informationen und Befehlsoptionen finden Sie in derCLI-Referenz.
ibmcloud ks ingress alb enable classic --alb <alb_id> --cluster <cluster_name>
VPC-Cluster Weitere Informationen und Befehlsoptionen finden Sie in derCLI-Referenz.
ibmcloud ks ingress alb enable vpc-gen2 --alb <alb_id> --cluster <cluster_name>
-
Stellen Sie sicher, dass Ihr Cluster mindestens zwei Workerknoten pro Zone enthält, um hohe Verfügbarkeit sicherzustellen und regelmäßige Aktualisierungen anzuwenden. Wenn eine Zone nur einen einzelnen Workerknoten enthält, kann die ALB keine automatischen Aktualisierungen empfangen. Weitere Informationen finden Sie unter Voraussetzungen für Workerknoten für ALBs.
-
Wenn Sie einen klassischen Cluster verwenden, aktivieren Sie Virtual Router Function(VRF) für Ihr Konto der IBM Cloud-Infrastruktur. Informationen zum Aktivieren von VRF finden Sie im Abschnitt VRF aktivieren. Mit dem Befehl
ibmcloud account show
können Sie überprüfen, ob VRF bereits aktiviert ist. Wenn Sie VRF nicht aktivieren können oder möchten, aktivieren Sie VLAN-Spanning. Wenn VRF- oder VLAN Spanning aktiviert ist, kann die ALB Pakete an verschiedene Teilnetze im Konto weiterleiten. -
Wenn Sie einen VPC-Cluster verwenden, stellen Sie sicher, dass Datenverkehrsanforderungen, die von Ingress an Knotenports auf Ihren Workerknoten weitergeleitet werden, in VPC-Sicherheitsgruppen zulässig sind.
-
Wenn Sie einen Cluster mit demselben Namen 5 Mal oder häufiger innerhalb von 7 Tagen (beispielsweise für Automatisierungs- oder Testzwecke) erstellen, beachten Sie, dass Sie möglicherweise den Grenzwert für die Rate doppelter Lets Encrypt-Zertifikate erreichen. Um sicherzustellen, dass die Ingress-Unterdomäne und das Zertifikat ordnungsgemäß registriert werden, müssen die ersten 24 Zeichen der Clusternamen unterschiedlich sein.
-
Wenn Sie den Datenaustausch im Netz auf Edge-Workerknoten beschränken, müssen Sie sicherstellen, dass in jeder Zone mindestens zwei Edge-Workerknoten aktiviert sind, sodass ALBs gleichmäßig bereitgestellt werden können.
Wenn in einer Zone ein Fehler auftritt, kann es zu sporadisch auftretenden Fehlern bei Anforderungen an die Ingress-ALB in dieser Zone kommen.
Konfigurationsschritte
Führen Sie die Schritte zum Konfigurieren von Ingress aus.
Schritt 1: ClusterIP
-Service erstellen
Ein ClusterIP
-Service ist erforderlich, damit Ihre App im Cluster erreichbar ist, damit externe Anforderungen an den App-Pod weitergeleitet werden können. Damit die Namen der ClusterIP
-Services, mit denen Ihre Apps
zugänglich gemacht werden, beim Ingress-Lastausgleich eingeschlossen werden, müssen sie für alle Namensbereiche in Ihrem Cluster eindeutig sein.
Erstellen Sie für jede App-Bereitstellung, die Sie zugänglich machen möchten, einen Kubernetes-Service ClusterIP
. Ihre App muss durch einen Kubernetes Service zugänglich gemacht werden, damit sie in den Ingress-Lastausgleich einbezogen
wird.
kubectl expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Schritt 2: TLS-Terminierung mit TLS-Zertifikaten und geheimen Schlüsseln für Kubernetes einrichten
Ihr TLS-Zertifikat muss als geheimer Kubernetes-Schlüssel in jedem Namensbereich gespeichert werden, in dem Ihre Apps vorhanden sind.
-
Informationen zur Verwendung der von IBMbereitgestellten Ingress-Unterdomäne finden Sie unter Geheime TLS-Schlüssel für die von IBMbereitgestellte Ingress-Unterdomäne einrichten.
-
Informationen zur Verwendung einer angepassten Domäne finden Sie unter Geheime TLS-Schlüssel für angepasste Unterdomänen einrichten.
Schritt 3: Ingress-Ressource erstellen
Erstellen Sie die Ingress-Ressource, um die Routing-Regeln zu definieren, die der Ingress-Controller verwendet, um den Datenverkehr an Ihren App-Dienst weiterzuleiten.
-
Erstellen Sie die Ingress-Ressource in einer YAML-Datei.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource spec: ingressClassName: nginx-example tls: - hosts: - <domain_name> secretName: <tls_secret_name> rules: - host: HOSTNAME http: paths: - path: <app_path_1> pathType: Prefix backend: service: name: <app_service_1> port: number: 80 - path: <app_path_2> pathType: Prefix backend: service: name: <app_service_2> port: number: 80
annotations
-
kubernetes.io/ingress.class
: Geben Sie die anzuwendende Ingress-Klasse an. Die von IBMbereitgestellten Ingress-Klassen sind"public-iks-k8s-nginx"
für öffentliche ALBs und"private-iks-k8s-nginx"
für private ALBs.- Geben Sie diese angepasste Klasse in einer
IngressClass
-Ressource und eineribm-ingress-deploy-config
-ConfigMap an. Um das Routing für Ingress anzupassen, können Sie Kubernetes NGINX-Annotationen (nginx.ingress.kubernetes.io/<annotation>
) hinzufügen. Benutzerdefinierte IBM Cloud Kubernetes Service-Annotationen (ingress.bluemix.net/<annotation>
) werden nicht unterstützt. - Hinweis: Für Konfigurationen, in denen eine andere Komponente Ihre Ingress-ALBs verwaltet, z. B. wenn Ingress als Teil eines Helm-Diagramms bereitgestellt wird, geben Sie diese Anmerkung nicht an. Suchen Sie stattdessen die Ingress-Klasse
für Ihre Konfiguration, und geben Sie diese Klasse in einem
spec.ingressClassName: <class_name>
-Feld an.
ingressClassName
- Der Ingress-Klassenname. Die von IBMbereitgestellten Ingress-Klassen sind
public-iks-k8s-nginx
für öffentliche ALBs undprivate-iks-k8s-nginx
für private ALBs. tls.hosts
- Wenn TLS verwendet werden soll, ersetzen Sie
<domain>
durch die von IBM bereitgestellte Ingress-Unterdomäne oder Ihre angepasste Domäne. tls.secretName
- Ersetzen Sie
<tls_secret_name>
durch den Namen des geheimen Kubernetes-Schlüssels, in dem das TLS-Zertifikat ( TLS certificate ) gespeichert ist. host
- Ersetzen Sie
<domain>
durch die von IBM bereitgestellte Ingress-Unterdomäne oder Ihre angepasste Domäne. path
- Ersetzen Sie
<app_path>
durch einen Schrägstrich oder durch den Pfad, über den Ihre App empfangsbereit ist. Der Pfad wird an die angegebene Ingress-Domäne angehängt, um eine eindeutige Route zu Ihrer Anwendung zu erstellen. Wenn Sie diese Route in einen Web-Browser eingeben, wird der Netzverkehr an die Lastausgleichsfunktion für Anwendungen (ALB) weitergeleitet. Die Lastausgleichsfunktion für Anwendungen (ALB) sucht nach dem zugehörigen Service und sendet Netzverkehr an ihn. Daraufhin leitet der Service den Datenverkehr an die Pods weiter, in denen die App ausgeführt wird. pathType
- Die Methode zum Abgleich des URL-Pfads. Unterstützte Werte sind
ImplementationSpecific
,Exact
oderPrefix
. Weitere Informationen und Beispiele zu den einzelnen Pfadarten finden Sie in der Community Kubernetes-Dokumentation. service.name
- Ersetzen Sie
app1_service
,app2_service
usw. durch den Namen der Services, die Sie erstellt haben, um Ihre Apps zugänglich zu machen. Stellen Sie sicher, dass sich die von Ihnen angegebenen Apps in demselben Namespace befinden. service.name
- Ersetzen Sie
<app1_service>
,<app2_service>
usw. durch den Namen der Services, die Sie erstellt haben, um Ihre Apps zugänglich zu machen. Stellen Sie sicher, dass sich die von Ihnen angegebenen Apps in demselben Namespace befinden. service.port.number
- Der Port, den Ihr Service überwacht. Verwenden Sie denselben Port, die Sie beim Erstellen der Kubernetes Service-Instanz für Ihre App definiert haben.
-
Wenden Sie die Ingress-Ressource auf Ihren Cluster an. Stellen Sie sicher, dass die Ressource im selben Namensbereich wie die App-Services bereitgestellt wird, die in der Ressource angegeben wurden.
kubectl apply -f community-ingress-resource.yaml -n <namespace>
Schritt 4: Ingress-Konfiguration überprüfen
-
Listen Sie Ihre ALBs auf und kopieren Sie die IP-Adresse (klassisch) oder den Hostnamen (VPC) für einen ALB, auf dem das Kubernetes Ingress-Image läuft. Wählen Sie in der Ausgabe eine ALB aus, die über einen Build im Format
<community_version>_<ibm_build>_iks
verfügt.ibmcloud ks ingress alb ls -c <cluster>
-
Verwenden Sie die IP-Adresse (klassisch) oder den Hostnamen (VPC) des ALB, den Pfad der Anwendung und Ihre Domäne, um zu überprüfen, ob Sie den Datenverkehr zu Ihrer Anwendung erfolgreich über diesen ALB senden können.
curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"
Um beispielsweise eine Anfrage an eine Anwendung namens
myapp
unter Verwendung einer Standard-Ingress-Subdomäne zu senden, führen Sie den folgenden Befehl aus.curl http://169.X.X.X/myapp -H "Host: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud"
Haben Sie Schwierigkeiten, über Ingress eine Verbindung zu Ihrer App herzustellen? Versuchen Sie, Fehler bei Ingress zu beheben. Sie können den Gesamtzustand und den Status Ihrer
Ingress-Komponenten überprüfen, indem Sie ibmcloud ks ingress status-report get -c <cluster_name_or_ID>
ausführen.
Angepasste Domänen mit Ingress
Wenn Sie die von IBMbereitgestellte Ingress-Unterdomäne nicht verwenden möchten, können Sie Ihre eigene angepasste Domäne verwenden, die Sie in Ihrer Ingress-Ressource angeben. Beachten Sie, dass Apps, die mit Ingress über private ALBs zugänglich gemacht werden, eine angepasste Domäne erfordern.
Angepasste Domänen für öffentliche ALBs erstellen
Führen Sie die Schritte zum Erstellen einer angepassten Domäne für öffentliche ALBs aus.
-
Erstellen Sie eine angepasste Domäne. Arbeiten Sie mit Ihrem DNS-Provider (Domain Name Service) oder IBM Cloud-DNS, um Ihre angepasste Domäne zu registrieren. Wenn sich die Apps, die über Ingress zugänglich gemacht werden sollen, in einem Cluster in unterschiedlichen Namensbereichen befinden, registrieren Sie die angepasste Domäne als Platzhalterdomäne, wie
*.custom_domain.net
. Beachten Sie, dass Domänen in Kubernetes Version 1.20 oder höher auf maximal 130 Zeichen begrenzt sind. -
Definieren Sie einen Aliasnamen für Ihre Clusterdomäne, indem Sie die von IBM bereitgestellte Unterdomäne als kanonischen Namensdatensatz (CNAME) angeben. Führen Sie
ibmcloud ks cluster get --cluster <cluster_name>
aus, um die von IBM bereitgestellte Ingress-Domäne zu finden, und suchen Sie nach dem Feld Ingress-Unterdomäne.Die Angabe der von IBMbereitgestellten Unterdomäne als CNAME ist für automatische Statusprüfungen erforderlich, um alle fehlerhaften IPs aus der DNS-Antwort zu entfernen und sicherzustellen, dass Ihre angepasste Domäne aktualisiert wird, wenn Sie ALBs hinzufügen oder entfernen.
Angepasste Domänen für private ALBs erstellen
Führen Sie die Schritte zum Erstellen einer angepassten Domäne für private ALBs aus. Beachten Sie, dass angepasste Domänen für die Verwendung von Ingress mit privaten ALBs erforderlich sind.
Wenn Sie über einen klassischen Cluster mit nur einem privaten VLAN verfügen, müssen Sie zuerst Ihren eigenen DNS-Service konfigurieren, der in Ihrem privaten Netz verfügbar ist.
-
Erstellen Sie eine angepasste Domäne über Ihren DNS-Service-Provider. Beachten Sie, dass Ingress-URLs maximal 130 Zeichen lang sein dürfen.
-
Ordnen Sie Ihre angepasste Domäne den privaten ALBs zu, indem Sie ihre IP-Adressen als A-Datensatz (klassische Cluster) oder ihren VPC-Hostnamen als CNAME (VPC-Cluster) hinzufügen. Führen Sie
ibmcloud ks ingress alb ls -c <cluster_name_or_ID>
aus, um die IP-Adressen (klassischer Cluster) oder den Hostnamen (VPC-Cluster) der ALB zu suchen.