管理集群密钥

本主题介绍了如何在 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 应用的客户端 ID。
    • --azure-client-secret:在 Azure 中注册的 Tanzu Kubernetes Grid 应用的客户端秘钥。
    • --azure-tenant-id:Tanzu Kubernetes Grid 应用所在的 Azure Active Directory 的租户 ID。

仅更新独立管理集群凭据

要更新独立管理集群的 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 应用的客户端 ID。
    • --azure-client-secret:在 Azure 中注册的 Tanzu Kubernetes Grid 应用的客户端秘钥。
    • --azure-tenant-id:Tanzu Kubernetes Grid 应用所在的 Azure Active Directory 的租户 ID。

您还可以使用 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。

续订集群证书(独立 MC)

独立管理集群及其工作负载集群使用客户端证书对请求进行身份验证。这些证书的有效期为一年。要续订集群证书,可以升级集群或按照以下过程操作。此过程适用于尚未过期但仍有效的集群证书。

  1. 确定要为其续订证书的集群。例如:

    tanzu cluster list
    NAME                 NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES         ROLES   PLAN  TKR
    workload-slot35rp10  default    running  3/3           3/3      v1.25.7+vmware.1  <none>  prod  v1.25.7---vmware.1-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.25.7+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.25.7+vmware.1
    workload-slot35rp10-control-plane-ggsmj     workload-slot35rp10   workload-slot35rp10-control-plane-ggsmj     vsphere://4201a86e-3c15-879a-1b85-78f76a16c27f   Running        42h   v1.25.7+vmware.1
    workload-slot35rp10-control-plane-hxbxb     workload-slot35rp10   workload-slot35rp10-control-plane-hxbxb     vsphere://42014b2e-07e4-216a-24ef-86e2d52d7bbd   Running        42h   v1.25.7+vmware.1
    workload-slot35rp10-control-plane-sm4nw     workload-slot35rp10   workload-slot35rp10-control-plane-sm4nw     vsphere://4201cff3-2715-ffe1-c4a6-35fc795995ce   Running        42h   v1.25.7+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.25.7+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)

在具有独立管理集群的 Internet 受限环境中,可以配置 TKG_CUSTOM_IMAGE_REPOSITORY_* 变量,以便 TKG 集群能够访问包含要从中引导的 TKG 系统映像的专用注册表,例如,在 vSphere 上部署脱机 Harbor 注册表中所述的 Harbor 虚拟机。

ADDITIONAL_IMAGE_REGISTRY_* 变量将新集群配置为与使用自签名证书颁发机构 (CA) 证书的其他注册表进行可信通信,例如:

  • 作为用于安装 CLI 管理的软件包的软件包存储库的专用注册表。
  • TKG 托管的应用映像的可扩展自签名 Harbor 注册表,使用 Harbor 软件包部署,如为服务注册表安装 Harbor 中所述。
  • 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 覆盖网络

  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 证书信任添加到现有集群 (独立 MC)

除了 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 值块。

请注意,imageRepositorytrusttopology.variables 块从 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