You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:30:39