Configurazione e gestione dei certificati TLS per Pinniped

Questo argomento spiega come configurare certificati TLS personalizzati per Pinniped in Tanzu Kubernetes Grid.

Configurazione di certificati TLS personalizzati

Per impostazione predefinita, Tanzu Kubernetes Grid utilizza un Issuer autofirmato per generare i certificati TLS che proteggono il traffico HTTPS verso Pinniped. Facoltativamente, è possibile aggiornare la configurazione predefinita dopo la distribuzione del cluster di gestione, come indicato di seguito:

  1. Impostare una risorsa ClusterIssuer personalizzata o un segreto TLS. Vedere Impostazione di una risorsa ClusterIssuer o un segreto TLS di seguito.
  2. Aggiornare la configurazione di Pinniped ridistribuendo il segreto del componente aggiuntivo Pinniped per il cluster di gestione. Vedere Aggiornamento della configurazione di Pinniped di seguito.

Impostazione di una risorsa ClusterIssuer o un segreto TLS

Se si desidera utilizzare una risorsa ClusterIssuer personalizzata per generare i certificati TLS:

  1. Verificare che cert-manager sia in esecuzione nel cluster di gestione. Questo componente viene eseguito per impostazione predefinita in tutti i cluster di gestione.
  2. Recuperare il nome di una risorsa ClusterIssuer esistente nel cluster di gestione. Per ulteriori informazioni, vedere Configurazione dell'emittente nella documentazione di cert-manager.
  3. Specificare il nome di ClusterIssuer nel campo custom_cluster_issuer della sezione values.yaml nel segreto del componente aggiuntivo Pinniped per il cluster di gestione e quindi applicare le modifiche. Per istruzioni, vedere Aggiornamento della configurazione di Pinniped di seguito. Dopo aver completato i passaggi indicati in questa sezione, la catena di certificati Pinniped sarà firmata da ClusterIssuer.

Se si desidera specificare direttamente il proprio segreto TLS:

  1. Recuperare l'indirizzo IP o il nome host DNS del servizio Pinniped, pinniped-supervisor:

    • Se il tipo di servizio è impostato su LoadBalancer (vSphere con bilanciamento del carico, ad esempio NSX Advanced Load Balancer, Amazon Web Services (AWS) o Azure), recuperare l'indirizzo esterno del servizio eseguendo:
    kubectl get service pinniped-supervisor -n pinniped-supervisor
    
    • Se il tipo di servizio è impostato su NodePort (vSphere senza bilanciamento del carico), l'indirizzo IP del servizio è uguale all'endpoint del piano di controllo di vSphere. Per recuperare l'indirizzo IP, è possibile eseguire il comando seguente:
    kubectl get configmap cluster-info -n kube-public -o yaml
    
  2. Creare un segreto kubernetes.io/tls nello spazio dei nomi pinniped-supervisor. Per creare un segreto TLS, eseguire:

    kubectl create secret generic SECRET-NAME -n pinniped-supervisor --type kubernetes.io/tls --from-file tls.crt=FILENAME-1.crt --from-file tls.key=FILENAME-2.pem --from-file ca.crt=FILENAME-3.pem
    

    Sostituire il testo segnaposto nel modo seguente:

    • SECRET-NAME è il nome scelto per il segreto. Ad esempio my-secret.
    • FILENAME-* è il nome di tls.crt, tls.key o ca.crt. Il certificato TLS specificato nel segreto TLS per Pinniped deve includere l'IP o il nome host DNS del servizio Pinniped del passaggio precedente. Il campo ca.crt è obbligatorio e contiene il bundle CA utilizzato per verificare il certificato TLS.

    Ad esempio, il segreto risultante per Pinniped è simile al seguente:

    apiVersion: v1
    kind: Secret
    metadata:
     name: my-secret
     namespace: pinniped-supervisor
    type: kubernetes.io/tls
    data:
     tls.crt: |       MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
     tls.key: |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
     ca.crt:  |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
    

    Se il segreto è stato generato correttamente, quando si decodifica tls.crt con openssl x509 -in tls.crt -text, viene visualizzato l'indirizzo IP o il nome host DNS nel campo Nome alternativo oggetto (Subject Alternative Name).

  3. Specificare il nome del segreto nel campo custom_tls_secret della sezione values.yaml nel segreto del componente aggiuntivo Pinniped per il cluster di gestione e quindi applicare le modifiche. Per istruzioni, vedere Aggiornamento della configurazione di Pinniped di seguito.

  4. Se si desidera configurare un nome host DNS per il servizio Pinniped, specificare l'FQDN associato a un supervisore Pinniped nel campo pinniped.supervisor_svc_external_dns della sezione values.yaml nel segreto del componente aggiuntivo Pinniped per il cluster di gestione. Tenere presente che il valore di pinniped.supervisor_svc_external_dns deve iniziare con https://. Vedere Impostazioni di values.yaml dei pacchetti gestiti automaticamente in dettaglio. Applicare quindi le modifiche. Per istruzioni, vedere Aggiornamento della configurazione di Pinniped di seguito. Tenere presente che è necessario configurare il DNS separatamente per questo nome host, ad esempio creando un record A nel provider DNS per la risoluzione nell'indirizzo IP del servizio del supervisore Pinniped. Questo nome host deve essere elencato come nome alternativo dell'oggetto nel certificato TLS configurato per il supervisore Pinniped.

Aggiornamento della configurazione di Pinniped

Per applicare le modifiche, aggiornare la configurazione di Pinniped eseguendo i passaggi seguenti:

  1. Salvare il segreto del componente aggiuntivo Pinniped per il cluster di gestione in un file e decodificare la stringa con codifica Base64 nella sezione values.yaml del segreto.

    kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
    

    Sostituire il testo segnaposto nel modo seguente:

    • CLUSTER-NAME è il nome del cluster di gestione.
    • FILENAME è il nome del file che si desidera utilizzare per il segreto. Ad esempio values.yaml.
  2. Nel testo decodificato eseguire una delle operazioni seguenti:

    • Se in precedenza è stata preparata una risorsa ClusterIssuer, specificare il nome della risorsa nel campo custom_cluster_issuer. Ad esempio:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_cluster_issuer: "my-cluster-issuer-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      
    • Se in precedenza è stato preparato un segreto TLS personalizzato, specificare il nome del segreto nel campo custom_tls_secret. Ad esempio:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_tls_secret: "my-tls-secret-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      

      Se si configura il campo custom_tls_secret, il campo custom_cluster_issuer viene ignorato.

      Se si desidera configurare un nome host DNS per il servizio Pinniped, specificare l'FQDN da utilizzare per il supervisore Pinniped nel campo pinniped.supervisor_svc_external_dns. Ad esempio,

      ...
      pinniped:
      cert_duration: 2160h
      cert_renew_before: 360h
      supervisor_svc_endpoint: https://0.0.0.0:31234
      supervisor_ca_bundle_data: ca_bundle_data_of_supervisor_svc
      supervisor_svc_external_ip: 0.0.0.0
      supervisor_svc_external_dns: https://pinniped.example.com
      ...
      
  3. Codificare nuovamente la sezione values.yaml e aggiornare il segreto del componente aggiuntivo Pinniped. Questo comando varia in base al sistema operativo del proprio ambiente. Ad esempio:

    Linux:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 -w 0 < values.yaml)\"}}" --type=merge
    

    macOS:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 < values.yaml)\"}}" --type=merge
    
  4. Verificare che le modifiche siano state applicate correttamente:

    1. Recuperare lo stato dell'app pinniped:

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system
      

      Se lo stato restituito è Riconciliazione non riuscita (Reconcile failed), eseguire il comando seguente per recuperare dettagli sull'errore:

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
      
    2. Generare un file kubeconfig per il cluster di gestione eseguendo il comando tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME. Eseguire quindi un comando come kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME utilizzando kubeconfig. Inoltre, se il cluster di gestione gestisce cluster del carico di lavoro, eseguire tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME e quindi kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME per ciascuno dei cluster esistenti.

check-circle-line exclamation-circle-line close-line
Scroll to top icon