可以对 TKG 集群 Pod 使用外部容器注册表。
对从容器注册表提取映像时出错进行故障排除
如果为 TKG 配置了要信任的证书,并将自签名证书添加到集群 kubeconfig,则应该能够从使用该自签名证书的专用注册表中成功提取容器映像。
以下命令可帮助您确定是否为 Pod 工作负载成功提取了容器映像:
kubectl describe pod PODNAME
此命令显示给定 pod 的详细状态和错误消息。尝试在将自定义证书添加集群之前提取映像的示例:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 33s default-scheduler ... Normal Image 32s image-controller ... Normal Image 15s image-controller ... Normal SuccessfulRealizeNSXResource 7s (x4 over 31s) nsx-container-ncp ... Normal Pulling 7s kubelet Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612 Warning Failed 4s kubelet failed to get images: ... Error: ... x509: certificate signed by unknown authority
然后,运行以下命令时:
kubectl get pods
整个 Pod 状态视图中也会显示
ErrImagePull
错误:
NAME READY STATUS RESTARTS AGE testimage-nginx-deployment-89d4fcff8-2d9pz 0/1 Pending 0 17s testimage-nginx-deployment-89d4fcff8-7kp9d 0/1 ErrImagePull 0 79s testimage-nginx-deployment-89d4fcff8-7mpkj 0/1 Pending 0 21s testimage-nginx-deployment-89d4fcff8-fszth 0/1 ErrImagePull 0 50s testimage-nginx-deployment-89d4fcff8-sjnjw 0/1 ErrImagePull 0 48s testimage-nginx-deployment-89d4fcff8-xr5kg 0/1 ErrImagePull 0 79s错误“x509: 证书由未知机构签名 (x509: certificate signed by unknown authority)”和“ErrImagePull”错误指示集群未配置正确的证书,无法连接到专用容器注册表。证书缺失或配置错误。
如果在配置证书后连接到专用注册表时遇到错误,可以检查配置中应用的证书是否应用于集群。可以使用 SSH 检查是否正确应用了配置中应用的证书。
可以通过 SSH 连接到工作节点,执行两个调查步骤。
- 检查文件夹
/etc/ssl/certs/
中名为tkg-<cert_name>.pem
的文件,其中,<cert_name>
是TkgServiceConfiguration
中已添加证书的“name”属性。如果证书与TkgServiceConfiguration
中的证书匹配,但使用专用注册表仍然不起作用,请完成下一步以进一步诊断。 - 通过执行
openssl s_client -connect hostname:port_num
命令,使用自签名证书运行与目标服务器的 openssl 连接测试,其中hostname
是使用自签名证书的专用注册表的主机名/DNS 名称,port_num
是运行服务的端口号(对于 HTTPS,通常为 443)。当尝试连接到使用自签名证书的端点时,可以准确查看 openssl 返回的错误,并在那里修复这种情况,例如,通过将正确的证书添加到
TkgServiceConfiguration
。如果 TKG 集群嵌入了错误的证书,将需要使用正确的证书更新配置,删除 TKG 集群,然后使用包含正确证书的配置重新创建该集群。 - 确认密钥数据映射的内容采用双 base64 编码。需要使用双 base64 编码。如果数据映射值的内容没有使用双 base6 编码,则无法处理生成的 PEM 文件。