Impostazione del componente aggiuntivo Headlamp

Headlamp è una dashboard di Kubernetes che fornisce un'interfaccia grafica per la gestione e il monitoraggio delle risorse del cluster. Il componente aggiuntivo Headlamp per IBM Cloud® Kubernetes Service fornisce un'installazione perfetta di Headlamp con gestione automatica del ciclo di vita e integrazione con IBM Cloud Identity and Access Management (IAM) per l'autenticazione.

Capire il componente aggiuntivo della lampada frontale

Il componente aggiuntivo Headlamp è il sostituto consigliato per il progetto archiviato kubernetes-dashboard. Headlamp offre un'interfaccia moderna e facile da usare per visualizzare e gestire le risorse di Kubernetes nel vostro cluster.

Le caratteristiche principali del componente aggiuntivo della lampada frontale includono:

  • Autenticazione IAM OIDC: Autenticatevi senza problemi con il vostro account IBM Cloud utilizzando IAM OIDC.
  • Gestione indipendente del ciclo di vita: La versione aggiuntiva è disaccoppiata dalle versioni della distinta base master del cluster, consentendo aggiornamenti indipendenti.
  • Pronto per l'accesso: Il componente aggiuntivo viene esposto automaticamente tramite una risorsa Ingress sull'hostname di ingress pubblico predefinito del vostro cluster con un sottodominio headlamp.
  • Accesso sicuro: Ogni cluster riceve un ID client OIDC univoco per prevenire gli attacchi di spoofing dell'autenticazione.

Prerequisiti

Prima di installare il componente aggiuntivo Headlamp, accertarsi che il cluster soddisfi i seguenti requisiti:

Installazione del componente aggiuntivo Headlamp

Il componente aggiuntivo Headlamp è attualmente disponibile solo tramite la CLI. Non è possibile installare o gestire il componente aggiuntivo dalla console IBM Cloud.

Installazione del componente aggiuntivo Headlamp con la CLI

  1. Aggiorna il plug-in " container-service " alla versione più recente.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. Destinazione del cluster.
    ibmcloud ks cluster config --cluster CLUSTER_NAME_OR_ID
    
  3. Attiva il componente aggiuntivo “ headlamp ”.
    ibmcloud ks cluster addon enable headlamp --cluster CLUSTER_NAME_OR_ID
    
  4. Verificare che lo stato del componente aggiuntivo "Headlamp" sia " Addon Ready".
    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    
    Output di esempio:
    NAME       Version   Health State   Health Status
    headlamp   0.1.0     normal         Addon Ready
    
  5. Verificare che i moduli dei fari siano accesi.
    kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    

Accesso al cruscotto del proiettore

Dopo aver installato il componente aggiuntivo Headlamp, è possibile accedere alla dashboard attraverso l'hostname di ingresso predefinito del cluster.

  1. Ottenere il nome host di ingresso predefinito del cluster.

    ibmcloud ks cluster get --cluster <cluster_name_or_ID> | grep "Ingress Subdomain"
    
  2. Aprire il browser e navigare all'indirizzo https://headlamp.<ingress_subdomain>, dove <ingress_subdomain> è l'hostname di ingresso predefinito del cluster.

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

  3. Fare clic su Accedi per autenticarsi con IBM Cloud IAM.

  4. Se non si è già effettuato l'accesso a IBM Cloud, si verrà reindirizzati alla pagina di accesso IAM. Dopo l'autenticazione, si verrà reindirizzati alla dashboard di Headlamp.

  5. Una volta autenticati, è possibile visualizzare e gestire le risorse del cluster attraverso l'interfaccia di Headlamp.

Migrazione da kubernetes-dashboard

La comunità Kubernetes ha archiviato il progetto kubernetes-dashboard. Dopo aver installato il componente aggiuntivo Headlamp, è possibile ridimensionare la distribuzione di kubernetes-dashboard se è in esecuzione nel cluster.

Per ridimensionare la distribuzione di kubernetes-dashboard dopo l'installazione di Headlamp:

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

Capire l'autenticazione delle lampade frontali

Il componente aggiuntivo Headlamp utilizza l'autenticazione OIDC di IBM Cloud IAM per proteggere l'accesso alle risorse del cluster.

Quando si attiva il componente aggiuntivo Headlamp, vengono configurati automaticamente i seguenti componenti di autenticazione:

  • ID cliente unico: Viene creato un ID client OIDC univoco per il cluster e memorizzato in un segreto Kubernetes nello spazio dei nomi ibm-system.
  • OIDC ibrido privato-pubblico: Headlamp utilizza endpoint IAM privati per le richieste di backchannel, mentre il frontchannel - il login nel browser - avviene tramite endpoint IAM pubblici.
  • Gestione dei token: I token di autenticazione vengono memorizzati nei cookie del browser e inclusi automaticamente nelle richieste al server API Kubernetes.

Il flusso di autenticazione funziona come segue:

  1. Quando si accede alla dashboard di Headlamp, viene presentata una pagina di accesso.
  2. Facendo clic su Accedi si viene reindirizzati all'endpoint di autorizzazione IAM pubblico di IBM Cloud.
  3. Dopo l'autenticazione, IAM reindirizza l'utente a Headlamp con un codice di autorizzazione.
  4. Headlamp scambia il codice di autorizzazione con un token di accesso su rete privata.
  5. Il token di accesso viene utilizzato per autenticare le richieste al server Kubernetes API.

L'accesso dell'utente alle risorse del cluster è determinato dai ruoli IAM IBM Cloud e dalle autorizzazioni RBAC Kubernetes applicate dal server API Kubernetes.

Aggiornamento del componente aggiuntivo Headlamp

Il componente aggiuntivo Headlamp viene aggiornato automaticamente quando vengono rilasciate nuove versioni. È possibile controllare la versione corrente e lo stato di salute del componente aggiuntivo in qualsiasi momento.

Per verificare la versione del componente aggiuntivo:

ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>

Disattivare il componente aggiuntivo Headlamp

Se non si ha più bisogno del cruscotto Headlamp, è possibile disattivare il componente aggiuntivo.

Quando si disattiva il componente aggiuntivo Headlamp, vengono rimosse le seguenti risorse:

  • Distribuzione dei fari e baccelli
  • Risorse per la manutenzione e l'ingresso dei fari
  • ID cliente OIDC e segreti associati

Disabilitazione del componente aggiuntivo Headlamp con la CLI

  1. Disattivare il componente aggiuntivo Headlamp.
    ibmcloud ks cluster addon disable headlamp --cluster <cluster_name_or_ID>
    
  2. Verificare che il componente aggiuntivo sia stato rimosso.
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    

Accesso a Headlamp tramite ingress privato su cluster VPC

Configurare il cluster VPC in modo che acceda a Headlamp attraverso un ingresso privato anziché pubblico, per una maggiore sicurezza.

Quando si sceglie di accedere a Headlamp da reti private, ad esempio tramite una VPC VPN, è possibile riconfigurare il cluster con i seguenti passaggi:

  1. Disattivare l'ALB pubblico del cluster.

    ibmcloud ks ingress alb disable --cluster <cluster_name_or_ID> --alb <public_ALB_ID>
    
  2. Abilita l'ingresso privato.

    ibmcloud ks ingress alb enable vpc-gen2 --cluster <cluster_name_or_ID> --alb <private_ALB_ID>
    
  3. Registrare un dominio nell'ALB privato.

    ibmcloud ks ingress domain create --cluster <cluster_name_or_ID> --hostname $<private_ALB_ID_hostname>
    
  4. Impostare il nuovo dominio come predefinito.

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

Il backend di IBM Cloud aggiorna Headlamp in circa 5 minuti. Al termine dell'aggiornamento, il dashboard è disponibile sul nuovo hostname di ingresso predefinito, con il sottodominio headlamp..

Esposizione del faro anteriore tramite il gateway di ingresso Istio

Se il cluster instrada il traffico esterno attraverso il gateway di ingresso " Istio ", è possibile disabilitare le risorse Ingress predefinite create dal componente aggiuntivo Headlamp ed esporre Headlamp utilizzando invece Istio, Gateway e VirtualService.

È necessario rendere accessibile Headlamp tramite un sottodominio fornito da IBM all’interno del dominio *.containers.appdomain.cloud. L'ID client OIDC del tuo cluster è registrato con un URI di reindirizzamento che corrisponde a quel dominio. Il nome host grezzo del bilanciatore di carico istio-ingressgateway non appartiene a quel dominio e, se lo si utilizza direttamente, l'autenticazione fallisce.

Prima di iniziare

  1. Apri il file headlamp-values ConfigMap in modalità di modifica per disabilitare le risorse Ingress predefinite create dal componente aggiuntivo Headlamp.

    kubectl edit cm -n ibm-system headlamp-values
    

    Aggiungi quanto segue alla sezione data per impedire che l'estensione crei le risorse predefinite NGINX e Traefik Ingress.

    data:
      values.yaml: |-
        createDefaultPublicIngressNginx: false
        createDefaultPrivateIngressNginx: false
        createDefaultPublicIngressTraefik: false
        createDefaultPrivateIngressTraefik: false
    
  2. Attendere fino a 5 minuti affinché i valori aggiornati vengano propagati al cluster.

  3. Verificare che le risorse Ingress predefinite siano state rimosse.

    kubectl get ingress -n ibm-system
    
  4. Ottenere l'indirizzo IP (cluster classici) o il nome host (cluster VPC) del bilanciatore di carico istio-ingressgateway.

    • Cluster classici:
        kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
        ```
    * Cluster VPC:
    ```sh {: pre}
        kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
        ```
    Se il comando restituisce un valore vuoto, il bilanciatore di carico non è ancora stato configurato. Verificare che il servizio disponga di un indirizzo IP esterno e controllare gli eventi del servizio per individuare eventuali errori, come ad esempio il superamento del limite di quota del bilanciatore di carico.
    {: note}
    
    ```sh {: pre}
    kubectl describe service istio-ingressgateway -n istio-system
    
  5. Registra l'indirizzo IP (metodo classico) o il nome host (VPC) del bilanciatore di carico creando un sottodominio fornito da IBM. Specificare lo spazio dei nomi istio-system per il segreto TLS in modo che il certificato TLS sia disponibile per istio-ingressgateway.

    • Cluster classici:
        ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_ID> --ip <istio_ingressgateway_IP> --secret-namespace istio-system
        ```
    * Cluster VPC:
    ```sh {: pre}
        ibmcloud ks nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <istio_ingressgateway_hostname> --secret-namespace istio-system
        ```
    
  6. Verificare che il sottodominio sia stato creato e prendere nota del nome del sottodominio e del nome segreto del certificato SSL.

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

    Output di esempio per i cluster classici:

    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
    

    Output di esempio per i cluster VPC:

    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
    

    Se il cluster presenta più voci NLB-DNS, individuare il sottodominio creato nel passaggio precedente abbinando la colonna Target(s) o IP(s) all'indirizzo del bilanciatore di carico istio-ingressgateway e verificando che la colonna Secret Namespace riporti istio-system.

  7. Crea un file denominato " headlamp-istio.yaml " che definisca un " Gateway " e un " VirtualService " per Headlamp. Sostituisci <subdomain> con il sottodominio indicato nel passaggio precedente e <ssl_cert_secret_name> con il nome segreto del certificato SSL.

    Il segreto del certificato " TLS " viene creato nello spazio dei nomi " istio-system ". L' istio-ingressgateway e legge il segreto indicato nel campo " credentialName " da quel namespace. Non copiare il valore del certificato nella risorsa 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. Utilizza le risorse “ Gateway ” e “ VirtualService ”.

    kubectl apply -f headlamp-istio.yaml
    
  9. Apri la dashboard di Headlamp in un browser web utilizzando il sottodominio che hai annotato al punto 6.

    https://<subdomain>
    

    Per verificare la connettività dalla riga di comando, eseguire il comando seguente. Utilizza l'opzione " -k " per saltare la verifica del certificato solo durante i test; non utilizzare " -k " negli ambienti di produzione.

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

Kubernetes risorse create dal componente aggiuntivo

L'addon Headlamp crea diverse risorse Kubernetes nel cluster che richiedono una configurazione di rete adeguata.

Se si dispone di un firewall personalizzato o di impostazioni di rete, è necessario configurarlo per consentire la comunicazione tra le seguenti risorse:

  • 4 Risorse di Ingress
    • privato con private-iks-k8s-nginx ingressClass
    • pubblico con public-iks-k8s-nginx ingressClass
    • privato con private-iks-traefik ingressClass
    • public con public-iks-traefik ingressClass
  • 1 Servizio ( ClusterIP sulla porta 80 → 4466)
  • 1 Distribuzione
    • contenitore per fari (porto 4466)
    • contenitore sidecar nginx

Abilita OIDC per il componente aggiuntivo Headlamp tramite endpoint pubblici

Se il cluster non riesce a connettersi agli endpoint IAM privati, sovrascrivi le impostazioni dell'endpoint OIDC per utilizzare gli endpoint pubblici.

Questi passaggi presuppongono che il cluster possa accedere agli endpoint pubblici di IAM.

Prima di iniziare, assicurati che kubectl sia configurato per il cluster.

  1. Apri il file headlamp-values ConfigMap per modificarlo:

    kubectl edit cm -n ibm-system headlamp-values
    

    Nell'editor, aggiungi quanto segue alla sezione data. Sostituisci <account_id> con l'ID dell'account in cui è distribuito il cluster.

    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. Attendere fino a 5 minuti affinché i valori aggiornati vengano propagati al cluster.

  3. Riavviare l'implementazione di Headlamp:

    kubectl rollout restart deployment/headlamp -n ibm-system
    

Risoluzione dei problemi del componente aggiuntivo della lampada frontale

Utilizzare le seguenti informazioni per risolvere i problemi più comuni con il componente aggiuntivo Headlamp.

Impossibile accedere al cruscotto del proiettore

Se non si riesce ad accedere al cruscotto di Headlamp, verificare quanto segue:

  1. Verificare che il componente aggiuntivo sia installato e funzionante.
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    
  2. Verificare che i moduli dei fari siano accesi.
    kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    
  3. Verificare che la risorsa di ingresso sia configurata correttamente.
    kubectl get ingress -n ibm-system
    
  4. Per i cluster esclusivamente pubblici, verificare che le regole di sicurezza di rete consentano le connessioni in uscita HTTPS agli endpoint IAM pubblici. Se necessario, consultare la sezione " Abilitare OIDC per il componente aggiuntivo Headlamp tramite endpoint pubblici " per aggiornare la configurazione OIDC.

L'autenticazione non riesce

Se l'autenticazione non riesce ad accedere al cruscotto di Headlamp:

  1. Verificare che si disponga delle autorizzazioni IAM necessarie per accedere al cluster.

  2. Verificate che il vostro browser possa accedere a https://iam.cloud.ibm.com.

  3. Cancellare i cookie del browser e riprovare.

  4. Verificare che il segreto dell'ID client OIDC esista nel cluster.

    kubectl get secret clientid-secrets -n ibm-system
    

I pod non sono in esecuzione

Se i proiettori non funzionano:

  1. Controllare lo stato e gli eventi del pod.
    kubectl describe pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
    
  2. Controllare i log dei pod per verificare la presenza di errori.
    kubectl logs -n ibm-system -l app.kubernetes.io/name=addon-headlamp