配置Kubernetes(k8s)使用已有的docker私有库拉取镜像
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部署的详细过程以及涉及的概念后续讲解。
相关文章
- SQL Server导出表结构和数据(sql导出表结构和表数据)
- 告别单证积压!一套系统打破信息孤岛,电子化存证一键溯源!
- 速看!SQL server数据库日志文件过大怎么办?
- 云计算实战:数据备份(如何实现数据云备份)
- SQLServer收缩日志文件(sqlserver收缩日志文件是什么意思)
- RDS sql server使用DTS进行数据库迁移,同阿里云RDS进行数据库迁移
- 如何轻松搞定SAP HANA数据库备份?
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 超详细的SqlServer数据库触发器总结
- Acronis Backup (Advanced)使用示例:备份与恢复(一)