主要是证书问题。
步骤一、生成证书
除了根据docker私有仓库搭建
这篇文章生成 ca 文件,domain.key外。还需要生成其他的证书
可以参考传送门
核心点:
# 生成2048位的私钥,也可以生成4096位的,看自己需求
openssl genrsa -out wayne.key 2048
# 生成证书请求文件
openssl req -new -key wayne.key -subj "/CN=ip:port" -out wayne.csr
# 将IP地址写入一个文件,为了解决上述所说的那个问题
echo subjectAltName = IP:ipxxxx>extfile.cnf
# 这里的ca我就使用了集群自带的,在/etc/kubernetes/pki/下
openssl x509 -req -in wayne.csr -CA domain.crt -CAkey domain.key -CAcreateserial -extfile extfile.cnf -out wayne.crt -days 3650
# 查看证书信息
openssl x509 -in wayne.crt -noout -text
注:生成新的证书之后,需要将自建的 docker 私有库的容器删除后,重新加载新的crt 和 key 文件
docker run -d -p 5000:5000 --restart=always --name registry --memory 4906m --memory-swap -1 --read-only -v /mnt/registry:/var/lib/registry -v /data/docker_data/registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/docker_data/registry/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/wayne.crt -e REGISTRY_HTTP_TLS_KEY=/certs/wayne.key registry:latest
步骤二、配置 worker 节点(所有)相关证书
1st 将上述的所有证书文件,上传到worker 节点服务器
[root]# ls
domain.crt domain.key wayne.crt wayne.csr wayne.key
2nd 修改/etc/containerd/config.toml文件
vi /etc/containerd/config.toml
按下面的配置进行修改
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = ""
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."仓库地址"]
endpoint = ["https://仓库地址"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."仓库地址".tls]
insecure_skip_verify = false
ca_file = "/etc/containerd/ssl/wayne.crt"
cert_file = "/etc/containerd/ssl/wayne.crt"
key_file = "/etc/containerd/ssl/wayne.key"
[plugins."io.containerd.grpc.v1.cri".registry.configs."仓库地址".auth]
username = "用户名"
password = "密码"
3rd 将生存的证书信息追加到系统的证书管理文件后
# 将生存的证书信息追加到系统的证书管理文件后
cat wayne.crt >> /etc/pki/tls/certs/ca-bundle.crt
步骤三、重启containerd服务
systemctl restart containerd.service
这样就解决了 ack 拉取镜像时的x509问题了
说明:
目前能解决ack 页面上拉取的问题。但是如果在控制台,使用 ctr 拉取,就会提示没有认证。