如何在Kubernetes Deployment中配置Pod证书并解决镜像拉取证书错误
一、在Deployment中配置并让Pod获取已创建的证书
1. 确认证书已转为Kubernetes Secret
如果你的证书(如tls.crt、tls.key或CA证书ca.crt)还未存储为Secret,先执行对应命令创建:
- TLS证书(含公钥+私钥):
kubectl create secret tls my-pod-cert --cert=/本地路径/tls.crt --key=/本地路径/tls.key
- CA证书(仅公钥):
kubectl create secret generic my-ca-cert --from-file=ca.crt=/本地路径/ca.crt
2. 在Deployment.yml中挂载证书到Pod
修改deployment.yml,通过volumes引用Secret,再将证书挂载到容器内指定路径:
apiVersion: apps/v1 kind: Deployment metadata: name: demo-deployment spec: replicas: 1 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: demo-container image: ip_adress/demo:0.2.0 # 挂载证书到容器内目录 volumeMounts: - name: pod-cert-volume mountPath: /etc/app-certs readOnly: true # 若需让容器信任CA证书,挂载到系统信任目录(不同系统路径不同) - name: ca-cert-volume mountPath: /usr/local/share/ca-certificates readOnly: true volumes: # 引用已创建的TLS证书Secret - name: pod-cert-volume secret: secretName: my-pod-cert # 引用已创建的CA证书Secret - name: ca-cert-volume secret: secretName: my-ca-cert
3. 让Pod应用证书
- 若应用自身需要证书(如HTTPS服务),在应用配置中指定容器内的证书路径(如
/etc/app-certs/tls.crt、/etc/app-certs/tls.key)。 - 若需让容器信任CA证书,在Deployment的启动命令中添加证书更新步骤(以Debian/Ubuntu为例):
containers: - name: demo-container image: ip_adress/demo:0.2.0 command: ["/bin/sh", "-c"] args: ["update-ca-certificates && /path/to/your/app"]
二、解决镜像拉取的x509证书错误
错误原因是Kubelet不信任私有镜像仓库的SSL证书,可通过以下两种方式解决:
1. 给所有K8s节点添加仓库CA证书信任
- 在每个节点上创建镜像仓库证书目录,复制CA证书:
mkdir -p /etc/docker/certs.d/ip_adress cp /本地路径/registry-ca.crt /etc/docker/certs.d/ip_adress/ca.crt
- 重启Docker和Kubelet使配置生效:
systemctl restart docker systemctl restart kubelet
2. 配置镜像拉取Secret(适用于仓库需认证+证书的场景)
若私有仓库同时需要用户名密码认证,先创建docker-registry类型的Secret:
kubectl create secret docker-registry regcred \ --docker-server=ip_adress \ --docker-username=你的用户名 \ --docker-password=你的密码 \ --docker-email=你的邮箱
然后在Deployment中添加imagePullSecrets:
spec: template: spec: imagePullSecrets: - name: regcred containers: - name: demo-container image: ip_adress/demo:0.2.0
内容的提问来源于stack exchange,提问作者island
相关产品推荐
相关产品推荐

