管理叢集密碼

本主題說明如何設定和管理 Tanzu Kubernetes Grid 中的工作負載叢集使用的密碼,包括:

更新叢集認證

如果您用來存取 vSphere 或 Azure 的認證有所變更,您可以更新叢集,以使用新認證。AWS 是以不同方式來處理認證,因此本節僅適用於 vSphere 和 Azure。

vSphere
更新獨立管理叢集和工作負載叢集的認證

若要更新目前獨立管理叢集及其所有工作負載叢集使用的 vSphere 認證,請使用 tanzu mc credentials update --cascading 命令:

  1. 執行 tanzu context use MGMT-CLUSTER,以登入您要更新的管理叢集。

  2. 執行 tanzu mc credentials update。您可以將值傳遞至下列命令選項,或讓 CLI 提示您輸入:

    • --vsphere-user:vSphere 帳戶的名稱。
    • --vsphere-password:vSphere 帳戶的密碼。
    • --vsphere-thumbprint:vCenter Server 執行個體的 TLS 指紋。

僅更新獨立管理叢集的認證

若要更新獨立管理叢集的 vSphere 認證,但不更新其工作負載叢集的認證,請使用上述 tanzu mc credentials update 命令,但不使用 --cascading 選項。

更新工作負載叢集的認證

若要更新單一工作負載叢集用於存取 vSphere 的認證,請使用 tanzu cluster credentials update 命令:

  1. 執行 tanzu context use MGMT-CLUSTER,以登入管理叢集 (該管理叢集已建立您要更新的工作負載叢集)。管理叢集可以是主管叢集或獨立管理叢集。

  2. 執行 tanzu cluster credentials update CLUSTER-NAME。您可以將值傳遞至下列命令選項,或讓 CLI 提示您輸入:

    • --namespace:您要更新認證的叢集所在命名空間,例如 default
    • --vsphere-user:vSphere 帳戶的名稱。
    • --vsphere-password:vSphere 帳戶的密碼。
    • --vsphere-thumbprint:vCenter Server 執行個體的 TLS 指紋。

您還可以使用 tanzu mc credentials update --cascading,來更新管理叢集及其管理的所有工作負載叢集的 vSphere 認證。

AWS
本節不適用於 AWS 部署。
Azure
更新獨立管理叢集和工作負載叢集的認證
重要

在開始之前,請從 Azure 入口網站或 Azure 管理員,取得新的 Azure 認證。

若要更新目前獨立管理叢集及其所有工作負載叢集使用的 Azure 認證,請使用 tanzu mc credentials update --cascading 命令:

  1. 執行 tanzu context use MGMT-CLUSTER,以登入您要更新的管理叢集。

  2. 執行 tanzu mc credentials update。您可以將值傳遞至下列命令選項,或讓 CLI 提示您輸入:

    • --azure-client-id:您向 Azure 登錄的 Tanzu Kubernetes Grid 應用程式的用戶端識別碼。
    • --azure-client-secret:您登錄在 Azure 中的 Tanzu Kubernetes Grid 應用程式的用戶端密碼。
    • --azure-tenant-id:Tanzu Kubernetes Grid 應用程式所在的 Azure Active Directory 的承租人識別碼。

僅更新獨立管理叢集的認證

若要更新獨立管理叢集的 Azure 認證,但不更新其工作負載叢集的認證,請使用上述 tanzu mc credentials update 命令,但不使用 --cascading 選項。

更新工作負載叢集的認證

若要更新單一工作負載叢集用來存取 Azure 的認證,請使用 tanzu cluster credentials update 命令:

  1. 執行 tanzu context use MGMT-CLUSTER,以登入管理叢集 (該管理叢集已建立您要更新的工作負載叢集)。

  2. 執行 tanzu cluster credentials update CLUSTER-NAME。您可以將值傳遞至下列命令選項,或讓 CLI 提示您輸入:

    • --namespace:您要更新認證的叢集所在命名空間,例如 default
    • --azure-client-id:您向 Azure 登錄的 Tanzu Kubernetes Grid 應用程式的用戶端識別碼。
    • --azure-client-secret:您登錄在 Azure 中的 Tanzu Kubernetes Grid 應用程式的用戶端密碼。
    • --azure-tenant-id:Tanzu Kubernetes Grid 應用程式所在的 Azure Active Directory 的承租人識別碼。

您還可以使用 tanzu mc credentials update --cascading,來更新管理叢集及其管理的所有工作負載叢集的 Azure 認證。


控制平面節點憑證自動更新

視組態方法和叢集類型而定,將 TKG 叢集設定為自動更新其控制平面節點虛擬機器憑證,如下所示:

  • Kubernetes 樣式的物件規格 (以類別為基礎的叢集):

    • Cluster 物件規格中,將下列區塊包含在 spec.topology.variables 下:

      - name: controlPlaneCertificateRotation.activate
      value: true
      - name: controlPlaneCertificateRotation.daysBefore
      value: EXPIRY-DAYS
      
  • 平面叢集組態檔 (以類別為基礎的叢集或舊版叢集):

    • 在叢集組態檔中,包含以下設定:

      CONTROLPLANE_CERTIFICATE_ROTATION_ENABLED: true
      CONTROLPLANE_CERTIFICATE_ROTATION_DAYS_BEFORE: EXPIRY-DAYS
      

其中,EXPIRY-DAYS 是選用設定,用來設定要在憑證到期日期的幾天前,就自動更新叢集節點憑證。預設值: 90;最小:7.

更新叢集憑證 (獨立管理叢集)

獨立管理叢集及其工作負載叢集會使用用戶端憑證來驗證要求。這些憑證的有效期為一年。若要更新憑證,您可以升級叢集,或遵循以下程序。此程序適用於尚未到期且仍然有效的叢集憑證。

  1. 識別您要更新其憑證的叢集。例如:

    tanzu cluster list
    NAME                 NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES         ROLES   PLAN  TKR
    workload-slot35rp10  default    running  3/3           3/3      v1.27.5+vmware.1  <none>  prod  v1.27.5---vmware.2-tkg.1
    

    若要列出叢集節點,請執行:

    kubectl get nodes -o wide
    
  2. 檢查憑證的到期日期:

    vSphere
    執行下列命令。
    kubectl get nodes \
    -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' \
    -l node-role.kubernetes.io/master= > nodes
    
    for i in `cat nodes`; do
       printf "\n######\n"
       ssh -o "StrictHostKeyChecking=no" -q capv@$i hostname
       ssh -o "StrictHostKeyChecking=no" -q capv@$i sudo kubeadm certs check-expiration
    done;
    
    AWS
    執行下列命令。
    kubectl get nodes \
    -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}' \
    -l node-role.kubernetes.io/master= > nodes
    
    for i in `cat nodes`; do
        printf "\n######\n"
        ssh -i aws-cluster-key.pem -o "StrictHostKeyChecking=no" -q ubuntu@$i hostname
        ssh -i aws-cluster-key.pem -o "StrictHostKeyChecking=no" -q ubuntu@$i sudo kubeadm certs check-expiration
    done;
    
    Azure
    執行下列命令。
    kubectl get nodes \
    -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}' \
    -l node-role.kubernetes.io/master= > nodes
    
    for i in `cat nodes`; do
        printf "\n######\n"
        ssh -i azure-cluster-key.pem -o "StrictHostKeyChecking=no" -q capi@$i hostname
        ssh -i azure-cluster-key.pem -o "StrictHostKeyChecking=no" -q capi@$i sudo kubeadm certs check-expiration
    done;
    

    輸出範例:

    ######
    workload-slot35rp10-control-plane-ggsmj
    [check-expiration] Reading configuration from the cluster...
    [check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
    W0923 17:51:03.686273 4172778 utils.go:69] The recommended value for "resolvConf" in "KubeletConfiguration" is: /run/systemd/resolve/resolv.conf; the provided value is: /run/systemd/resolve/resolv.conf
    
    CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
    admin.conf                 Sep 21, 2023 23:13 UTC   363d            ca                      no
    apiserver                  Sep 21, 2023 23:13 UTC   363d            ca                      no
    apiserver-etcd-client      Sep 21, 2023 23:13 UTC   363d            etcd-ca                 no
    apiserver-kubelet-client   Sep 21, 2023 23:13 UTC   363d            ca                      no
    controller-manager.conf    Sep 21, 2023 23:13 UTC   363d            ca                      no
    etcd-healthcheck-client    Sep 21, 2023 23:13 UTC   363d            etcd-ca                 no
    etcd-peer                  Sep 21, 2023 23:13 UTC   363d            etcd-ca                 no
    etcd-server                Sep 21, 2023 23:13 UTC   363d            etcd-ca                 no
    front-proxy-client         Sep 21, 2023 23:13 UTC   363d            front-proxy-ca          no
    scheduler.conf             Sep 21, 2023 23:13 UTC   363d            ca                      no
    
    CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
    ca                      Sep 18, 2032 23:09 UTC   9y              no
    etcd-ca                 Sep 18, 2032 23:09 UTC   9y              no
    front-proxy-ca          Sep 18, 2032 23:09 UTC   9y              no
    
  3. kubectl 內容設定為管理叢集。例如:

    kubectl config use-context mgmt-slot35rp10-admin@mgmt-slot35rp10
    
  4. 取得目標叢集的 KCP 物件名稱。例如:

    kubectl get kcp
    
    NAME                                CLUSTER               INITIALIZED   API SERVER AVAILABLE   REPLICAS   READY   UPDATED   UNAVAILABLE   AGE   VERSION
    workload-slot35rp10-control-plane   workload-slot35rp10   true          true                   3          3       3         0             42h   v1.27.5+vmware.1
    
  5. 觸發控制平面推出,來更新憑證:

    kubectl patch kcp workload-slot35rp10-control-plane --type merge -p "{\"spec\":{\"rolloutAfter\":\"`date +'%Y-%m-%dT%TZ'`\"}}
    

    執行此命令後,Tanzu Kubernetes Grid 會開始重新佈建叢集機器:

    kubectl get machines
    
    workload-slot35rp10-control-plane-7z95k     workload-slot35rp10                                                                                                Provisioning   20s   v1.27.5+vmware.1
    workload-slot35rp10-control-plane-ggsmj     workload-slot35rp10   workload-slot35rp10-control-plane-ggsmj     vsphere://4201a86e-3c15-879a-1b85-78f76a16c27f   Running        42h   v1.27.5+vmware.1
    workload-slot35rp10-control-plane-hxbxb     workload-slot35rp10   workload-slot35rp10-control-plane-hxbxb     vsphere://42014b2e-07e4-216a-24ef-86e2d52d7bbd   Running        42h   v1.27.5+vmware.1
    workload-slot35rp10-control-plane-sm4nw     workload-slot35rp10   workload-slot35rp10-control-plane-sm4nw     vsphere://4201cff3-2715-ffe1-c4a6-35fc795995ce   Running        42h   v1.27.5+vmware.1
    workload-slot35rp10-md-0-667bcd6b57-79br9   workload-slot35rp10   workload-slot35rp10-md-0-667bcd6b57-79br9   vsphere://420142a2-d141-7d6b-b322-9c2afcc47da5   Running        42h   v1.27.5+vmware.1
    ...
    
  6. 當所有機器都處於 Running 狀態時,確認憑證更新已成功完成:

    1. kubectl 內容設定為工作負載叢集:

      kubectl config use-context workload-slot35rp10-admin@workload-slot35rp10
      
    2. 再次檢查憑證的到期日期:

      kubectl get nodes \
      -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' \
      -l node-role.kubernetes.io/master= > nodes
      
      for i in `cat nodes`; do
        printf "\n######\n"
        ssh -o "StrictHostKeyChecking=no" -q capv@$i hostname
        ssh -o "StrictHostKeyChecking=no" -q capv@$i sudo kubeadm certs check-expiration
      done;
      

      輸出範例:

      ######
      workload-slot35rp10-control-plane-4xgw8
      [check-expiration] Reading configuration from the cluster...
      [check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
      
      W0923 18:10:02.660438   13427 utils.go:69] The recommended value for "resolvConf" in "KubeletConfiguration" is: /run/systemd/resolve/resolv.conf; the provided value is: /run/systemd/resolve/resolv.conf
      CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
      admin.conf                 Sep 23, 2023 18:05 UTC   364d            ca                      no
      apiserver                  Sep 23, 2023 18:05 UTC   364d            ca                      no
      apiserver-etcd-client      Sep 23, 2023 18:05 UTC   364d            etcd-ca                 no
      apiserver-kubelet-client   Sep 23, 2023 18:05 UTC   364d            ca                      no
      controller-manager.conf    Sep 23, 2023 18:05 UTC   364d            ca                      no
      etcd-healthcheck-client    Sep 23, 2023 18:05 UTC   364d            etcd-ca                 no
      etcd-peer                  Sep 23, 2023 18:05 UTC   364d            etcd-ca                 no
      etcd-server                Sep 23, 2023 18:05 UTC   364d            etcd-ca                 no
      front-proxy-client         Sep 23, 2023 18:05 UTC   364d            front-proxy-ca          no
      scheduler.conf             Sep 23, 2023 18:05 UTC   364d            ca                      no
      
      CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
      ca                      Sep 18, 2032 23:09 UTC   9y              no
      etcd-ca                 Sep 18, 2032 23:09 UTC   9y              no
      front-proxy-ca          Sep 18, 2032 23:09 UTC   9y              no
      

      如果憑證更新已成功完成,則 Residual Time 資料行將顯示 364d。工作節點上的憑證會自動更新。

為叢集設定受信任的登錄 (主管)

要將主管部署的 TKG 叢集設為使用 TKG 外部的私人容器登錄 (即具有不在 TKG 叢集中執行的自我簽署憑證的登錄),請參閱 vSphere 說明文件中的以下主題:

設定具有多個受信任登錄的叢集 (獨立 MC)

在具有獨立管理叢集的網際網路受限環境中,可以設定 TKG_CUSTOM_IMAGE_REPOSITORY_* 變數,以便 TKG 叢集存取包含啟動載入來源 TKG 系統映像的私人登錄,例如,在 vSphere 上部署離線 Harbor 登錄中所述的 Harbor 虛擬機器。

ADDITIONAL_IMAGE_REGISTRY_* 變數將新叢集設為與使用自我簽署憑證授權機構 (CA) 憑證的其他登錄進行可信任的通訊,例如:

  • 作為用於安裝 CLI 管理的套件的套件存放庫的私人登錄。
  • TKG 託管的應用程式映像的可擴充自我簽署 Harbor 登錄,使用 Harbor 套件部署,如為服務登錄安裝 Harbor 中所述。
  • containerd 的自我簽署映像登錄,如 containerd 存放庫中的containerd中所述。

設定叢集以信任這些額外的私人登錄的方式取決於叢集是基於計劃還是基於類別,如下所述。

以類別為基礎的叢集的受信任登錄

如要使用信任或額外的自訂映像登錄設定以類別為基礎的工作負載叢集或獨立管理叢集,請為最多三個其他映像登錄設定如下所示的變數:

  • 要設定三個以上的登錄,請在建立以類別為基礎的叢集中所述的兩步驟程序步驟 1 中設定前三個登錄,然後按照下面的讓以類別為基礎的叢集信任自訂登錄在步驟 2 中建立叢集之前,將更多登錄加入產生的清單中。

    ADDITIONAL_IMAGE_REGISTRY_1: "OTHER-REGISTRY-1"
    ADDITIONAL_IMAGE_REGISTRY_1_SKIP_TLS_VERIFY: false
    ADDITIONAL_IMAGE_REGISTRY_1_CA_CERTIFICATE: "CA-BASE64-1"
    
    ADDITIONAL_IMAGE_REGISTRY_2: "OTHER-REGISTRY-2"
    ADDITIONAL_IMAGE_REGISTRY_2_SKIP_TLS_VERIFY: false
    ADDITIONAL_IMAGE_REGISTRY_2_CA_CERTIFICATE: "CA-BASE64-2"
    
    ADDITIONAL_IMAGE_REGISTRY_3: "OTHER-REGISTRY-3"
    ADDITIONAL_IMAGE_REGISTRY_3_SKIP_TLS_VERIFY: false
    ADDITIONAL_IMAGE_REGISTRY_3_CA_CERTIFICATE: "CA-BASE64-3"
    

    其中,OTHER-REGISTRY-<n> 是其他私人登錄的 IP 位址或 FQDN,CA-BASE64-<n> 是其 base64 編碼格式的 CA 憑證,不含 http:// 前置詞。這是必要的,因為此檔案將寫入磁碟,因此它必須是一個正常的 Unix 檔名。

以新計劃為基礎的叢集的受信任登錄

要啟用新的 TKC 或基於計劃的叢集以從使用自我簽署憑證的容器登錄中提取映像,請使用 ytt 覆蓋檔將自訂憑證加入工作負載叢集節點。

下面的覆蓋程式碼將自訂 CA 憑證加入新叢集中的所有節點。此程式碼可在所有目標平台上運作,適用於 Photon 或 Ubuntu 虛擬機器映像範本型叢集。

如需瞭解會自訂叢集並建立新叢集計劃的覆疊,請參閱 ytt 覆疊。有關如何下載和安裝 ytt 的資訊,請參見安裝 Carvel 工具

  1. 選擇是否將自訂 CA 套用至所有新叢集、僅在一個雲端基礎結構上建立的叢集,或使用特定叢集 API 提供者版本 (例如叢集 API 提供者 vSphere v1.5.1) 建立的叢集。

  2. 在本機 ~/.config/tanzu/tkg/providers/ 目錄中,找到涵蓋所選範圍的 ytt 目錄。例如,/ytt/03_customizations/ 適用於所有叢集,/infrastructure-vsphere/ytt/ 適用於所有 vSphere 叢集。

  3. 在您選擇的 ytt 目錄中,建立新的 .yaml 檔案,或使用以下程式碼來擴展現有的覆疊檔:

    #@ load("@ytt:overlay", "overlay")
    #@ load("@ytt:data", "data")
    
    #! This ytt overlay adds additional custom CA certificates on TKG cluster nodes, so containerd and other tools trust these CA certificates.
    #! It works when using Photon or Ubuntu as the TKG node template on all TKG target platforms.
    
    #! Trust your custom CA certificates on all Control Plane nodes.
    #@overlay/match by=overlay.subset({"kind":"KubeadmControlPlane"})
    ---
    spec:
      kubeadmConfigSpec:
        #@overlay/match missing_ok=True
        files:
          #@overlay/append
          - content: #@ data.read("tkg-custom-ca.pem")
            owner: root:root
            permissions: "0644"
            path: /etc/ssl/certs/tkg-custom-ca.pem
        #@overlay/match missing_ok=True
        preKubeadmCommands:
          #! For Photon OS
          #@overlay/append
          - '! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh'
          #! For Ubuntu
          #@overlay/append
          - '! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)'
    
    #! Trust your custom CA certificates on all worker nodes.
    #@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"}), expects="1+"
    ---
    spec:
      template:
        spec:
          #@overlay/match missing_ok=True
          files:
            #@overlay/append
            - content: #@ data.read("tkg-custom-ca.pem")
              owner: root:root
              permissions: "0644"
              path: /etc/ssl/certs/tkg-custom-ca.pem
          #@overlay/match missing_ok=True
          preKubeadmCommands:
            #! For Photon OS
            #@overlay/append
            - '! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh'
            #! For Ubuntu
            #@overlay/append
            - '! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)'
    
  4. 在同一個 ytt 目錄中,將憑證授權機構新增至新的或現有的 tkg-custom-ca.pem 檔案中。

  5. 在建立叢集之前,請將 allow-legacy-cluster 功能設為 true,如 (舊版) 建立以計劃為基礎或 TKC 叢集中所述。

將自訂 CA 憑證信任新增至現有叢集 (獨立管理叢集)

除了 TKG_CUSTOM_IMAGE_REPOSITORY_* 組態變數設定的 CA 以外,您還可以在現有叢集和其他具有自我簽署 CA 的自訂 Harbor 登錄之間啟用受信任通訊,以用於 containerd TLS 和其他用途。如何設定的方式取決於叢集是基於計劃還是基於類別,如下所述。

讓以類別為基礎的叢集信任自訂登錄

要將受信任的自訂登錄加入以類別為基礎的叢集,請編輯其 Cluster 物件,並在物件規格的 additionalImageRegistries 下新增 topology.variables 設定:

topology:
  variables:
  - name: additionalImageRegistries
    value:
    - caCert: "CA-BASE64"
      host: OTHER-REGISTRY
      skipTlsVerify: false

其中:

  • OTHER-REGISTRY 是其他私人登錄位置,格式為 : .例如, 10.92.127.192:8443
  • CA-BASE64 是其採用 base64 編碼格式的 CA 憑證,例如 LS0tLS1CRU[...]

要為多個登錄新增信任,請包含多個 additionalImageRegistries 值區塊。

請注意,topology.variablesimageRepositorytrust 區塊從 TKG_CUSTOM_IMAGE_REPOSITORY_*TKG_PROXY_CA_CERT 組態變數設定值。

讓以計劃為基礎的叢集信任自訂登錄

若要使用自訂自我簽署的 CA 在現有叢集與 Harbor 登錄之間啟用信任,請執行以下動作:

  1. 擷取 Harbor CA 憑證:

    1. 將內容切換至執行 Harbor 的叢集 (例如共用服務叢集):

      kubectl config use-context SERVICES-CLUSTER-CONTEXT
      

      其中,SERVICES-CLUSTER-CONTEXT 是叢集的內容。例如,tkg-wld-admin@tkg-wld

    2. 擷取憑證:

      kubectl -n tanzu-system-registry get secret harbor-tls -o=jsonpath="{.data.ca\.crt}" | base64 -d
      -----BEGIN CERTIFICATE-----
      MIIFazCCA1OgAwIBAgIQMfZy08muvIVKdZVDz7/rYzANBgkqhkiG9w0BAQsFADBI
      [...]
      yiDghW7antzYL9S1CC8sVgVOwFJwfFXpdiir35mQlySG301V4FsRV+Z0cFp4Ni0=
      -----END CERTIFICATE-----
      
  2. 將自訂 CA 新增到獨立管理叢集的 kubeadmconfigtemplate

    1. 將內容切換至管理叢集。

      kubectl config use-context MANAGEMENT-CLUSTER-CONTEXT
      

      其中,MANAGEMENT-CLUSTER-CONTEXT 是管理叢集的內容。例如,tkg-mgmt-admin@tkg-mgmt

    2. 在編輯器中,開啟叢集的 kubeadmconfigtemplate 範本檔案:

      kubectl edit kubeadmconfigtemplate CLUSTER-NAME-md-0
      

      其中,CLUSTER-NAME 是必須修改的叢集的名稱。

    3. 變更檔案的 spec.template.spec.files 區段以包含憑證,如下所示:

      spec:
      template:
        spec:
          files:
          - content: |
                -----BEGIN CERTIFICATE-----
               MIIFazCCA1OgAwIBAgIQMfZy08muvIVKdZVDz7/rYzANBgkqhkiG9w0BAQsFADBI
               [...]
               yiDghW7antzYL9S1CC8sVgVOwFJwfFXpdiir35mQlySG301V4FsRV+Z0cFp4Ni0=
               -----END CERTIFICATE-----
             owner: root:root
             path: /etc/ssl/certs/tkg-custom-ca.pem
             permissions: "0644"
      
    4. 在檔案底部,新增 preKubeadmCommands 區塊,如下所示:

      preKubeadmCommands:
      - '! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh'
      - '! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem
         /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)'
      
  3. 儲存含有您所做變更的 kubeadmconfigtemplate 範本檔案。

  4. 修補獨立管理叢集,使其包含您的變更:

    kubectl patch machinedeployments.cluster.x-k8s.io tkg-test-md-0 --type merge -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"
    

    執行此命令時,會觸發叢集節點的輪流更新,且會更新其時間戳記。

設定對私人容器登錄的驗證

您可以新增驗證密碼,讓叢集能夠存取私人容器登錄,這需要使用者驗證才能提取映像。針對叢集存取的私人登錄,也可以檢視、更新或刪除已為其設定的驗證密碼。

新增私人容器登錄的驗證密碼

可以使用 Tanzu CLI 新增驗證密碼,以從叢集存取私人容器登錄。將登錄密碼新增至叢集中的命名空間後,可以提取私人登錄中裝載的所有套件存放庫、套件和容器映像。之後,可以將套件存放庫和套件資源新增至叢集。

執行此程序之前,請取得私人容器登錄的使用者名稱和密碼。

若要將驗證密碼新增至私人登錄,請執行下列命令:

tanzu secret registry add SECRET-NAME -n NAMESPACE --server REGISTRY-URL --username USERNAME --password PASSWORD

其中:

  • SECRET-NAME 是您要新增的登錄驗證密碼的名稱。
  • NAMESPACE 是登錄所屬的 Tanzu Kubernetes Grid 命名空間。
  • USERNAME 是用來存取登錄的使用者名稱。如果使用者名稱包含特殊字元,請用單引號括住使用者名稱。
  • PASSWORD 是用於存取登錄的密碼。如果密碼包含特殊字元,請用單引號括住密碼。也可以用下列格式指定密碼:

    • 將命令中的 --password PASSWORD 字串取代為 --password-env-var ENV-VAR 以透過已設定的環境變數指定密碼。命令的格式如下所示:

      tanzu secret registry add SECRET-NAME -n NAMESPACE --server REGISTRY-URL --username USERNAME --password-env-var ENV-VAR

    • 將命令中的 --password PASSWORD 字串取代為 --password-stdin 字串,以透過標準輸入指定密碼,並在出現提示時輸入密碼。命令的格式如下所示:

      tanzu secret registry add SECRET-NAME -n NAMESPACE --server REGISTRY-URL --username USERNAME --password-stdin

    • 將命令中的 --password PASSWORD 字串取代為 --password-file PASSWORD-FILE 字串,以透過密碼檔案指定密碼。命令的格式如下所示:

      tanzu secret registry add SECRET-NAME -n NAMESPACE --server REGISTRY-URL --username USERNAME --password-file PASSWORD-FILE

或者,若要使登錄密碼可用於叢集中的所有命名空間,請使用 --export-to-all-namespaces 選項,如下列格式所示:

tanzu secret registry add SECRET-NAME -n NAMESPACE --server REGISTRY-URL --username USERNAME --password PASSWORD --export-to-all-namespaces

以下是此命令的輸出範例:

tanzu secret registry add tanzu-net -n test-ns --server registry.pivotal.io --username test-user --password-file pass-file --export-to-all-namespaces
Warning: By choosing --export-to-all-namespaces, given secret contents will be available to ALL users in ALL namespaces. Please ensure that included registry credentials allow only read-only access to the registry with minimal necessary scope.
/ Adding registry secret 'test-secret'...
  Added registry secret 'test-secret' into namespace 'test-ns'

檢視叢集中的登錄驗證密碼

可以檢視預設命名空間中或叢集的所有命名空間中的登錄驗證密碼。可以用表格、JSON 或 YAML 檔案的形式來檢視密碼。

若要檢視叢集的特定命名空間中的登錄驗證密碼,請執行以下命令:

tanzu secret registry list -n NAMESPACE

其中,NAMESPACE 是登錄所屬的 Tanzu Kubernetes Grid 命名空間。

以下是此命令的範例:

tanzu secret registry list -n test-ns
/ Retrieving registry secrets...
  NAME         REGISTRY                 EXPORTED           AGE
  pkg-dev-reg  registry.pivotal.io      to all namespaces  15d

若要檢視叢集的所有命名空間中的登錄驗證密碼清單,請執行以下命令:

tanzu secret registry list -A

以下是此命令的範例:

tanzu secret registry list -A
\ Retrieving registry secrets...
 NAME                          REGISTRY             EXPORTED           AGE  NAMESPACE
 pkg-dev-reg                   registry.pivotal.io  to all namespaces  15d  test-ns
 tanzu-standard-fetch-0        registry.pivotal.io  not exported       15d  tanzu-package-repo-global
 private-repo-fetch-0          registry.pivotal.io  not exported       15d  test-ns
 antrea-fetch-0                registry.pivotal.io  not exported       15d  tkg-system
 metrics-server-fetch-0        registry.pivotal.io  not exported       15d  tkg-system
 tanzu-addons-manager-fetch-0  registry.pivotal.io  not exported       15d  tkg-system
 tanzu-core-fetch-0            registry.pivotal.io  not exported       15d  tkg-system

若要以 JSON 檔案格式來檢視登錄驗證密碼清單,請執行下列命令:

tanzu secret registry list -n kapp-controller-packaging-global -o json

以下是此命令的範例:

tanzu secret registry list -n kapp-controller-packaging-global -o json
[
 {
   "age": "15d",
   "exported": "to all namespaces",
   "name": "pkg-dev-reg",
   "registry": "us-east4-docker.pkg.dev"
 }
]

若要以 YAML 檔案格式來檢視登錄驗證密碼清單,請執行以下命令:

tanzu secret registry list -n kapp-controller-packaging-global -o yaml

以下是此命令的範例:

 tanzu secret registry list -n kapp-controller-packaging-global -o yaml
 - age: 15d
   exported: to all namespaces
   name: pkg-dev-reg
   registry: us-east4-docker.pkg.dev

若要以表格格式來檢視登錄驗證密碼清單,請執行以下命令:

tanzu secret registry list -n kapp-controller-packaging-global -o table

以下是此命令的範例:

tanzu secret registry list -n kapp-controller-packaging-global -o table
/ Retrieving registry secrets...
  NAME         REGISTRY                 EXPORTED           AGE
  pkg-dev-reg  us-east4-docker.pkg.dev  to all namespaces  15d

更新登錄驗證密碼

可以更新密碼中的認證、使密碼可用於所有命名空間,或只能在叢集的一個命名空間中使用。

若要建立密碼的命名空間中更新密碼,請執行下列命令:

tanzu secret registry update SECRET-NAME --username USERNAME -n NAMESPACE --password PASSWORD

其中:

  • SECRET-NAME 是您要更新的登錄密碼的名稱。
  • NAMESPACE 是您在其中更新登錄驗證密碼的 Tanzu Kubernetes Grid 命名空間。
  • USERNAME 是用來存取登錄的新使用者名稱 (如果您要更新使用者名稱)。
  • PASSWORD 是登錄的新密碼 (如果您要更新密碼)。
附註

您可以更新使用者名稱或密碼,或兩者都更新。

以下是此命令的範例:

tanzu secret registry update test-secret --username test-user -n test-ns --password-env-var PASSENV
\ Updating registry secret 'test-secret'...
 Updated registry secret 'test-secret' in namespace 'test-ns'

若要更新登錄驗證密碼,並用於叢集的其他命名空間中,請執行下列命令:

tanzu secret registry update SECRET-NAME --username USERNAME -n NAMESPACE --password PASSWORD --export-to-all-namespaces=true

其中:

  • SECRET-NAME 是您要更新的登錄密碼的名稱。
  • NAMESPACE 是您在其中更新登錄驗證密碼的 Tanzu Kubernetes Grid 命名空間。
  • USERNAME 是用來存取登錄的使用者名稱。如果要更新使用者名稱,請輸入新的使用者名稱。
  • PASSWORD 是登錄的密碼。如果要更新密碼,請輸入新密碼。

以下是此命令的範例:

tanzu secret registry update test-secret--username test-user -n test-ns --password-env-var PASSENV --export-to-all-namespaces=true
Warning: By specifying --export-to-all-namespaces as true, given secret contents will be available to ALL users in ALL namespaces. Please ensure that included registry credentials allow only read-only access to the registry with minimal necessary scope.
Are you sure you want to proceed? [y/N]: y

\ Updating registry secret 'test-secret'...
  Updated registry secret 'test-secret' in namespace 'test-ns'
  Exported registry secret 'test-secret' to all namespaces

若要使登錄驗證密碼無法在叢集的其他命名空間中使用,請執行下列命令:

tanzu secret registry update SECRET-NAME --username USERNAME -n NAMESPACE --password PASSWORD --export-to-all-namespaces=false

其中:

  • SECRET-NAME 是您要更新的登錄密碼的名稱。
  • NAMESPACE 是您在其中更新登錄驗證密碼的 Tanzu Kubernetes Grid 命名空間。
  • USERNAME 是用來存取登錄的使用者名稱。
  • PASSWORD 是登錄的密碼。

以下是此命令的範例:

tanzu secret registry update test-secret --username test-user -n test-ns --password-env-var PASSENV --export-to-all-namespaces=false
Warning: By specifying --export-to-all-namespaces as false, the secret contents will get unexported from ALL namespaces in which it was previously available to.
Are you sure you want to proceed? [y/N]: y

\ Updating registry secret 'test-secret'...
  Updated registry secret 'test-secret' in namespace 'test-ns'
  Unexported registry secret 'test-secret' from all namespaces

刪除登錄驗證密碼

可以使用 Tanzu CLI 刪除叢集中的登錄驗證密碼。若要刪除特定命名空間中的登錄驗證密碼,請執行下列命令:

tanzu secret registry delete SECRET-NAME -n NAMESPACE

其中:

  • SECRET-NAME 是您要刪除的登錄密碼的名稱。
  • (選用) NAMESPACE 是您要從中刪除登錄驗證密碼的 Tanzu Kubernetes Grid 命名空間。如果未指定命名空間,則會從預設命名空間中刪除驗證密碼。如果密碼已匯出至叢集中的其他命名空間,則也會一併刪除。

以下是此命令的範例:

tanzu secret registry delete test-secret -n test-ns
Deleting registry secret 'test-secret' from namespace 'test-ns'. Are you sure? [y/N]: y
\ Deleting registry secret 'test-secret'...
 Deleted registry secret 'test-secret' from namespace 'test-ns'
check-circle-line exclamation-circle-line close-line
Scroll to top icon