Configurer et gérer des certificats TLS pour Pinniped

Cette rubrique explique comment configurer des certificats TLS personnalisés pour Pinniped dans Tanzu Kubernetes Grid.

Configuration de certificats TLS personnalisés

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 :

  1. Définissez une ressource ClusterIssuer ou votre propre secret TLS. Reportez-vous à la section Configurer une ressource ClusterIssuer sur un secret TLS ci-dessous.
  2. Mettez à jour votre configuration Pinniped en redéployant le secret du module complémentaire Pinniped pour le cluster de gestion. Reportez-vous à la section Mettre à jour votre configuration Pinniped ci-dessous.

Définir une ressource ClusterIssuer ou un secret TLS

Si vous souhaitez utiliser une ressource ClusterIssuer pour générer les certificats TLS :

  1. Vérifiez que 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.
  2. Obtenez le nom d'une ressource ClusterIssuer existante dans le cluster de gestion. Pour plus d'informations, reportez-vous à la section Issuer Configuration dans la documentation cert-manager.
  3. Spécifiez le nom 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 :

  1. Récupérez l'adresse IP ou le nom d'hôte DNS du service Pinniped, pinniped-supervisor:

    • Si le type du service est défini sur 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
    
    • Si le type du service est défini sur 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
    
  2. 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).

  3. 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.

  4. 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.

Mettre à jour la configuration Pinniped

Pour appliquer vos modifications, mettez à jour la configuration Pinniped en suivant les étapes ci-dessous :

  1. 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.
  2. 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
      ...
      
  3. 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
    
  4. Vérifiez que les modifications ont bien été appliquées :

    1. 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
      
    2. 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.

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