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

自签名证书Docker私有仓库配置问题及K3S/K8S镜像拉取疑问

问题1:为何添加自签名证书后仍需配置insecure-registries

你遇到的问题大概率是以下几个原因导致的:

  • 端口不匹配:你的Registry实际使用端口是5045,但/etc/docker/daemon.json里配置的insecure-registries是registry.local.doc:5000,端口不一致导致Docker仍将registry.local.doc:5045视为未受信任的仓库。
  • 证书未被Docker正确信任:自签名证书仅生成还不够,需要将证书放置到Docker的专属信任目录:
    1. 创建目录:sudo mkdir -p /etc/docker/certs.d/registry.local.doc:5045
    2. 复制证书到该目录:sudo cp ./certs/tls.crt /etc/docker/certs.d/registry.local.doc:5045/ca.crt
    3. 重启Docker守护进程:sudo systemctl restart docker
  • 系统CA未被Docker识别:Docker默认不会自动读取系统级CA证书,即使你更新了update-ca-certificates,也需要手动将证书放到上述Docker专属目录才能让Docker信任该Registry。

完成上述步骤后,你可以移除daemon.json中的insecure-registries配置,重启Docker后即可正常推送/拉取镜像。

问题2:K3S拉取镜像为何需重启集群,生产环境无重启方案及K8S对应操作

为何需要重启K3S

K3S是单进程架构,kubelet组件是K3S进程的一部分。你更新系统CA证书并重启containerd后,K3S的kubelet进程可能仍缓存了旧的证书信任状态或镜像拉取配置,必须重启K3S才能让kubelet重新加载新的CA证书和containerd配置。

生产环境无需重启集群的解决方案

针对K3S:

  1. 仅重启节点的K3S进程:无需重启整个集群,只需在每个节点滚动执行:
    sudo systemctl restart k3s-agent  # 工作节点执行
    sudo systemctl restart k3s        # 控制节点执行
    
    逐个节点操作可避免业务中断。
  2. 更新containerd信任配置并重载:
    • 将自签名证书复制到系统CA目录:sudo cp ./certs/tls.crt /etc/ssl/certs/
    • 更新系统CA:sudo update-ca-certificates
    • 向containerd发送重载信号:sudo kill -SIGHUP $(pidof containerd)
    • 删除现有Pod(Deployment会自动重建),新Pod拉取镜像时会使用更新后的CA证书。

针对标准K8S集群:

  1. 滚动重启节点的containerd和kubelet:
    在每个节点执行以下命令,逐个节点操作避免业务中断:
    sudo cp ./certs/tls.crt /etc/ssl/certs/
    sudo update-ca-certificates
    sudo systemctl reload containerd
    sudo systemctl restart kubelet
    
  2. Pod级CA挂载(临时场景适用):
    无需修改节点配置,给需要拉取该Registry镜像的Pod挂载CA证书:
    先创建包含自签名证书的ConfigMap:
    kubectl create configmap registry-ca-configmap --from-file=tls.crt=./certs/tls.crt
    
    再修改Deployment配置:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: registry-test
      labels:
        app: registry-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: registry-test
      template:
        metadata:
          labels:
            app: registry-test
        spec:
          containers:
          - name: registry-test
            image: registry.local.doc:5045/hello-world
            volumeMounts:
            - name: registry-ca
              mountPath: /etc/ssl/certs/registry.local.doc.crt
              subPath: tls.crt
              readOnly: true
          volumes:
          - name: registry-ca
            configMap:
              name: registry-ca-configmap
    
    这种方式适合多租户或临时测试场景,但每个相关Pod都需要配置。

内容的提问来源于stack exchange,提问作者e7lT2P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:01:20