配置Kubernetes(k8s)使用已有的docker私有库拉取镜像

配置Kubernetes(k8s)使用已有的docker私有库拉取镜像

解决方案goocz2024-12-30 1:44:4129A+A-

k8s可以使用公有库拉取镜像,也可以使用我们自己部署的私有库拉取镜像。我们自己部署的私有库为了安全可能加了基本认证和 TLS加密。而且TLS加密没有权威机构颁发的证书而使用了自签名CA证书。这样k8s就不能直接使用这个私有库,需要对它使用的容器运行时进行配置。

k8s的1.20之前版本默认使用docker做为容器运行时,1.20以及之后版本默认使用containerd容器运行时。上一篇文章已经讲了私有库的部署以及docker使用私有库的配置,这里不再讲解,只讲containerd使用私有库的配置。私有库的部署方式有多种,下面讲述三种情况下的配置方式:

一、私有库只有基本认证(通过用户名密码登录)

1、编辑containerd的配置文件/etc/containerd/config.toml

[root@yan ~]# vi /etc/containerd/config.toml

2、在[plugins]段里添加内容

找到如下项:

[plugins."io.containerd.grpc.v1.cri".registry]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

在其下加入如下子项:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.6.127:5000"]

endpoint = ["http://192.168.6.127:5000"]

192.168.6.127:5000为私有库外部可访问的地址

加入一个和[plugins."io.containerd.grpc.v1.cri".registry.mirrors]同一层次的项,如下:

[plugins."io.containerd.grpc.v1.cri".registry.configs]

然后在其下加入下面子项:

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".auth]

username = "baustem"

password = "baustem123"

username = "baustem"和password = "baustem123" 是私有库基本认证配置的用户名和密码

配置完成如下所示:

[plugins."io.containerd.grpc.v1.cri".registry]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://registry-1.docker.io"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.6.127:5000"]

endpoint = ["http://192.168.6.127:5000"]

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:5000".auth]

username = "baustem"

password = "baustem123"

3、保存文件/etc/containerd/config.toml然后重启containerd

[root@yan ~]# :wq

[root@yan ~]# systemctl restart containerd

二、私有库只配置了TLS加密

1、复制证书

将私有库的自签名根证书复制到containerd所在机器上,例如 /opt/certs/ca.crt

2、在[plugins]段里添加内容

找到[plugins."io.containerd.grpc.v1.cri".registry]项,在其下增加下列子项:

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".tls]

ca_file = "/opt/certs/ca.crt"

insecure_skip_verify = false

192.168.6.127:8443为私有库外部可访问的地址

配置完成如下所示:

[plugins."io.containerd.grpc.v1.cri".registry]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://registry-1.docker.io"]

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".tls]

ca_file = "/opt/certs/ca.crt"

insecure_skip_verify = false

有的资料说证书复制到/etc/containerd/certs.d/192.168.6.127:8443下即可,不需要额外配置,但是我没有测试成功。

3、保存文件/etc/containerd/config.toml然后重启containerd

[root@yan ~]# :wq

[root@yan ~]# systemctl restart containerd

三、既有基本认证又有TLS加密

1、复制证书

将私有库的自签名根证书复制到containerd所在机器上,例如 /opt/certs/ca.crt

2、在[plugins]段里添加内容

找到[plugins."io.containerd.grpc.v1.cri".registry]项,在其下增加下列子项:

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".tls]

ca_file = "/etc/certs/ca.crt"

insecure_skip_verify = false

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".auth]

username = "baustem"

password = "baustem123"

192.168.6.127:8443为私有库外部可访问的地址

配置完成如下所示:

[plugins."io.containerd.grpc.v1.cri".registry]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://registry-1.docker.io"]

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".tls]

ca_file = "/etc/certs/ca.crt"

insecure_skip_verify = false

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".auth]

username = "baustem"

password = "baustem123"

k8s集群中的每个工作结点中的containerd都要做上述配置。

四、k8s使用私有库拉取镜像

k8s部署pod时如果使用上述配置的私有库不需要额外配置,只要保证镜像名含有私有库地址即可,如redis:7.0镜像名为192.168.6.127:5000/redis:7.0或者192.168.6.127:8443/redis:7.0.

如果上述配置里不配置用户名和密码,即如下:

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".tls]

ca_file = "/etc/certs/ca.crt"

insecure_skip_verify = false

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:8443".auth]

#username = "baustem"

#password = "baustem123"

或者

[plugins."io.containerd.grpc.v1.cri".registry]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://registry-1.docker.io"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.6.127:5000"]

endpoint = ["http://192.168.6.127:5000"]

[plugins."io.containerd.grpc.v1.cri".registry.configs]

[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.6.127:5000".auth]

#username = "baustem"

#password = "baustem123"

那么k8s中就要创建一个type=kubernetes.io/dockerconfigjson的Secret,在pod的yaml编辑中指定这个Secret,大概如下所示:

spec:

containers:

- image: '192.168.6.127:8443/redis:7.0'

imagePullPolicy: Always

name: redis

imagePullSecrets:

- name: registry-tls

registry-tls为创建的 Secret的名字

pod部署的详细过程以及涉及的概念后续讲解。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5