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

Kubernetes集群私有Registry Pod自签名TLS证书配置问题求助

问题根因

你生成自签名证书时未配置使用者备用名称(SAN, Subject Alternative Name),默认生成的x509证书不包含k8s-master主机名的校验标识,导致Docker客户端做TLS握手时无法匹配证书域名,触发校验失败。

解决步骤

第一步:重新生成带SAN的自签名证书

先在master节点的/opt/certs目录下创建OpenSSL配置文件openssl.conf,内容如下:

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
C = CN
ST = 替换为你的省份拼音
L = 替换为你的城市拼音
O = 替换为你的组织名称
OU = 替换为你的部门名称
CN = k8s-master
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = k8s-master
# 如有IP访问需求,补充master节点实际IP,示例如下:
# IP.1 = 192.168.10.10

替换配置内的自定义信息后,执行以下命令备份旧证书、生成新证书:

# 备份旧证书
sudo mv /opt/certs/registry.crt /opt/certs/registry.crt.bak
sudo mv /opt/certs/registry.key /opt/certs/registry.key.bak
# 生成带SAN的新证书
sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/certs/registry.key -x509 -days 365 -out /opt/certs/registry.crt -config openssl.conf -extensions v3_req

生成过程中一路回车确认即可,配置文件内已预设好所需的证书字段信息。

第二步:重启Registry Pod加载新证书

因为证书目录是HostPath挂载,直接删除旧Pod触发Deployment重建即可加载新证书:

kubectl delete pod private-repository-k8s-686564966d-8grr8

等待新Pod启动后,确认STATUS为Running状态即可。

第三步:配置Mac端Docker客户端信任证书

Mac端Docker Desktop有独立的证书校验路径,仅添加到系统钥匙串不会生效,需手动将证书放到Docker指定目录:

  1. 创建对应仓库地址的证书目录:
sudo mkdir -p ~/.docker/certs.d/k8s-master:31320
  1. 将master节点上新生成的registry.crt文件下载到Mac本地,拷贝到上述目录并重命名为ca.crt:
# 示例为证书已下载到Mac的Downloads目录,可根据实际路径调整
sudo cp ~/Downloads/registry.crt ~/.docker/certs.d/k8s-master:31320/ca.crt
  1. 重启Mac端的Docker Desktop服务,让证书配置生效。

第四步:验证推送功能

执行镜像推送命令确认配置生效:

docker push k8s-master:31320/nginx:1.17
额外补充

如果后续需要在K8s集群内部拉取该私有仓库的镜像,需要把新生成的registry.crt文件拷贝到所有K8s节点的/etc/docker/certs.d/k8s-master:31320/目录下,重启节点的Docker服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:27:00