containerd 配置代理服务器

背景

containerd 安装的环境在内网,无法拉取外网 dockerhub 的镜像,为了实现 拉取外网镜像,需要 containerd 服务配置正向代理,使 containerd 可以通过代理访问 外网。

搭建代理服务器

代理服务器选择

代理服务器可以选用 nginx 和 squid。squid 代理支持 https 代理但性能不如 nginx 代理好,nginx 默认不支持 https 正向代理,但可以通过安装 ngx_http_proxy_connect_module 模块支持。本次代理选用nginx搭建。

配置 nginx https代理

编译nginx源码集成 ngx_http_proxy_connect_module 模块

  1. 下载 ngx_http_proxy_connect_module 模块

    # cd /root
    # git clone git@github.com:chobits/ngx_http_proxy_connect_module.git
  2. 下载 nginx 源码并编译

    # wget http://nginx.org/download/nginx-1.9.2.tar.gz
    # tar -xzvf nginx-1.9.2.tar.gz
    # cd nginx-1.9.2/
    # patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect.patch
    # ./configure --add-module=/path/to/ngx_http_proxy_connect_module
    # make && make install

nginx配置示例

server {
     listen                         3128;

     # dns resolver used by forward proxying
     resolver 8.8.8.8;

     # forward proxy for CONNECT request
     proxy_connect;
     proxy_connect_allow            443 563;
     # forward proxy for non-CONNECT request
     location / {
         proxy_pass http://$host;
         proxy_set_header Host $host;
     }
 }

配置成功后启动 nginx 服务

# /usr/local/nginx/sbin/nginx

nginx https代理容器版本地址:https://github.com/seamounts/...

设置 containerd 服务代理

代理服务器搭建成功后即可配置 containerd 服务使用该代理拉取镜像。配置如下:

# mkdir /etc/systemd/system/containerd.service.d
# cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/"
> EOF
#
# # 配置 no_proxy 指定不走代理的域名或ip
# cat > /etc/systemd/system/containerd.service.d/no_proxy.conf << EOF
> [Service]
> Environment="NO_PROXY=http://<apiserver_ip>:<apiserver_port>/"
> EOF

重启 containerd 服务

# systemctl daemon-reload
# systemctl restart containerd

重启后测试拉取外网镜像

# crictl --debug pull nginx
DEBU[0000] PullImageRequest: &PullImageRequest{Image:&ImageSpec{Image:nginx,},Auth:nil,SandboxConfig:nil,}
DEBU[0004] PullImageResponse: &PullImageResponse{ImageRef:sha256:5a3221f0137beb960c34b9cf4455424b6210160fd618c5e79401a07d6e5a2ced,}
Image is up to date for sha256:5a3221f0137beb960c34b9cf4455424b6210160fd618c5e79401a07d6e5a2ced
#

到此,containerd 代理配置完成

docker、k8s 开发

26 声望
2 粉丝
0 条评论
推荐阅读
使用 sed 命令替换/删除 文本字符的 20 个例子
简述 在以下的文章中会介绍使用 linux sed 命令删除和替换文件中指定字符的 20 个例子。sed 替换字符的命令格式 如下: {代码...} 示例文件: {代码...} 1. 删除指定的字符,比如 'a' {代码...} 以上命令会删除每...

seamounts9阅读 50.8k评论 2

如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.7k评论 2

张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1.1k评论 2

封面图
突破难关:Docker镜像和容器的区别以及构建的最佳实践
Docker 可谓是开启了容器化技术的新时代,现在无论大中小公司基本上都对容器化技术有不同程度的尝试,或是已经进行了大量容器化的改造。伴随着 Kubernetes 和 Cloud Native 等技术和理念的普及,也大大增加了业务...

张晋涛4阅读 444

封面图
http 和 https 的通信过程及区别
🎈 两者的区别端口: http 端口号是80, https 端口号是443传输协议: http 是超文本传输协议,属于明文传输; https 是安全的超文本传输协议,是经过 SSL 加密后的传输协议安全性: https 使用了 TLS/SSL 加密,...

tiny极客2阅读 2.8k评论 2

封面图
使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 786

有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
2021 年 5 月,云原生社区技术沙龙·广州站,API7.ai(支流科技)联合创始人 & CTO,Apache APISIX PMC 王院生在活动上做了《有了 NGINX 和 Kong,为什么还需要 Apache APISIX》的分享,以下是现场分享的文字版。...

API7_技术团队1阅读 4.2k

docker、k8s 开发

26 声望
2 粉丝
宣传栏