如何为K3s内置containerd配置私有HTTPS镜像仓库自签名证书?
解决K3s内置containerd访问自签名证书私有镜像仓库的问题
步骤1:确认证书文件的正确性与权限
- 确保
ca.crt是私有仓库的自签名根证书,不要误传仓库的服务器证书 - 设置证书及目录权限,保证containerd进程可正常读取:
sudo chmod 644 /etc/containerd/certs.d/registry.domain:5000/ca.crt sudo chown root:root /etc/containerd/certs.d/registry.domain:5000/ca.crt
步骤2:正确配置K3s的containerd(避免配置被覆盖)
K3s会自动生成/var/lib/rancher/k3s/agent/etc/containerd/config.toml,直接修改该文件重启后可能被覆盖,建议通过K3s主配置文件定义参数:
- 创建或编辑
/etc/rancher/k3s/config.yaml(server节点),添加以下内容:containerd: config: | [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d" - 若为agent节点,在对应节点的
/etc/rancher/k3s/config.yaml中添加相同配置。
步骤3:(可选)直接在containerd配置中指定仓库证书
如果通过config_path方式不生效,可直接在配置中单独声明目标仓库的TLS参数,修改/etc/rancher/k3s/config.yaml:
containerd: config: | [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.domain:5000"] endpoint = ["https://registry.domain:5000"] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.domain:5000".tls] ca_file = "/etc/containerd/certs.d/registry.domain:5000/ca.crt"
步骤4:重启K3s服务使配置生效
- Server节点执行:
sudo systemctl restart k3s - Agent节点执行:
sudo systemctl restart k3s-agent
步骤5:导入证书到系统根证书池(兜底方案)
若以上配置仍不生效,可将自签名证书导入系统信任池,确保containerd能通过系统证书链验证:
- 复制证书到系统证书目录:
sudo cp /etc/containerd/certs.d/registry.domain:5000/ca.crt /usr/local/share/ca-certificates/registry-domain.crt - 更新系统证书:
sudo update-ca-certificates - 再次重启K3s服务。
步骤6:验证配置与排查问题
- 检查containerd配置是否正确加载:
cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml | grep -A 5 -B 5 "registry" - 查看K3s/containerd日志获取细节:
sudo journalctl -u k3s -f # server节点 # 或 sudo journalctl -u k3s-agent -f # agent节点
内容的提问来源于stack exchange,提问作者nagy.zsolt.hun
相关产品推荐
相关产品推荐

