配置Kubernetes使用自签名SSL证书拉取私有Docker Registry镜像
当然可以!我来一步步帮你配置Kubernetes使用自签名证书的私有Registry
首先得明确:Kubernetes的镜像拉取依赖集群节点上的容器运行时(Docker/containerd)配置,核心是让每个节点都信任你的自签名证书,再配合K8s的镜像拉取Secret(如果Registry需要认证)就能搞定。
1. 让所有K8s节点的容器运行时信任证书
不管你用Docker还是containerd,都得把自签名证书放到指定目录,让运行时认可它:
- 如果用Docker:
- 先给你的Registry域名(比如
my-registry.local:5000)创建证书目录,把证书传过去:# 替换成你的Registry地址 mkdir -p /etc/docker/certs.d/my-registry.local:5000 # 把你的自签名证书(比如registry.crt)复制到这个目录,并重命名为ca.crt cp /path/to/your/registry.crt /etc/docker/certs.d/my-registry.local:5000/ca.crt - 重启Docker让配置生效:
systemctl restart docker
- 先给你的Registry域名(比如
- 如果用containerd:
- 同样创建证书目录并复制证书:
mkdir -p /etc/containerd/certs.d/my-registry.local:5000 cp /path/to/your/registry.crt /etc/containerd/certs.d/my-registry.local:5000/ca.crt - 重启containerd:
systemctl restart containerd
- 同样创建证书目录并复制证书:
注意:这个操作要在所有Kubernetes集群节点上执行,包括master和worker节点!
2. 创建镜像拉取Secret(如果Registry需要账号密码)
如果你的私有Registry不是公开的,需要用户名密码登录,就得在K8s里创建一个Secret来存认证信息:
kubectl create secret docker-registry regcred \ --docker-server=my-registry.local:5000 \ # 你的Registry地址 --docker-username=your-registry-username \ # Registry登录账号 --docker-password=your-registry-password \ # Registry登录密码 --docker-email=your-email@example.com # 随便填个邮箱就行
这个Secret默认存在default命名空间里,你也可以加--namespace参数指定其他命名空间。
3. 在Deployment/Pod里配置镜像和Secret
现在就可以写Deployment的YAML了,直接用你的私有镜像地址,需要认证的话加上imagePullSecrets:
举个例子:
apiVersion: apps/v1 kind: Deployment metadata: name: my-private-app spec: replicas: 2 selector: matchLabels: app: my-private-app template: metadata: labels: app: my-private-app spec: containers: - name: app-container # 这里填你的私有镜像完整地址 image: my-registry.local:5000/my-app:v1.0.0 ports: - containerPort: 80 # 如果Registry需要认证,就加这个字段引用刚才创建的Secret imagePullSecrets: - name: regcred
如果你的Registry是公开的(不需要登录),那imagePullSecrets这段可以直接删掉。
4. 验证配置是否成功
部署完Deployment后,用kubectl get pods看看Pod状态,如果是Running就说明镜像拉取成功了。要是遇到问题,比如Pod卡在ImagePullBackOff,可以用kubectl describe pod <pod-name>看事件日志,常见的问题比如证书没放对、Secret的账号密码错误,日志里都会明确提示。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

