Konfigurieren und Verwalten von TLS-Zertifikaten für Pinniped

In diesem Thema wird erläutert, wie Sie benutzerdefinierte TLS-Zertifikate für Pinniped in Tanzu Kubernetes Grid konfigurieren können.

Konfigurieren von benutzerdefinierten TLS-Zertifikaten

Standardmäßig verwendet Tanzu Kubernetes Grid einen selbstsignierten Issuer, um die TLS-Zertifikate zu generieren, die den HTTPS-Datenverkehr zu Pinniped sichern. Optional können Sie die Standardkonfiguration nach der Bereitstellung des Verwaltungsclusters wie folgt aktualisieren:

  1. Legen Sie eine benutzerdefinierte ClusterIssuer-Ressource oder Ihren eigenen geheimen TLS-Schlüssel fest. Weitere Informationen finden Sie nachstehend unter Festlegen einer ClusterIssuer-Ressource oder eines geheimen TLS-Schlüssels.
  2. Aktualisieren Sie Ihre Pinniped-Konfiguration, indem Sie den geheimen Pinniped-Add-on-Schlüssel für den Verwaltungscluster erneut bereitstellen. Weitere Informationen finden Sie nachstehend unter Aktualisieren Ihrer Pinniped-Konfiguration.

Festlegen einer ClusterIssuer-Ressource oder eines geheimen TLS-Schlüssels

Wenn Sie eine benutzerdefinierte ClusterIssuer-Ressource zum Generieren der TLS-Zertifikate verwenden möchten:

  1. Stellen Sie sicher, dass cert-manager in Ihrem Verwaltungscluster ausgeführt wird. Diese Komponente wird standardmäßig in allen Verwaltungsclustern ausgeführt.
  2. Rufen Sie den Namen einer vorhandenen ClusterIssuer-Ressource im Verwaltungscluster ab. Weitere Informationen finden Sie in der Dokumentation zu cert-manager unter Issuer Configuration.
  3. Geben Sie den Namen ClusterIssuer im Feld custom_cluster_issuer des Abschnitts values.yaml im geheimen Pinniped-Add-on-Schlüssel für den Verwaltungscluster an und wenden Sie dann Ihre Änderungen an. Anweisungen finden Sie nachstehend unter Aktualisieren Ihrer Pinniped-Konfiguration. Nachdem Sie die Schritte in diesem Abschnitt ausgeführt haben, wird die Pinniped-Zertifikatskette von Ihrem ClusterIssuer signiert.

Wenn Sie Ihren eigenen geheimen TLS-Schlüssel direkt angeben möchten:

  1. Rufen Sie die IP-Adresse oder den DNS-Hostnamen des Pinniped-Diensts pinniped-supervisor ab:

    • Wenn als Diensttyp LoadBalancer festgelegt ist (vSphere mit einem Lastausgleichsdienst, z. B. NSX Advanced Load Balancer, Amazon Web Services (AWS) oder Azure), rufen Sie die externe Adresse des Diensts ab, indem Sie folgenden Befehl ausführen:
    kubectl get service pinniped-supervisor -n pinniped-supervisor
    
    • Wenn als Diensttyp NodePort (vSphere ohne Lastausgleichsdienst) festgelegt ist, ist die IP-Adresse des Diensts mit dem Endpoint der vSphere-Steuerungsebene identisch. Um die IP-Adresse abzurufen, können Sie den folgenden Befehl ausführen:
    kubectl get configmap cluster-info -n kube-public -o yaml
    
  2. Erstellen Sie einen geheimen kubernetes.io/tls-Schlüssel im pinniped-supervisor-Namespace. Um einen geheimen TLS-Schlüssel zu erstellen, führen Sie folgenden Befehl aus:

    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
    

    Ersetzen Sie den Platzhaltertext wie folgt:

    • SECRET-NAME ist der Name, den Sie für den geheimen Schlüssel ausgewählt haben. Beispiel: my-secret.
    • FILENAME-* ist der Name Ihrer Datei tls.crt, tls.key oder ca.crt. Das TLS-Zertifikat, das Sie im geheimen TLS-Schlüssel für Pinniped angeben, muss den IP- oder DNS-Hostnamen des Pinniped-Diensts aus dem obigen Schritt enthalten. Das Feld ca.crt ist erforderlich und enthält das CA-Paket, das zur Verifizierung des TLS-Zertifikats verwendet wird.

    Der resultierende geheime Schlüssel für Pinniped sieht ähnlich dem Folgenden aus:

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

    Wenn der geheime Schlüssel ordnungsgemäß generiert wurde, wird beim Entschlüsseln von tls.crt mit openssl x509 -in tls.crt -text die IP-Adresse oder der DNS-Hostname im Feld „Alternativer Antragstellername (Subject Alternative Name)“ angezeigt.

  3. Geben Sie den Namen des geheimen Schlüssels im Feld custom_tls_secret des Abschnitts values.yaml im geheimen Pinniped-Add-on-Schlüssel für den Verwaltungscluster an und wenden Sie dann Ihre Änderungen an. Anweisungen finden Sie nachstehend unter Aktualisieren Ihrer Pinniped-Konfiguration.

  4. Wenn Sie einen DNS-Hostnamen für den Pinniped-Dienst konfigurieren möchten, geben Sie den mit einem Pinniped-Supervisor verknüpften FQDN im Feld pinniped.supervisor_svc_external_dns des Abschnitts values.yaml im geheimen Pinniped-Add-On-Schlüssel für den Verwaltungscluster an. Beachten Sie, dass der Wert von pinniped.supervisor_svc_external_dns mit https:// beginnen muss. Weitere Informationen finden Sie unter values.yaml-Einstellungen des automatisch verwalteten Pakets. Wenden Sie dann Ihre Änderungen an. Anweisungen finden Sie nachstehend unter Aktualisieren Ihrer Pinniped-Konfiguration. Beachten Sie, dass Sie DNS für diesen Hostnamen separat konfigurieren müssen, indem Sie beispielsweise einen A-Datensatz in Ihrem DNS-Anbieter erstellen, der in die IP-Adresse des Pinniped-Supervisor-Diensts aufgelöst werden soll. Dieser Hostname muss als alternativer Antragstellername im TLS-Zertifikat aufgeführt sein, das Sie für den Pinniped-Supervisor konfigurieren.

Aktualisieren Ihrer Pinniped-Konfiguration

Um Ihre Änderungen zu übernehmen, aktualisieren Sie die Pinniped-Konfiguration, indem Sie die folgenden Schritte ausführen:

  1. Speichern Sie den geheimen Pinniped-Add-On-Schlüssel für den Verwaltungscluster in einer Datei und entschlüsseln Sie die Base64-codierte Zeichenfolge im Abschnitt values.yaml des geheimen Schlüssels.

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

    Ersetzen Sie den Platzhaltertext wie folgt:

    • CLUSTER-NAME ist der Name Ihres Verwaltungsclusters.
    • FILENAME ist der Dateiname, den Sie für den geheimen Schlüssel verwenden möchten. Beispiel: values.yaml.
  2. Führen Sie im entschlüsselten Text eine der folgenden Aktionen aus:

    • Wenn Sie oben eine ClusterIssuer-Ressource vorbereitet haben, geben Sie den Namen der Ressource im Feld custom_cluster_issuer an. Beispiel:

      ---
      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……
      ...
      
    • Wenn Sie oben Ihren eigenen TLS-Schlüssel vorbereitet haben, geben Sie den Namen des geheimen Schlüssels im Feld custom_tls_secret an. Beispiel:

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

      Wenn Sie das Feld custom_tls_secret konfigurieren, wird das Feld custom_cluster_issuer ignoriert.

      Wenn Sie einen DNS-Hostnamen für den Pinniped-Dienst konfigurieren möchten, geben Sie im Feld pinniped.supervisor_svc_external_dns den FQDN an, der für den Pinniped-Supervisor verwendet werden soll. Beispiel:

      ...
      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. Codieren Sie den Abschnitt values.yaml erneut und aktualisieren Sie den geheimen Schlüssel des Pinniped-Add-Ons. Dieser Befehl unterscheidet sich je nach dem in Ihrer Umgebung eingesetzten Betriebssystem. Beispiel:

    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. Bestätigen Sie, dass die Änderungen erfolgreich angewendet wurden:

    1. Rufen Sie den Status der App pinniped ab:

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

      Wenn der zurückgegebene Status „Reconcile failed“ ist, führen Sie den folgenden Befehl aus, um Details zu dem Fehler abzurufen:

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
      
    2. Generieren Sie eine kubeconfig-Datei für den Verwaltungscluster, indem Sie den Befehl tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME ausführen. Führen Sie dann einen Befehl wie kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME mithilfe der kubeconfig aus. Wenn Ihr Verwaltungscluster weitere Arbeitslastcluster verwaltet, führen Sie außerdem tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME und anschließend kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME für jeden der vorhandenen Cluster aus.

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