In diesem Thema wird erläutert, wie Sie benutzerdefinierte TLS-Zertifikate für Pinniped in Tanzu Kubernetes Grid konfigurieren können.
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:
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.ClusterIssuer
-Ressource oder eines geheimen TLS-SchlüsselsWenn Sie eine benutzerdefinierte ClusterIssuer
-Ressource zum Generieren der TLS-Zertifikate verwenden möchten:
cert-manager
in Ihrem Verwaltungscluster ausgeführt wird. Diese Komponente wird standardmäßig in allen Verwaltungsclustern ausgeführt.ClusterIssuer
-Ressource im Verwaltungscluster ab. Weitere Informationen finden Sie in der Dokumentation zu cert-manager unter Issuer Configuration.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:
Rufen Sie die IP-Adresse oder den DNS-Hostnamen des Pinniped-Diensts pinniped-supervisor
ab:
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
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
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.
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.
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.
Um Ihre Änderungen zu übernehmen, aktualisieren Sie die Pinniped-Konfiguration, indem Sie die folgenden Schritte ausführen:
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
.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
...
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
Bestätigen Sie, dass die Änderungen erfolgreich angewendet wurden:
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
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.