我正在寻找有关如何添加要在 Pod 本身中使用的证书的各种演练,但我似乎找不到有关如何设置 Kubernetes 以允许自签名证书从内部运行的 Harbor 实例中提取图像的信息集群。我已将 ca 证书导入系统的受信任证书(系统运行的是 Ubuntu 18.04),但我猜 Kubernetes 在某处使用它自己的受信任证书存储,类似于 Java 忽略系统的受信任证书并依赖密钥库文件的方式?
编辑 更具体地说,我要做的是部署一个自定义 Docker 映像,该映像存储在我的 Harbor 实例中,该实例在我的 Kubernetes 集群中运行。我将 Harbor 的证书导入到我的主机系统操作系统中,我可以运行:
docker login <url_to_harbor>
docker pull <url_to_harbor>/library/custom/image:latest
它在 CLI 中运行良好,但如果我尝试像这样创建部署 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-deployment
spec:
replicas: 1
selector:
matchLabels:
app: custom
template:
metadata:
labels:
app: custom
spec:
containers:
- name: custom
image: <url_to_harbor>/library/custom/image:latest
...
并运行kubectl apply -f custom-deploy.yaml
当我得到 pod 时出现以下错误:
custom-deployment-6ff68947f6-8jj2p 0/1 ImagePullBackOff 0 13s
如果我得到关于失败 pod 的描述,我会看到:
Warning Failed 18s kubelet, node3 Failed to pull image "<url_to_harbor>/library/custom/image:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://<url_to_harbor>/v2/: x509: certificate signed by unknown authority
Warning Failed 18s kubelet, node3 Error: ErrImagePull
自从导入 CA 证书以来,我已经重新启动了主机。我通过将根 CA 证书文件移动到/usr/local/share/ca-certificates
然后运行来添加证书sudo update-ca-certificates
。
导入 CA 证书的方法是正确的,但是你必须在每个集群节点上都这样做:所有的 master 和 worker。Kubernetes 仅依赖于安装在底层操作系统上的 CA。
如果您可能不想在每个节点上安装 CA 证书,您还可以运行配置 ca 证书的 DaemonSet。请注意,这仅在 Kubernetes 配置了 containerd 运行时才有效。
来源:http ://hypernephelist.com/2021/03/23/kubernetes-containerd-certificate.html
这些说明是在 containerd 1.5中的 cri 中实现主机注册表目录之前编写的,因此如果运行新版本,可能无需重新启动即可配置。请参阅注册表配置 - 简介。
最后,如果您在云管理的集群上运行,它们可能会提供用于管理 CA 证书的自定义配置。例如,AKS - 自定义 CA