Einrichten der Scheinwerfererweiterung

Headlamp ist ein Kubernetes Dashboard, das eine grafische Benutzeroberfläche für die Verwaltung und Überwachung Ihrer Cluster-Ressourcen bietet. Das Headlamp-Add-on für IBM Cloud® Kubernetes Service bietet eine nahtlose Installation von Headlamp mit automatischem Lifecycle-Management und Integration mit IBM Cloud Identity and Access Management (IAM) zur Authentifizierung.

Verstehen des Scheinwerfer-Zusatzes

Das Headlamp Add-on ist der empfohlene Ersatz für das archivierte kubernetes-dashboard Projekt. Headlamp bietet eine moderne, benutzerfreundliche Oberfläche zur Anzeige und Verwaltung von Kubernetes Ressourcen in Ihrem Cluster.

Zu den wichtigsten Merkmalen der Zusatzscheinwerfer gehören:

  • IAM OIDC-Authentifizierung: Nahtlose Authentifizierung mit Ihrem IBM Cloud-Konto über IAM OIDC.
  • Unabhängiges Lebenszyklus-Management: Die Add-on-Version ist von den Cluster-Master-Stücklistenversionen entkoppelt, so dass unabhängige Updates möglich sind.
  • Bereit für den Zugriff: Das Add-on wird automatisch über eine Ingress-Ressource auf dem öffentlichen Standard-Ingress-Hostnamen Ihres Clusters mit einer headlamp-Subdomäne bereitgestellt.
  • Sicherer Zugang: Jeder Cluster erhält eine eindeutige OIDC-Client-ID, um Authentifizierungs-Spoofing-Angriffe zu verhindern.

Voraussetzungen

Vergewissern Sie sich vor der Installation des Scheinwerfer-Zusatzmoduls, dass Ihr Kombiinstrument die folgenden Anforderungen erfüllt:

Installation des Scheinwerfer-Zusatzgeräts

Das Headlamp-Add-on ist derzeit nur über die CLI verfügbar. Sie können das Add-on nicht über die Konsole IBM Cloud installieren oder verwalten.

Installation des Headlamp-Add-ons über die CLI

  1. Aktualisieren Sie das Plug-in container-service auf die neueste Version.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. Legen Sie Ihren Cluster als Ziel fest.
    ibmcloud ks cluster config --cluster CLUSTER_NAME_OR_ID
    
  3. Aktivieren Sie das headlamp-Add-on.
    ibmcloud ks cluster addon enable headlamp --cluster CLUSTER_NAME_OR_ID
    
  4. Stellen Sie sicher, dass das Headlamp-Add-on den Status. hat Addon Ready.
    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    
    Beispielausgabe:
    NAME       Version   Health State   Health Status
    headlamp   0.1.0     normal         Addon Ready
    
  5. Stellen Sie sicher, dass die Headlamp-Pods laufen.
    kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    

Zugriff auf das Armaturenbrett des Scheinwerfers

Nachdem Sie das Headlamp-Add-on installiert haben, können Sie über den Standard-Ingress-Hostnamen Ihres Clusters auf das Dashboard zugreifen.

  1. Ermitteln Sie den Standard-Ingress-Hostnamen Ihres Clusters.

    ibmcloud ks cluster get --cluster <cluster_name_or_ID> | grep "Ingress Subdomain"
    
  2. Öffnen Sie Ihren Browser und navigieren Sie zu https://headlamp.<ingress_subdomain>, wobei <ingress_subdomain> der Standard-Ingress-Hostname Ihres Clusters ist.

    Beispiel: https://headlamp.mycluster-abc123-0000.us-south.containers.appdomain.cloud

  3. Klicken Sie auf Sign In, um sich mit IBM Cloud IAM zu authentifizieren.

  4. Wenn Sie nicht bereits bei IBM Cloud angemeldet sind, werden Sie zur IAM-Anmeldeseite weitergeleitet. Nach der Authentifizierung werden Sie wieder zum Headlamp-Dashboard weitergeleitet.

  5. Sobald Sie authentifiziert sind, können Sie Ihre Cluster-Ressourcen über die Headlamp-Oberfläche anzeigen und verwalten.

Umstellung von kubernetes-dashboard

Die Kubernetes Gemeinschaft hat das kubernetes-dashboard Projekt archiviert. Nachdem Sie das Headlamp-Add-on installiert haben, können Sie die Kubernetes-Dashboard-Bereitstellung verkleinern, wenn sie in Ihrem Cluster läuft.

Um die Kubernetes-Dashboard-Bereitstellung nach der Installation von Headlamp zu verkleinern:

kubectl scale deployment -n kube-system kubernetes-dashboard --replicas=0
kubectl scale deployment -n kube-system dashboard-metrics-scraper --replicas=0

Die Authentifizierung von Scheinwerfern verstehen

Das Headlamp-Add-on verwendet IBM Cloud IAM OIDC-Authentifizierung, um den Zugriff auf Ihre Cluster-Ressourcen zu sichern.

Wenn Sie das Headlamp-Add-on aktivieren, werden die folgenden Authentifizierungskomponenten automatisch konfiguriert:

  • Eindeutige Client-ID: Für Ihren Cluster wird eine eindeutige OIDC-Client-ID erstellt und in einem Kubernetes secret im ibm-system Namespace gespeichert.
  • Hybride privat-öffentliche OIDC: Headlamp verwendet private IAM-Endpunkte für Backchannel-Anfragen, während der Frontchannel - die Anmeldung im Browser - über öffentliche IAM-Endpunkte erfolgt.
  • Token-Verwaltung: Authentifizierungs-Tokens werden in Browser-Cookies gespeichert und automatisch in Anfragen an den Kubernetes API-Server aufgenommen.

Der Ablauf der Authentifizierung funktioniert wie folgt:

  1. Wenn Sie auf das Headlamp-Dashboard zugreifen, wird Ihnen eine Anmeldeseite angezeigt.
  2. Wenn Sie auf Sign In klicken, werden Sie zum öffentlichen IBM Cloud IAM-Autorisierungsendpunkt weitergeleitet.
  3. Nach erfolgreicher Authentifizierung leitet IAM Sie mit einem Autorisierungscode zurück zu Headlamp.
  4. Headlamp tauscht den Autorisierungscode über ein privates Netzwerk gegen ein Zugangs-Token aus.
  5. Das Zugriffstoken wird zur Authentifizierung von Anfragen an den Kubernetes API-Server verwendet.

Ihr Zugriff auf Cluster-Ressourcen wird durch Ihre IBM Cloud IAM-Rollen und Kubernetes RBAC-Berechtigungen bestimmt, die durch den Kubernetes API-Server erzwungen werden.

Aktualisierung der Scheinwerfererweiterung

Das Headlamp-Add-on wird automatisch aktualisiert, wenn neue Versionen veröffentlicht werden. Sie können jederzeit die aktuelle Version und den Status des Add-ons überprüfen.

So überprüfen Sie die Version des Add-ons:

ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>

Deaktivieren des Scheinwerfer-Zusatzmoduls

Wenn Sie das Headlamp Dashboard nicht mehr benötigen, können Sie das Add-on deaktivieren.

Wenn Sie das Headlamp-Add-on deaktivieren, werden die folgenden Ressourcen entfernt:

  • Einsatz von Scheinwerfern und Pods
  • Wartung von Scheinwerfern und Ressourcen für den Zugang
  • OIDC-Client-ID und zugehörige Geheimnisse

Deaktivieren des Headlamp-Zusatzes mit der CLI

  1. Deaktivieren Sie das Zusatzmodul "Scheinwerfer".
    ibmcloud ks cluster addon disable headlamp --cluster <cluster_name_or_ID>
    
  2. Überprüfen Sie, dass das Add-on entfernt wurde.
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    

Zugriff auf Headlamp über private Eingänge auf VPC-Clustern

Konfigurieren Sie Ihren VPC-Cluster so, dass der Zugriff auf Headlamp über den privaten Eingang statt über den öffentlichen Eingang erfolgt, um die Sicherheit zu erhöhen.

Wenn Sie von privaten Netzwerken aus auf Headlamp zugreifen möchten, z. B. über ein VPC VPN, können Sie Ihren Cluster mit den folgenden Schritten neu konfigurieren:

  1. Deaktivieren Sie den öffentlichen ALB Ihres Clusters.

    ibmcloud ks ingress alb disable --cluster <cluster_name_or_ID> --alb <public_ALB_ID>
    
  2. Aktivieren Sie den privaten Zugang.

    ibmcloud ks ingress alb enable vpc-gen2 --cluster <cluster_name_or_ID> --alb <private_ALB_ID>
    
  3. Registrieren Sie eine Domäne auf dem privaten ALB.

    ibmcloud ks ingress domain create --cluster <cluster_name_or_ID> --hostname $<private_ALB_ID_hostname>
    
  4. Legen Sie die neue Domäne als Standard fest.

    ibmcloud ks ingress domain default replace --cluster <cluster_name_or_ID> --domain <new_domain>
    

Das IBM Cloud Backend aktualisiert headlamp in etwa 5 Minuten. Wenn die Aktualisierung abgeschlossen ist, ist das Dashboard unter dem neuen Standard-Hostnamen für den Eingang mit der Subdomäne headlamp. verfügbar.

Bereitstellung von Headlamp mit dem Istio-Ingress-Gateway

Wenn Ihr Cluster externen Datenverkehr über das Istio-Ingress-Gateway weiterleitet, können Sie die vom Headlamp-Add-on erstellten Standard-Ingress-Ressourcen deaktivieren und Headlamp stattdessen VirtualService über Istio und Gateway verfügbar machen.

Sie müssen Headlamp über eine von IBM bereitgestellte Subdomain in der Domain *.containers.appdomain.cloud bereitstellen. Die OIDC-Client-ID für Ihren Cluster ist mit einer Weiterleitungs-URI registriert, die dieser Domäne entspricht. Der Hostname des istio-ingressgateway Load Balancers im Rohformat gehört nicht zu dieser Domäne, und die Authentifizierung schlägt fehl, wenn Sie ihn direkt verwenden.

Vorbereitende Schritte

  • Aktiviert das verwaltete Istio-Add-on.
  • Konfigurieren Sie kubectl für den Cluster.
  1. Öffnen Sie die Datei ConfigMapheadlamp-values zur Bearbeitung, um die standardmäßigen Ingress-Ressourcen zu deaktivieren, die das Headlamp-Add-on erstellt.

    kubectl edit cm -n ibm-system headlamp-values
    

    Fügen Sie Folgendes in den Abschnitt data ein, um zu verhindern, dass das Add-on die Standardressourcen NGINX und Traefik Ingress erstellt.

    data:
      values.yaml: |-
        createDefaultPublicIngressNginx: false
        createDefaultPrivateIngressNginx: false
        createDefaultPublicIngressTraefik: false
        createDefaultPrivateIngressTraefik: false
    
  2. Warten Sie bis zu 5 Minuten, bis die aktualisierten Werte im Cluster übernommen wurden.

  3. Stellen Sie sicher, dass die Standard-Ingress-Ressourcen entfernt wurden.

    kubectl get ingress -n ibm-system
    
  4. Ermitteln Sie die IP-Adresse (klassische Cluster) oder den Hostnamen (VPC-Cluster) des istio-ingressgateway Lastenausgleichs.

    • Klassische Cluster:
        kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
        ```
    * VPC-Cluster:
    ```sh {: pre}
        kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
        ```
    Wenn der Befehl einen leeren Wert zurückgibt, ist der Lastverteiler noch nicht bereitgestellt. Stellen Sie sicher, dass der Dienst über eine externe IP-Adresse verfügt, und überprüfen Sie die Dienstereignisse auf Fehler, wie z. B. eine Überschreitung der Lastenausgleichs-Kontingentgrenze.
    {: note}
    
    ```sh {: pre}
    kubectl describe service istio-ingressgateway -n istio-system
    
  5. Registrieren Sie die IP-Adresse (klassisch) oder den Hostnamen (VPC) des Load Balancers, indem Sie eine von IBM bereitgestellte Subdomain erstellen. Geben Sie den Namespace istio-system für das TLS-Geheimnis an, damit das TLS-Zertifikat für die istio-ingressgateway. verfügbar ist.

    • Klassische Cluster:
        ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_ID> --ip <istio_ingressgateway_IP> --secret-namespace istio-system
        ```
    * VPC-Cluster:
    ```sh {: pre}
        ibmcloud ks nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <istio_ingressgateway_hostname> --secret-namespace istio-system
        ```
    
  6. Stellen Sie sicher, dass die Subdomain erstellt wurde, und notieren Sie sich die Subdomain sowie den geheimen Namen des Zertifikats SSL.

    ibmcloud ks nlb-dns ls --cluster <cluster_name_or_ID>
    

    Beispielausgabe für klassische Cluster:

    Subdomain                                                                               IP(s)              SSL Cert Status   SSL Cert Secret Name                            Secret Namespace
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["168.1.1.1"]      created           mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 istio-system
    

    Beispielausgabe für VPC-Cluster:

    Subdomain                                                                               Target(s)                                     SSL Cert Status   SSL Cert Secret Name                            Secret Namespace
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     1234abcd-us-south.lb.appdomain.cloud          created           mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 istio-system
    

    Wenn der Cluster mehrere NLB-DNS-Einträge enthält, identifizieren Sie die im vorherigen Schritt erstellte Subdomain, indem Sie die Spalte IP(s) oder Target(s) mit der Adresse des istio-ingressgateway Load Balancers abgleichen und überprüfen, ob in der Spalte Secret Namespace angezeigt wird istio-system.

  7. Erstellen Sie eine Datei mit dem Namen, die headlamp-istio.yaml eine und Gateway eine für VirtualService Headlamp definiert. Ersetzen Sie <subdomain> durch die Subdomain aus dem vorherigen Schritt und <ssl_cert_secret_name> durch den geheimen Namen des Zertifikats SSL.

    Das Zertifikatsgeheimnis TLS wird im Namespace istio-system erstellt. Der istio-ingressgateway liest das im Feld credentialName genannte Geheimnis aus diesem Namespace aus. Kopieren Sie den Zertifikatswert nicht in die Ressource Gateway.

    apiVersion: networking.istio.io/v1
    kind: Gateway
    metadata:
      name: headlamp-gateway
      namespace: ibm-system
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: <ssl_cert_secret_name>
        hosts:
        - <subdomain>
    ---
    apiVersion: networking.istio.io/v1
    kind: VirtualService
    metadata:
      name: headlamp
      namespace: ibm-system
    spec:
      hosts:
      - <subdomain>
      gateways:
      - headlamp-gateway
      http:
      - route:
        - destination:
            host: headlamp.ibm-system.svc.cluster.local
            port:
              number: 80
    
  8. Verwenden Sie die Ressourcen VirtualService und Gateway.

    kubectl apply -f headlamp-istio.yaml
    
  9. Öffnen Sie das Headlamp-Dashboard in einem Webbrowser, indem Sie die in Schritt 6 notierte Subdomain verwenden.

    https://<subdomain>
    

    Um die Verbindung über die Befehlszeile zu überprüfen, führen Sie den folgenden Befehl aus. Verwenden Sie die Option -k, um die Zertifikatsüberprüfung ausschließlich während des Testbetriebs zu überspringen – verwenden Sie diese Option nicht in -k Produktionsumgebungen.

    curl -k -s -o /dev/null -w "%{http_code}\n" https://<subdomain>
    

Kubernetes von dem Addon erstellte Ressourcen

Das Headlamp-Addon erstellt mehrere Kubernetes Ressourcen in Ihrem Cluster, die eine korrekte Netzwerkkonfiguration erfordern.

Wenn Sie eine benutzerdefinierte Firewall oder Netzwerkeinstellungen haben, müssen Sie diese konfigurieren, um die Kommunikation zwischen den folgenden Ressourcen zu ermöglichen:

  • 4 Ingress-Ressourcen
    • privat mit private-iks-k8s-nginx ingressClass
    • öffentlich mit public-iks-k8s-nginx ingressClass
    • private mit private-iks-traefik ingressClass
    • public mit public-iks-traefik ingressClass
  • 1 Dienst ( ClusterIP auf Port 80 → 4466)
  • 1 Einsatz
    • Scheinwerfer-Container (Hafen 4466)
    • nginx-Sidecar-Container

OIDC für das Headlamp-Add-on über öffentliche Endpunkte aktivieren

Falls Ihr Cluster keine Verbindung zu privaten IAM-Endpunkten herstellen kann, überschreiben Sie die OIDC-Endpunkt-Einstellungen, um öffentliche Endpunkte zu verwenden.

Diese Schritte setzen voraus, dass der Cluster auf die öffentlichen IAM-Endpunkte zugreifen kann.

Bevor Sie beginnen, stellen Sie sicher, dass „ kubectl “ für den Cluster konfiguriert ist.

  1. Öffnen Sie die Datei ConfigMap headlamp-values zur Bearbeitung:

    kubectl edit cm -n ibm-system headlamp-values
    

    Fügen Sie im Editor im Abschnitt „ data “ Folgendes hinzu. Ersetzen Sie durch <account_id> die ID des Kontos, auf dem der Cluster bereitgestellt ist.

    data:
      values.yaml: |-
        oidc:
          overrides:
            tokenEndpointUrl: "https://iam.cloud.ibm.com/identity/token?account=<account_id>"
            jwksUri: "https://iam.cloud.ibm.com/identity/keys"
    
  2. Warten Sie bis zu 5 Minuten, bis die aktualisierten Werte im Cluster übernommen wurden.

  3. Starten Sie die Bereitstellung von Headlamp neu:

    kubectl rollout restart deployment/headlamp -n ibm-system
    

Fehlerbehebung bei der Scheinwerfererweiterung

Verwenden Sie die folgenden Informationen, um allgemeine Probleme mit dem Scheinwerfer-Zusatzgerät zu beheben.

Kein Zugriff auf das Armaturenbrett des Scheinwerfers

Wenn Sie nicht auf das Headlamp-Dashboard zugreifen können, überprüfen Sie Folgendes:

  1. Überprüfen Sie, ob das Add-on installiert ist und ordnungsgemäß funktioniert.
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    
  2. Stellen Sie sicher, dass die Headlamp-Pods laufen.
    kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    
  3. Überprüfen Sie, ob die Ingress-Ressource korrekt konfiguriert ist.
    kubectl get ingress -n ibm-system
    
  4. Stellen Sie bei ausschließlich öffentlichen Clustern sicher, dass die Netzwerksicherheitsregeln ausgehende „ HTTPS “-Verbindungen zu öffentlichen IAM-Endpunkten zulassen. Falls erforderlich, lesen Sie den Abschnitt „OIDC für das Headlamp-Add-on über öffentliche Endpunkte aktivieren“, um die OIDC-Konfiguration zu aktualisieren.

Authentifizierung schlägt fehl

Wenn die Authentifizierung beim Zugriff auf das Headlamp-Dashboard fehlschlägt:

  1. Vergewissern Sie sich, dass Sie über die erforderlichen IAM-Berechtigungen für den Zugriff auf den Cluster verfügen.

  2. Überprüfen Sie, ob Ihr Browser auf https://iam.cloud.ibm.com zugreifen kann.

  3. Löschen Sie Ihre Browser-Cookies und versuchen Sie es erneut.

  4. Überprüfen Sie, ob das OIDC-Client-ID-Geheimnis in Ihrem Cluster existiert.

    kubectl get secret clientid-secrets -n ibm-system
    

Die Pods laufen nicht

Wenn die Scheinwerfer nicht in Betrieb sind:

  1. Prüfen Sie den Pod-Status und die Ereignisse.
    kubectl describe pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    
  2. Überprüfen Sie die Pod-Protokolle auf Fehler.
    kubectl logs -n ibm-system -l app.kubernetes.io/name=addon-headlamp