Questo argomento spiega come configurare certificati TLS personalizzati per Pinniped in Tanzu Kubernetes Grid.
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:
ClusterIssuer
personalizzata o un segreto TLS. Vedere Impostazione di una risorsa ClusterIssuer
o un segreto TLS di seguito.ClusterIssuer
o un segreto TLSSe si desidera utilizzare una risorsa ClusterIssuer
personalizzata per generare i certificati TLS:
cert-manager
sia in esecuzione nel cluster di gestione. Questo componente viene eseguito per impostazione predefinita in tutti i cluster di gestione.ClusterIssuer
esistente nel cluster di gestione. Per ulteriori informazioni, vedere Configurazione dell'emittente nella documentazione di cert-manager.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:
Recuperare l'indirizzo IP o il nome host DNS del servizio Pinniped, pinniped-supervisor
:
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
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
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).
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.
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.
Per applicare le modifiche, aggiornare la configurazione di Pinniped eseguendo i passaggi seguenti:
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
.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
...
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
Verificare che le modifiche siano state applicate correttamente:
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
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.