Cette rubrique explique comment configurer des certificats TLS personnalisés pour Pinniped dans Tanzu Kubernetes Grid.
Par défaut, Tanzu Kubernetes Grid utilise un Issuer
auto-signé pour générer les certificats TLS qui sécurisent le trafic HTTPS vers Pinniped. Vous pouvez mettre à jour la configuration par défaut après le déploiement du cluster de gestion, comme suit :
ClusterIssuer
ou votre propre secret TLS. Reportez-vous à la section Configurer une ressource ClusterIssuer
sur un secret TLS ci-dessous.ClusterIssuer
ou un secret TLSSi vous souhaitez utiliser une ressource ClusterIssuer
pour générer les certificats TLS :
cert-manager
est en cours d'exécution dans votre cluster de gestion. Ce composant s'exécute par défaut dans tous les clusters de gestion.ClusterIssuer
existante dans le cluster de gestion. Pour plus d'informations, reportez-vous à la section Issuer Configuration dans la documentation cert-manager.ClusterIssuer
dans le champ custom_cluster_issuer
de la section values.yaml
du secret du module complémentaire Pinniped pour le cluster de gestion, puis appliquez vos modifications. Pour obtenir des instructions, reportez-vous à la section Mettre à jour votre configuration Pinniped ci-dessous. Une fois les étapes de cette section terminées, la chaîne de certificats Pinniped sera signée par votre ClusterIssuer
.Si vous souhaitez spécifier directement votre propre secret TLS :
Récupérez l'adresse IP ou le nom d'hôte DNS du service Pinniped, pinniped-supervisor
:
LoadBalancer
(vSphere avec un équilibrage de charge, par exemple, NSX Advanced Load Balancer, Amazon Web Services (AWS) ou Azure), récupérez l'adresse externe du service en exécutant :kubectl get service pinniped-supervisor -n pinniped-supervisor
NodePort
(vSphere sans équilibrage de charge), l'adresse IP du service est identique à celle du point de terminaison du plan de contrôle vSphere. Pour récupérer l'adresse IP, vous pouvez exécuter la commande suivante :kubectl get configmap cluster-info -n kube-public -o yaml
Créez un secret kubernetes.io/tls
dans l'espace de noms pinniped-supervisor
. Pour créer un secret TLS, exécutez :
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
Remplacez le texte de l'espace réservé comme suit :
SECRET-NAME
est le nom que vous choisissez pour le secret. Par exemple, my-secret
.FILENAME-*
est le nom de votre tls.crt
, tls.key
ou ca.crt
. Le certificat TLS que vous spécifiez dans le secret TLS pour Pinniped doit inclure l'adresse IP ou le nom d'hôte DNS du service Pinniped à l'étape ci-dessus. Le champ ca.crt
est requis et contient le bundle d'autorité de certification utilisé pour vérifier le certificat TLS.Par exemple, le secret obtenu pour Pinniped ressemble à ceci :
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 ...
Si le secret a été généré correctement, le décodage tls.crt
avec openssl x509 -in tls.crt -text
affiche l'adresse IP ou le nom d'hôte DNS dans le champ Autre nom de l'objet (Subject Alternative Name).
Spécifiez le nom secret dans le champ custom_tls_secret
de la section values.yaml
du secret du module complémentaire Pinniped pour le cluster de gestion, puis appliquez vos modifications. Pour obtenir des instructions, reportez-vous à la section Mettre à jour votre configuration Pinniped ci-dessous.
Pour configurer un nom d'hôte DNS pour le service Pinniped, spécifiez le nom de domaine complet associé à un superviseur Pinniped dans le champ pinniped.supervisor_svc_external_dns
de la section values.yaml
du secret du module complémentaire Pinniped pour le cluster de gestion. Notez que la valeur de pinniped.supervisor_svc_external_dns
doit commencer par https://
. Reportez-vous à la section Paramètres values.yaml des modules autogérés en détail. Ensuite, appliquez vos modifications. Pour obtenir des instructions, reportez-vous à la section Mettre à jour votre configuration Pinniped ci-dessous. Notez que vous devez configurer séparément le DNS pour ce nom d'hôte, par exemple en créant un enregistrement A
dans votre fournisseur DNS pour résoudre l'adresse IP du service de superviseur Pinniped. Ce nom d'hôte doit être répertorié comme nom alternatif du sujet dans le certificat TLS que vous configurez pour le superviseur Pinniped.
Pour appliquer vos modifications, mettez à jour la configuration Pinniped en suivant les étapes ci-dessous :
Enregistrez le secret du module complémentaire Pinniped pour le cluster de gestion dans un fichier et décodez la chaîne codée en Base64 dans la section values.yaml
du secret.
kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
Remplacez le texte de l'espace réservé comme suit :
CLUSTER-NAME
est le nom de votre cluster de gestion.FILENAME
est le nom de fichier que vous souhaitez utiliser pour le secret. Par exemple, values.yaml
.Dans le texte décodé, effectuez l'une des opérations suivantes :
Si vous avez préparé une ressource ClusterIssuer
ci-dessus, spécifiez le nom de la ressource dans le champ custom_cluster_issuer
. Par exemple :
---
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……
...
Si vous avez préparé votre propre secret TLS ci-dessus, spécifiez son nom dans le champ custom_tls_secret
. Par exemple :
---
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……
...
Si vous configurez le champ custom_tls_secret
, le champ custom_cluster_issuer
est ignoré.
Pour configurer un nom d'hôte DNS pour le service Pinniped, spécifiez le nom de domaine complet qui doit être utilisé pour le superviseur Pinniped dans le champ pinniped.supervisor_svc_external_dns
. Par exemple,
...
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
...
Codez à nouveau la section values.yaml
et mettez à jour le secret du module complémentaire Pinniped. Cette commande diffère selon le système d'exploitation de votre environnement. Par exemple :
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
Vérifiez que les modifications ont bien été appliquées :
Obtenez l'état de l'application pinniped
:
kubectl get app CLUSTER-NAME-pinniped -n tkg-system
Si l'état renvoyé est Échec du rapprochement (Reconcile failed), exécutez la commande suivante pour obtenir des détails sur l'échec :
kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
Générez un fichier kubeconfig pour le cluster de gestion en exécutant la commande tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME
. Exécutez ensuite une commande telle que kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME
à l'aide de kubeconfig. En outre, si votre cluster de gestion gère des clusters de charge de travail, exécutez tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
puis kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
sur chacun des clusters existants.