1.概述

本方案仅记录在搭建基于containerd的kubernetes环境时国内镜像配置,以备后续查询,同时给各位学友提供一些参考。

解决国内正常情况下,不能通过使用containerd直接访问docker、谷歌kubernetes等官方原始镜像库的问题。

2.配置

本配置对使用国内镜像和非安全协议(https)访问的配置。

2.1.配置镜像

2.1.1.配置文件

配置文件位于:/etc/containerd/config.toml
目前编辑使用vi,vim等工具,稍后有时间了更新一下使用工具编辑配置文件。

2.1.2.配置镜像

配置说明:

    1. 文件未toml格式,编辑时需要注意缩进,保持配置文件的可读性。
    1. 示例中的镜像库仅供参考,提供商政策调整可能服务中止。另外,镜像库和原始库可能存在同步时间差,追求最新版的请注意。

配置项:

	# 镜像条目配在该条目下
	[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

配置格式说明:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."{仓库地址1}"]
                endpoint = ["{仓库地址2}"]

配置参数说明:

  • {仓库地址1} 仓库访问地址,不包含访问协议。例如:registry.xxx.com。当拉取registory.xxx.com/imageName:version时,containerd会使用该条镜像库进行镜像拉取等操作。
  • {仓库地址2},通常和{仓库地址1}一致即可,除非需要明确访问协议情况,例如http://{仓库地址1}https://{仓库地址1}

镜像配置片段:
新手建议阅读一下注释信息。

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
		# docker.io的镜像,支持多个配置,但目前docker.m.daocloud.io公开且稳定
		# 部署在云平台,例如阿里云、华为云可以增加各自的加速器
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
                endpoint = ["https://docker.m.daocloud.io"]
        # k8s.gcr.io的官方库镜像,阿里云服务,公开,速度快。
        # 问题在于该镜像库不支持命名空间,扁平化处理,镜像存在名称转化的可能。        
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
                endpoint = ["registry.cn-hangzhou.aliyuncs.com/google_containers"]
        # k8s的官方库镜像,阿里云服务,公开,速度快。
        # 问题在于该镜像库不支持命名空间,扁平化处理,镜像存在名称转化的可能。
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
                endpoint = ["registry.cn-hangzhou.aliyuncs.com/google_containers"]
        # 私有仓库示例,使用docker-registry提供服务
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.0.39:5000"]
                endpoint = ["http://192.168.0.39:5000"]
        # 域名访问的私有仓库示例,使用docker-registry提供服务        
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.xxx.com"]
                endpoint = ["http://registry.xxx.com"]

2.1.3.非安全访问配置

默认情况,config.toml项目部分无配置,经过查询资料,默认要求使用tls,例如https等安全访问。
如果不配置,则在访问非安全访问的私有仓库,则会报错,报错信息参考如下所示。

Error response from daemon: Get "https://harbor.xxx.com/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

配置项:
镜像条目配在该条目下

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

配置格式说明:

[plugins."io.containerd.grpc.v1.cri".registry.configs."{仓库地址}".tls]
       insecure_skip_verify = true

配置参数说明:

  • {仓库地址} 仓库访问地址,不包含访问协议。例如:registry.xxx.com。当访问相关仓库时,containerd会忽略安全访问提示。
  • insecure_skip_verifytrue表示可以非安全访问。设置为false则表示不可以非安全访问。

安全配置相关片段:

[plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.0.39:5000".tls]
                insecure_skip_verify = true
        [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.xxx.com".tls]
                insecure_skip_verify = true

补充说明

在使用k8s部署构建服务时,建议使用各个厂商的官方镜像。但由于政策问题,国内无法直接访问主要的DockerHub、k8s.gcr.io和registry.k8s.io,对于个人学习和小公司大都使用国内云平台的镜像库镜像站,例如阿里云、华为云等。但部分云平台实际情况,会有自己的策略。此处仅小记,备忘。

阿里云镜像注意点

阿里云的杭州镜像站提供上述官方的镜像,但其不支持命名空间,带命名空间的镜像化转为一级的命名,需要注意。例如在安装Ingress-nginx组件时,镜像ingress-nginx/controllerr需求修改为nginx-ingress-controller。阿里云的北京镜像站没太搞懂。继续研究。
部署在阿里云的环境,可以使用阿里云的加速服务。

POD定义镜像路径

在自行编写deployment/RS/StatefulSet或者下载软件官方yaml时候,注意仓库位置。对于registry.k8s.io或者grc.io的仓库且带命名空间的镜像,且使用阿里云镜像时,需要注意。

部署Harbor服务

Harbor提供良好的镜像管理能力,有利于管理内部的业务镜像,同时可以对常用的官方镜像进行镜像,减小公共服务因政策或则技术原因不可达的影响。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐