前 言
由于新版本的Kubernetes推崇使用Containerd作为容器运行引擎了,在使用Containerd的过程中遇到很多比Docker不习惯的问题,比如containerd的crictl命令工具功能太少啊,containerd登录自签证书的仓库时配置麻烦啊,等等。。。在使用中确实增添了不少麻烦,虽然都有现成的解决方案,但遇到问题还是有点不知所措。
本文就详细描述一下Containerd登录自签证书仓库时遇到的挫折和最终的解决方法。
一、问题描述
在使用Containerd作为容器引擎的环境中,登录自建Harbor仓库时,如果Harbor的WEB使用的Http协议还好,能够顺利登录,如果Harbor上配置了Https协议,Containerd对证书的检测还是很严格,要求Harbor的证书必须使用SAN的签署方式绑定域名才能正常登录,否则报错
这里有两种解决方法
一是在部署Harbor时,生成证书时使用SAN方式签发证书,并把Harbor使用的域名绑定到证书里,详情参考https://blog.csdn.net/gjjumin/article/details/131877583?spm=1001.2014.3001.5501
二是在containerd到配置文件/etc/containerd/config.toml里配置跳过自签证书到验证
这两种方法我都测试了,但都没成功
二、解决方法
结合实际,现实生产环境中但证书都是域名提供商给签发的证书,这种证书能够经过验证,也不会报不安全等提示,使用正式的证书能否解决这个问题呢,接下来测试一下
前提条件,需要在域名提供商(如阿里云)注册一个域名,注册域名都是收费的,可以选择一个便宜的后缀测试使用,经过实名认证,域名解析后即可正式访问。
配置域名解析时有个技巧,通常正式注册的域名都应该解析到正式的公网IP,这样公网用户可以通过域名访问到正式的应用,这里我们测试使用的话,解析地址可以配置成私有地址(比如192.168.1.xx/172.16.xx.xx/10.xx.xx.xx)这种解析关系同步过来之后,我们在私有网络内也可以使用域名访问私有地址(自己的域名只能自己测试使用)
如:
各大域名提供商付费提供的正式证书一般有效期是一年,还提供一种免费证书,免费证书一般有效期在1-3个月,能满足我们测试使用,如下是申请免费证书的过程,如下
域名必须是经过解析的,选择个人测试证书,勾选快捷签发,一般10分钟之内就会签发
签发完成后可以下载证书文件,在ingress中测试一般使用nginx类型的证书,下载解压之后如下两个文件
使用这两个文件创建harbor-Ingress的secret
然后修改harbor-ingress,引用刚才创建的secret
修改tls部分的secretName为我们创建的harbor-tls
三、测试效果
不再提示不安全,提示证书有效,证书有效时间
测试containerd登录成功
欢迎关注作者的公众号,公众号每天分享运维干货文章