本主题介绍了如何在 Tanzu Kubernetes Grid 中配置和管理工作负载集群使用的密钥,包括:
如果用于访问 vSphere 或 Azure 的凭据发生变化,则可以更新集群以使用新凭据。AWS 以不同的方式处理凭据,因此本节仅适用于 vSphere 和 Azure。
要更新当前独立管理集群及其所有工作负载集群使用的 vSphere 凭据,请使用 tanzu mc credentials update --cascading
命令:
运行 tanzu context use MGMT-CLUSTER
以登录您要更新的管理集群。
运行 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
命令:
运行 tanzu context use MGMT-CLUSTER
以登录到创建要更新的工作负载集群的管理集群。管理集群可以是主管集群或独立管理集群。
运行 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 凭据。
重要在开始之前,请从 Azure 门户或 Azure 管理员获取新的 Azure 凭据。
要更新当前独立管理集群及其所有工作负载集群使用的 Azure 凭据,请使用 tanzu mc credentials update --cascading
命令:
运行 tanzu context use MGMT-CLUSTER
以登录您要更新的管理集群。
运行 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
命令:
运行 tanzu context use MGMT-CLUSTER
以登录到创建要更新的工作负载集群的管理集群。
运行 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.
独立管理集群及其工作负载集群使用客户端证书对请求进行身份验证。这些证书的有效期为一年。要续订集群证书,可以升级集群或按照以下过程操作。此过程适用于尚未过期但仍有效的集群证书。
确定要为其续订证书的集群。例如:
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
检查证书的过期日期:
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;
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;
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
将 kubectl
上下文设置为管理集群:例如:
kubectl config use-context mgmt-slot35rp10-admin@mgmt-slot35rp10
获取目标集群的 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
通过触发控制平面部署来续订证书:
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
...
当所有计算机都 Running
时,确认证书续订已成功完成:
将 kubectl
上下文设置为工作负载集群:
kubectl config use-context workload-slot35rp10-admin@workload-slot35rp10
再次检查证书的过期日期:
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 文档中的以下主题:
在具有独立管理集群的 Internet 受限环境中,可以配置 TKG_CUSTOM_IMAGE_REPOSITORY_*
变量,以便 TKG 集群能够访问包含要从中引导的 TKG 系统映像的专用注册表,例如,在 vSphere 上部署脱机 Harbor 注册表中所述的 Harbor 虚拟机。
ADDITIONAL_IMAGE_REGISTRY_*
变量将新集群配置为与使用自签名证书颁发机构 (CA) 证书的其他注册表进行可信通信,例如:
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 工具。
选择是将自定义 CA 应用于所有新集群,仅应用于在一个云基础架构上创建的集群,还是应用于使用特定集群 API 提供程序版本(例如集群 API 提供程序 vSphere v1.5.1)创建的集群。
在本地 ~/.config/tanzu/tkg/providers/
目录中,找到覆盖所选范围的 ytt
目录。例如,/ytt/03_customizations/
适用于所有集群,/infrastructure-vsphere/ytt/
适用于所有 vSphere 集群。
在 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)'
在同一 ytt
目录中,将证书颁发机构添加到新的或现有的 tkg-custom-ca.pem
文件中。
在创建集群之前,请将 allow-legacy-cluster
功能设置为 true
,如(旧版)创建基于计划的集群或 TKC 集群中所述。
除了 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
值块。
请注意,imageRepository
和 trust
的 topology.variables
块从 TKG_CUSTOM_IMAGE_REPOSITORY_*
和 TKG_PROXY_CA_CERT
配置变量设置值。
要启用现有基于计划的集群与具有自签名 CA 的 Harbor 注册表之间的信任:,请执行以下操作:
检索 Harbor CA 证书:
将上下文切换到运行 Harbor 的集群,例如共享服务集群:
kubectl config use-context SERVICES-CLUSTER-CONTEXT
其中 SERVICES-CLUSTER-CONTEXT
是集群的上下文。例如,tkg-wld-admin@tkg-wld
。
检索证书:
kubectl -n tanzu-system-registry get secret harbor-tls -o=jsonpath="{.data.ca\.crt}" | base64 -d
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIQMfZy08muvIVKdZVDz7/rYzANBgkqhkiG9w0BAQsFADBI
[...]
yiDghW7antzYL9S1CC8sVgVOwFJwfFXpdiir35mQlySG301V4FsRV+Z0cFp4Ni0=
-----END CERTIFICATE-----
将自定义 CA 添加到独立管理集群的 kubeadmconfigtemplate
:
将上下文切换到管理集群。
kubectl config use-context MANAGEMENT-CLUSTER-CONTEXT
其中 MANAGEMENT-CLUSTER-CONTEXT
是管理集群的上下文。例如,tkg-mgmt-admin@tkg-mgmt
。
在编辑器中,打开集群的 kubeadmconfigtemplate
模板文件:
kubectl edit kubeadmconfigtemplate CLUSTER-NAME-md-0
其中, CLUSTER-NAME
是必须修改的集群的名称。
将文件的 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"
在文件底部,添加 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)'
对 kubeadmconfigtemplate
模板文件保存您所做的更改。
使用更改修补独立管理集群:
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'