containerd 安裝的環境在內網,沒法拉取外網 dockerhub 的鏡像,爲了實現 拉取外網鏡像,須要 containerd 服務配置正向代理,使 containerd 能夠經過代理訪問 外網。nginx
代理服務器能夠選用 nginx 和 squid。squid 代理支持 https 代理但性能不如 nginx 代理好,nginx 默認不支持 https 正向代理,但能夠經過安裝 ngx_http_proxy_connect_module 模塊支持。本次代理選用nginx搭建。git
下載 ngx_http_proxy_connect_module 模塊github
# cd /root # git clone git@github.com:chobits/ngx_http_proxy_connect_module.git
下載 nginx 源碼並編譯docker
# 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
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 服務api
# /usr/local/nginx/sbin/nginx
代理服務器搭建成功後便可配置 containerd 服務使用該代理拉取鏡像。配置以下:bash
# 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 代理配置完成測試