管理叢集密碼

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

更新工作負載叢集的認證

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

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

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

  1. 執行 tanzu login,以登入您要更新的管理叢集。

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

    • --vsphere-user:vSphere 帳戶的名稱。
    • --vsphere-password:vSphere 帳戶的密碼。

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

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

更新工作負載叢集的認證

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

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

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

    • --namespace:您要更新認證的叢集所在命名空間,例如 default
    • --vsphere-user:vSphere 帳戶的名稱。
    • --vsphere-password:vSphere 帳戶的密碼。

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

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

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

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

  1. 執行 tanzu login,以登入您要更新的管理叢集。

  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 login,以登入管理叢集 (該管理叢集已建立您要更新的工作負載叢集)。

  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.24.10+vmware.1  <none>  prod  v1.24.10---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.24.10+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.24.10+vmware.1
    workload-slot35rp10-control-plane-ggsmj     workload-slot35rp10   workload-slot35rp10-control-plane-ggsmj     vsphere://4201a86e-3c15-879a-1b85-78f76a16c27f   Running        42h   v1.24.10+vmware.1
    workload-slot35rp10-control-plane-hxbxb     workload-slot35rp10   workload-slot35rp10-control-plane-hxbxb     vsphere://42014b2e-07e4-216a-24ef-86e2d52d7bbd   Running        42h   v1.24.10+vmware.1
    workload-slot35rp10-control-plane-sm4nw     workload-slot35rp10   workload-slot35rp10-control-plane-sm4nw     vsphere://4201cff3-2715-ffe1-c4a6-35fc795995ce   Running        42h   v1.24.10+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.24.10+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_* 變數將新叢集設為與使用自我簽署的憑證授權機構 (CA) 憑證的 Harbor 登錄進行受信任通訊,例如,從網際網路受限環境中的自訂登錄中提取 TKG 映像。

您可以將叢集設為針對 containerd TLS 和其他用途信任其他私人登錄。如何設定的方式取決於叢集是基於計劃還是基於類別,如下所述。

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

若要為其他自訂映像登錄建立以信任設定的以類別為基礎的叢集:

  1. 按照建立以類別為基礎的叢集中所述的兩個步驟中的步驟 1 產生新的叢集清單。

  2. 編輯產生的資訊清單中的 trust 下的 topology.variables 設定以新增 additionalTrustedCAs 區塊:

    topology:
    variables:
    - name: trust
      value:
        additionalTrustedCAs:
        - data: CA-BASE64
        - name: proxy
    

    其中,CA-BASE64 是 base64 編碼格式的 CA 憑證。

    請注意,trust 變數區塊已包含從 TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATETKG_PROXY_CA_CERT 組態變數設定的值。

  3. 使用修改後的清單執行 tanzu cluster create,作為兩步叢集建立程序的步驟 2。

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

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

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

如需瞭解會自訂叢集並建立新叢集計劃的覆疊,請參閱 ytt 覆疊

  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 物件,新增 additionalTrustedCAs 值 (如上文中的以類別為基礎的叢集的受信任登錄中所述),然後套用修改後的 Cluster 規格。

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

若要使用自訂自我簽署的 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