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

配置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
      
  • 如果用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:34