如何配置vcluster以使用内部Docker Registry证书?
如何配置vcluster以使用内部Docker Registry证书?
我来帮你梳理几种靠谱的配置方法,都是实际部署中验证过的,你可以根据自己的环境选择:
方法一:直接挂载宿主机上的证书目录
如果你的宿主机节点已经配置好了registry证书(就是你提到的/etc/docker/certs.d/docker-registry.docker-registry:5000/ca.crt),可以直接通过hostPath把这个目录挂载到vcluster的syncer容器里,同时配置containerd使用这些证书。
修改vcluster的values.yaml配置文件,添加以下内容:
syncer: extraVolumes: - name: registry-certs hostPath: path: /etc/docker/certs.d/docker-registry.docker-registry:5000 type: Directory extraVolumeMounts: - name: registry-certs mountPath: /etc/docker/certs.d/docker-registry.docker-registry:5000 readOnly: true containerd: extraConfig: | [plugins."io.containerd.grpc.v1.cri".registry.configs."docker-registry.docker-registry:5000".tls] ca_file = "/etc/docker/certs.d/docker-registry.docker-registry:5000/ca.crt"
之后用helm升级或安装vcluster即可。这种方法的好处是不用额外维护证书副本,直接复用宿主机的配置。
方法二:通过ConfigMap管理证书
如果不想依赖宿主机的证书文件(比如宿主机节点可能有变动),可以把证书打包成ConfigMap,再挂载到vcluster组件中:
- 首先在vcluster所在的命名空间创建ConfigMap:
kubectl create configmap registry-ca --from-file=ca.crt=/etc/docker/certs.d/docker-registry.docker-registry:5000/ca.crt -n <你的vcluster命名空间>
- 修改
values.yaml配置,挂载ConfigMap并配置containerd:
syncer: extraVolumes: - name: registry-certs configMap: name: registry-ca extraVolumeMounts: - name: registry-certs mountPath: /etc/ssl/certs/docker-registry-ca.crt subPath: ca.crt readOnly: true containerd: extraConfig: | [plugins."io.containerd.grpc.v1.cri".registry.configs."docker-registry.docker-registry:5000".tls] ca_file = "/etc/ssl/certs/docker-registry-ca.crt"
- 用helm部署或更新vcluster:
helm upgrade --install my-vcluster vcluster/vcluster -n <你的vcluster命名空间> -f values.yaml
方法三:直接在helm安装命令中传递参数
如果不想写values.yaml,可以直接把配置参数嵌在helm命令里,一步到位:
helm install my-vcluster vcluster/vcluster \ --namespace <你的vcluster命名空间> \ --create-namespace \ --set syncer.extraVolumes[0].name=registry-certs \ --set syncer.extraVolumes[0].configMap.name=registry-ca \ --set syncer.extraVolumeMounts[0].name=registry-certs \ --set syncer.extraVolumeMounts[0].mountPath=/etc/ssl/certs/docker-registry-ca.crt \ --set syncer.extraVolumeMounts[0].subPath=ca.crt \ --set containerd.extraConfig='[plugins."io.containerd.grpc.v1.cri".registry.configs."docker-registry.docker-registry:5000".tls]\n ca_file = "/etc/ssl/certs/docker-registry-ca.crt"'
注意事项
- 如果你vcluster使用的是Docker而非默认的containerd,需要把证书挂载到
/etc/docker/certs.d/目录下,配置逻辑类似。 - 确保vcluster的pod有足够权限访问
hostPath(方法一),或者ConfigMap存在于正确的命名空间(方法二、三)。
备注:内容来源于stack exchange,提问作者Fabrice Jammes
相关产品推荐
相关产品推荐

