可以对 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 连接到工作节点,执行两个调查步骤。
  1. 检查文件夹 /etc/ssl/certs/ 中名为 tkg-<cert_name>.pem 的文件,其中,<cert_name>TkgServiceConfiguration 中已添加证书的“name”属性。如果证书与 TkgServiceConfiguration 中的证书匹配,但使用专用注册表仍然不起作用,请完成下一步以进一步诊断。
  2. 通过执行 openssl s_client -connect hostname:port_num 命令,使用自签名证书运行与目标服务器的 openssl 连接测试,其中 hostname 是使用自签名证书的专用注册表的主机名/DNS 名称,port_num 是运行服务的端口号(对于 HTTPS,通常为 443)。

    当尝试连接到使用自签名证书的端点时,可以准确查看 openssl 返回的错误,并在那里修复这种情况,例如,通过将正确的证书添加到 TkgServiceConfiguration。如果 TKG 集群嵌入了错误的证书,将需要使用正确的证书更新配置,删除 TKG 集群,然后使用包含正确证书的配置重新创建该集群。

  3. 确认密钥数据映射的内容采用双 base64 编码。需要使用双 base64 编码。如果数据映射值的内容没有使用双 base6 编码,则无法处理生成的 PEM 文件。