Ingress einrichten
Erstellen Sie eine Ingress-Ressource, um Ihre Ingress-Komponenten zu konfigurieren, Regeln für die Weiterleitung von Anfragen festzulegen und den Pfad zu Ihren App-Diensten anzugeben. Für jeden Namespace, der eine App oder einen Dienst enthält, den Sie verfügbar machen möchten, ist eine eigene Ingress-Ressource erforderlich.
Vorbereitende Schritte
Befolgen Sie diese Vorbereitungsschritte, bevor Sie beginnen.
-
Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen, um Ingress einzurichten. Die folgenden IAM-Rollen von „ IBM Cloud “ sind erforderlich:
- Plattformzugriffsrolle Administrator für den Cluster
- Servicezugriffsrolle Manager in allen Namensbereichen
-
Entscheiden Sie, ob Sie die von „ IBM “ bereitgestellte Ingress-Subdomain verwenden möchten. Wenn Sie die bereitgestellte Subdomain nicht verwenden möchten, müssen Sie eine eigene Subdomain erstellen und registrieren: benutzerdefinierte Domain.
Eine benutzerdefinierte Domain oder die manuelle Konfiguration von Domains, die von IBM bereitgestellt werden und erforderlich sind, um Apps über private ALBs bereitzustellen.
-
Stellen Sie sicher, dass die ALB, die Sie verwenden möchten, die erwartete Version aufweist. Führen Sie den Befehl „
ibmcloud ks ingress alb versions“ aus, um die derzeit unterstützten Versionen aufzulisten, und vergleichen Sie diese mit der Ausgabe von „ibmcloud ks ingress alb ls --cluster CLUSTER“. Wenn Sie dieser Dokumentation folgen, wird davon ausgegangen, dass Sie einen auf Traefik basierenden Ingress betreiben. Spezifische Anleitungen zu Ingress- NGINX en finden Sie in der entsprechenden Dokumentation. -
Wenn Sie Anwendungen über private ALBs bereitstellen, müssen Sie jede private ALB über die CLI aktivieren. Um die ALB-ID abzurufen, führen Sie folgenden Befehl aus:
ibmcloud ks ingress alb ls --cluster CLUSTER.
Klassische Cluster Weitere Informationen und Befehlsoptionen finden Sie in derCLI-Referenz.
sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --cluster CLUSTER_NAME
VPC-Cluster Weitere Informationen und Befehlsoptionen finden Sie in derCLI-Referenz.
sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME
-
Stellen Sie sicher, dass Ihr Cluster mindestens zwei Worker-Knoten pro Zone umfasst, um eine hohe Verfügbarkeit zu gewährleisten und regelmäßige Updates durchführen zu können. Wenn eine Zone nur über einen Worker-Knoten verfügt, kann der ALB keine automatischen Updates empfangen. Weitere Informationen finden Sie unter „ Anforderungen an Worker-Knoten für ALBs “.
-
Wenn Sie einen klassischen Cluster verwenden, aktivieren Sie eine Virtual Router Function(VRF) für Ihr „ IBM Cloud “-Infrastrukturkonto.
- Informationen zum Aktivieren von VRF finden Sie im Abschnitt VRF aktivieren.
- Mit dem Befehl
ibmcloud account showkönnen Sie überprüfen, ob VRF bereits aktiviert ist. - Wenn Sie VRF nicht aktivieren können oder wollen, aktivieren Sie VLAN-Spanning. Wenn VRF- oder VLAN Spanning aktiviert ist, kann die ALB Pakete an verschiedene Teilnetze im Konto weiterleiten.
-
Stellen Sie bei VPC-Clustern sicher, dass Ihre VPC-Sicherheitsgruppen den Knotenports erlauben, Datenverkehrsanfragen zu empfangen, die von Ingress weitergeleitet werden. Weitere Informationen finden Sie unter „ Grundlagen der „Secure by Default“-Cluster-VPC-Netzwerkkonfiguration “.
-
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
Befolgen Sie die folgenden Schritte, um Ingress einzurichten.
Schritt 1: Erstellen Sie einen „ ClusterIP “-Dienst
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: Richten Sie die „ TLS “-Terminierung mit den Zertifikaten unter TLS und den Geheimnissen unter Kubernetes ein
Ihr „ TLS “-Zertifikat muss in jedem Namespace, in dem sich Ihre Apps befinden, als „ Kubernetes “-Geheimnis gespeichert werden.
-
Informationen zur Verwendung der von „ IBM “ bereitgestellten Ingress-Subdomain finden Sie unter „ Einrichten von TLS-Secrets für die von „ IBM “ bereitgestellte Ingress-Subdomain “.
-
Informationen zur Verwendung einer benutzerdefinierten Domain finden Sie unter „ TLS-Geheimnisse für benutzerdefinierte Subdomains 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-Service weiterzuleiten.
-
Erstellen Sie die Ingress-Ressource in einer YAML-Datei.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource spec: ingressClassName: public-iks-traefik 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
Ressourcenfelder
ingressClassName- Der Name der Ingress-Klasse. Die von der „ IBM “ bereitgestellten Ingress-Klassen lauten „
public-iks-traefik“ für öffentliche ALBs und „private-iks-traefik“ 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 „ Kubernetes “-Secrets, in dem Ihr „ TLS “-Zertifikat 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 App 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,ExactoderPrefix. Weitere Informationen und Beispiele zu den einzelnen Pfadtypen finden Sie in der Community-Dokumentation unter Kubernetes. service.name- Ersetzen Sie
app1_service,app2_serviceusw. 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 im selben Namensraum 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 im selben Namensraum 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: Überprüfen Sie Ihre Ingress-Konfiguration
-
Listen Sie Ihre ALBs auf und kopieren Sie die IP-Adresse (Classic) oder den Hostnamen (VPC) für eine ALB, auf der das Kubernetes-Ingress-Image ausgeführt wird. Wählen Sie in der Ausgabe eine ALB aus, die über einen Build im Format
<community_version>_<ibm_build>_iksverfügt.ibmcloud ks ingress alb ls -c CLUSTER -
Verwenden Sie die IP-Adresse (klassisch) oder den Hostnamen (VPC) des ALB sowie den App-Pfad und Ihre Domain, um zu überprüfen, ob Sie Datenverkehr erfolgreich über diesen ALB an Ihre App senden können.
curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"Um beispielsweise eine Anfrage an eine App namens
myappunter Verwendung einer Standard-Ingress-Subdomain 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.
Traefik-CRDs
Zusammen mit den Ingress-Ressourcen von „ Kubernetes “. Auf Traefik basierende Ingress-Controller ermöglichen die Nutzung von Ressourcen, die durch die benutzerdefinierten Ressourcendefinitionen (Custom Resource Definitions) von Traefik definiert sind. Die erforderliche CRD wird automatisch auf dem Cluster bereitgestellt, sobald ein Traefik-basierter ALB aktiviert wird. Die bereitgestellte CRD-Version entspricht stets der höchsten Version der bereitgestellten Traefik-ALBs. Weitere Informationen zu benutzerdefinierten Ressourcen finden Sie in der Traefik-Dokumentation.
Je nach Konfiguration kann es vorkommen, dass Sie bei Traefik-CRs die Namen der Einstiegspunkte angeben müssen. Unter IBM Cloud Kubernetes Service lauten die Standardnamen für die Einstiegspunkte „ web “ für Klartext- HTTP (standardmäßig
an Port 80 gebunden) und „ websecure “ für TLS-verschlüsselten HTTPS-Datenverkehr (standardmäßig an Port 443 gebunden). Sie können Ports konfigurieren oder zusätzliche Einstiegspunkte erstellen,
falls Ihre Anwendung dies erfordert.
Unterstützung für Ingress- NGINX-Annotationen in Traefik
Traefik enthält eine Kompatibilitätsschicht, die Ingress- und NGINX-spezifische Annotationen verarbeitet. Diese Funktion ist auf IBM Cloud Kubernetes Service standardmäßig deaktiviert. Wenn diese Option aktiviert wird, wird die Verarbeitung
von Traefik-spezifischen Annotationen deaktiviert, sodass nur Ingress- NGINX-spezifische Annotationen vom ALB verarbeitet werden. Die Option „ ingressProvider “ in der ibm-ingress-deploy-config ConfigMap kann verwendet werden, um diese Funktion ein- oder auszuschalten.
Weitere Informationen zum Unterstützungsstatus für Annotationen finden Sie in der Traefik-Dokumentation.
Benutzerdefinierte Domains mit Ingress
Wenn Sie die von „ IBM “ bereitgestellte Ingress-Subdomain nicht verwenden möchten, können Sie eine eigene benutzerdefinierte Domain verwenden, die Sie in Ihrer Ingress-Ressource angeben. Beachten Sie, dass Apps, die über Ingress auf privaten ALBs bereitgestellt werden, eine benutzerdefinierte Domain erfordern oder dass die von IBM bereitgestellten Domains manuell konfiguriert werden müssen.
Erstellen benutzerdefinierter Domänen für öffentliche ALBs
Befolgen Sie die folgenden Schritte, um eine benutzerdefinierte Domain für öffentliche ALBs zu erstellen.
-
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. Bitte beachten Sie, dass Domains in der Version „ Kubernetes “ ( 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_NAMEaus, um die von IBM bereitgestellte Ingress-Domäne zu finden, und suchen Sie nach dem Feld Ingress-Unterdomäne.Die Angabe der von IBM bereitgestellten Subdomain als CNAME ist erforderlich, damit bei automatischen Zustandsprüfungen fehlerhafte IP-Adressen aus der DNS-Antwort entfernt werden und um sicherzustellen, dass Ihre benutzerdefinierte Domain aktualisiert wird, wenn Sie ALBs hinzufügen oder entfernen.
Erstellen benutzerdefinierter Domains für private ALBs
Befolgen Sie die folgenden Schritte, um eine benutzerdefinierte Domain für private ALBs zu erstellen. Beachten Sie, dass für die Verwendung von Ingress mit privaten ALBs benutzerdefinierte Domains erforderlich sind.
Wenn Sie über einen klassischen Cluster mit nur einem privaten VLAN verfügen, müssen Sie zunächst Ihr eigenes „ DNS-Dienst, der in Ihrem privaten Netzwerk verfügbar ist “ konfigurieren.
-
Erstellen Sie eine angepasste Domäne über Ihren DNS-Service-Provider. Bitte 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_IDaus, um die IP-Adressen (klassischer Cluster) oder den Hostnamen (VPC-Cluster) der ALB zu suchen.