如何在calico.yaml中配置ACR凭证以拉取私有仓库镜像
解决方案
1 优先处理x509证书报错
你当前出现的x509: certificate signed by unknown authority是容器运行时不信任私有ACR的TLS证书导致的,需要先解决该问题再配置拉取凭证,有两种可选方案:
- 生产环境推荐方案:将ACR的根CA证书分发到所有k3s节点的容器运行时信任目录
k3s默认使用containerd作为运行时,将证书文件存储到所有节点的/etc/containerd/certs.d/myacrrepo.io/ca.crt路径,随后重启containerd和k3s服务即可生效。 - 测试环境临时方案:将ACR配置为不安全镜像仓库,跳过TLS校验
修改k3s节点的/var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl文件,在对应仓库配置项添加insecure_skip_verify = true,重启k3s服务即可。
2 配置Calico清单的ACR拉取凭证
Calico官方默认清单未配置镜像拉取凭证是因为Docker Hub是公开镜像仓库,私有仓库需要自行在工作负载的Pod模板中添加imagePullSecrets字段,操作步骤如下:
2.1 创建私有仓库拉取Secret
首先在kube-system命名空间下创建镜像拉取凭证Secret,执行命令:
kubectl create secret docker-registry acr-secret \ --namespace=kube-system \ --docker-server=myacrrepo.io \ --docker-username=<ACR登录用户名> \ --docker-password=<ACR登录密码>
如果需要把Secret整合到calico.yaml文件中统一管理,可在清单开头添加如下资源定义:
apiVersion: v1 kind: Secret metadata: name: acr-secret namespace: kube-system type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: <本地docker登录ACR后生成的~/.docker/config.json文件的base64编码值>
2.2 修改Calico DaemonSet配置
找到calico.yaml中kind: DaemonSet、name: calico-node的资源定义,在spec.template.spec层级下添加imagePullSecrets配置,示例:
apiVersion: apps/v1 kind: DaemonSet metadata: name: calico-node namespace: kube-system spec: template: spec: # 新增以下配置 imagePullSecrets: - name: acr-secret # 以下为原有的containers、volumes等配置,无需修改 containers: - name: calico-node image: myacrrepo.io/calico/node:v3.17.1 # 其余原有配置保持不变
2.3 修改Calico Deployment配置
找到calico.yaml中kind: Deployment、name: calico-kube-controllers的资源定义,同样在spec.template.spec层级下添加相同的imagePullSecrets配置:
apiVersion: apps/v1 kind: Deployment metadata: name: calico-kube-controllers namespace: kube-system spec: template: spec: # 新增以下配置 imagePullSecrets: - name: acr-secret # 以下为原有配置,无需修改 containers: - name: calico-kube-controllers image: myacrrepo.io/calico/kube-controllers:v3.17.1 # 其余原有配置保持不变
修改完成后重新应用calico.yaml即可。
内容的提问来源于stack exchange,提问作者Thor
相关产品推荐
相关产品推荐

