本主題說明如何在 Tanzu Kubernetes Grid 中為 Pinniped 設定自訂 TLS 憑證。
依預設,Tanzu Kubernetes Grid 會使用自我簽署 Issuer
來產生 TLS 憑證,以保護流向 Pinniped 的 HTTPS 流量。在您部署管理叢集後,您可以選擇性地更新預設組態,如下所示:
ClusterIssuer
資源或您自己的 TLS 密碼。請參閱下面的設定 ClusterIssuer
資源或 TLS 密碼。ClusterIssuer
資源或 TLS 密碼如果要使用自訂 ClusterIssuer
資源來產生 TLS 憑證,請執行下列動作:
cert-manager
正在您的管理叢集中執行。依預設,此元件會在所有管理叢集中執行。ClusterIssuer
資源的名稱。如需詳細資訊,請參閱 cert-manager 說明文件中的簽發者組態。values.yaml
區段的 custom_cluster_issuer
欄位中指定 ClusterIssuer
名稱,然後套用您所做的變更。如需相關指示,請參閱下面的更新 Pinniped 組態。在您完成本節中的步驟後,您的 ClusterIssuer
將會簽署 Pinniped 憑證鏈結。如果您要直接指定自己的 TLS 密碼,請執行下列動作:
擷取 Pinniped 服務的 IP 位址或 DNS 主機名稱,pinniped-supervisor
:
LoadBalancer
(具有負載平衡器的 vSphere,例如,NSX Advanced Load Balancer、Amazon Web Services (AWS) 或 Azure),請執行以下命令,擷取服務的外部位址:kubectl get service pinniped-supervisor -n pinniped-supervisor
NodePort
(沒有負載平衡器的 vSphere),則服務的 IP 位址會與 vSphere 控制平面端點相同。若要擷取 IP 位址,您可以執行下列命令:kubectl get configmap cluster-info -n kube-public -o yaml
在 kubernetes.io/tls
命名空間中建立 pinniped-supervisor
密碼。若要建立 TLS 密碼,請執行:
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
依如下所示,取代預留位置文字:
SECRET-NAME
是為密碼選擇的名稱。例如,my-secret
。FILENAME-*
是 tls.crt
、tls.key
或 ca.crt
的名稱。您在 Pinniped 的 TLS 密碼中所指定的 TLS 憑證,必須包含上述步驟中的 Pinniped 服務 IP 或 DNS 主機名稱。ca.crt
欄位為必填項並包含用於驗證 TLS 憑證的 CA 服務包。例如,針對 Pinniped 產生的密碼類似如下:
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 ...
如果密碼產生正確,當使用 openssl x509 -in tls.crt -text
來解碼 tls.crt
時,會在 [主體別名 (Subject Alternative Name)] 欄位中顯示 IP 位址或 DNS 主機名稱。
在管理叢集的 Pinniped 附加元件密碼中,於 values.yaml
區段的 custom_tls_secret
欄位中指定密碼名稱,然後套用您所做的變更。如需相關指示,請參閱下面的更新 Pinniped 組態。
如果要為 Pinniped 服務設定 DNS 主機名稱,請在管理叢集的 Pinniped 附加元件密碼的 pinniped.supervisor_svc_external_dns
部分中的 values.yaml
區段內指定與 Pinniped 主管關聯的 FQDN。請注意,pinniped.supervisor_svc_external_dns
的值必須以 https://
開頭。有關詳細資訊,請參閱自動管理的套件 values.yaml 設定。然後套用您的變更。如需相關指示,請參閱下面的更新 Pinniped 組態。請注意,您必須為此主機名稱單獨設定 DNS,例如,在 DNS 提供者中建立 A
記錄以解析為 Pinniped 主管服務的 IP 位址。此主機名稱必須在為 Pinniped 主管設定的 TLS 憑證中作為主體別名列出。
若要套用您所做的變更,請執行以下步驟,更新 Pinniped 組態:
將管理叢集的 Pinniped 附加元件密碼儲存到一個檔案中,並在密碼的 values.yaml
區段中對 Base64 編碼的字串進行解碼。
kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
依如下所示,取代預留位置文字:
CLUSTER-NAME
是您管理叢集的名稱。FILENAME
是您要用於密碼的檔案名稱。例如,values.yaml
。在解碼文字中,執行下列其中一個動作:
如果您在上面準備的是 ClusterIssuer
資源,請在 custom_cluster_issuer
欄位中指定資源的名稱。例如:
---
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……
...
如果您在上面準備的是自己的 TLS 密碼,請在 custom_tls_secret
欄位中指定密碼的名稱。例如:
---
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……
...
如果您設定 custom_tls_secret
欄位,則會忽略 custom_cluster_issuer
。
如果要為 Pinniped 服務設定 DNS 主機名稱,請在 pinniped.supervisor_svc_external_dns
欄位中指定套用於 Pinniped 主管的 FQDN。例如,
...
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
...
再次對 values.yaml
區段進行編碼,並更新 Pinniped 附加元件密碼。此命令會因環境的作業系統而異。例如:
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
確認已成功套用變更:
取得 pinniped
應用程式的狀態:
kubectl get app CLUSTER-NAME-pinniped -n tkg-system
如果傳回的狀態為 [協調失敗 (Reconcile failed)],請執行以下命令,取得有關失敗的詳細資料:
kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
透過執行 tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME
命令,產生管理叢集的 kubeconfig 檔案。然後,使用 kubeconfig 來執行 kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME
等命令。此外,如果您的管理叢集會管理任何工作負載叢集,請針對每一個現有的叢集,執行 tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
,然後執行 kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
。