请教 k8s 国内网络访问不了镜像问题的解决方案

2022-05-07 09:12:22 +08:00
 klo424

由于国内网络问题,k8s 的官方镜像在腾讯云服务器上访问不到,导致一些错误。

我是在安装 nginx-ingress 遇到的问题。

在执行了 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml 后,发现官方镜像访问超时。

我在我自己电脑(有代理)上试了下 docker 直接拉取,也是超时的。

这么看,代理也是行不通的,我又尝试了修改 deploy.yaml 文件中的镜像源,如下:

# 替换 k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660

docker.io/liangjw/kube-webhook-certgen:v1.1.1@sha256:23a03c9c381fba54043d0f6148efeaf4c1ca2ed176e43455178b5c5ebf15ad70


# 替换 k8s.gcr.io/ingress-nginx/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185

docker.io/dyrnq/ingress-nginx-controller:v1.2.0@sha256:2746adf7d60c782b83f6fa6e1ceb938878b9f5b16c217e530ba8895f94221a04

替完后重新 kubectl apply -f https://cdn.jsdelivr.net/gh/kade-code/k8s-mirror@master/deploy3.yaml 就会报错。

这个错误我 google 了,说是不让改里面的字段,我也试了把之前的 deployment 删掉,也是不行,就无解了,然后改镜像源的方案我就放弃了。

其间,我查找了 github 的 issue ,https://github.com/kubernetes/ingress-nginx/issues/6335#issuecomment-1011850699,也没有一个能解决我的问题的。

也尝试过 docker pull 镜像源,然后改成官方源的 tag ,也是不起作用。

折腾了 2 天,实在没有办法,特来请教,希望大佬们支支招。

6739 次点击
所在节点    Kubernetes
56 条回复
Illusionary
2022-05-07 09:28:06 +08:00
docker pull 走 http 代理
hhshenhuaxx
2022-05-07 09:30:29 +08:00
好好研究下你那个代理软件吧。要么开全局代理 保证命令行也能 curl google.com ,要么在 docker 上配置 Proxies ,指向自己本机代理暴露出来的地址。
hzfyjgw
2022-05-07 09:31:06 +08:00
感觉这个 image 的 tag 不太合规,照理应该不能存在 2 个:的,尝试换个短 tag 的试试
wd
2022-05-07 09:31:18 +08:00
不太明白你替换了 image 之后为啥 apply 的还是那个 url 。你不应该 apply 本地你替换之后的吗?那个字段不允许改是正常的,你这样的情况可以删除之后在使用你修改的文件 apply
tomqin
2022-05-07 09:31:32 +08:00
最不济就是本地 docker pull `k8s.gcr.io` 的镜像然后 `docker save` ,scp 到服务器再 `docker load`
wd
2022-05-07 09:31:56 +08:00
另外本地改 image tag 应该也是可行的
owlbatex
2022-05-07 09:39:53 +08:00
如果是自己家的话,搞个路由器吧,走路由器代理,或者开个 op 虚拟机,旁网关代理机器流量
owlbatex
2022-05-07 09:43:20 +08:00
其实代理软件也是可以设置代理局域网其他设备的流量的,你在自己电脑上拉取失败可以试试全局
ckxZzz
2022-05-07 09:43:45 +08:00
可以去 hub.docker 拉镜像后改 tag
hzfyjgw
2022-05-07 09:46:05 +08:00
root@xxxx:~# docker pull k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
k8s.gcr.io/ingress-nginx/kube-webhook-certgen@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660: Pulling from ingress-nginx/kube-webhook-certgen
ec52731e9273: Pull complete
b90aa28117d4: Pull complete
Digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
Status: Downloaded newer image for k8s.gcr.io/ingress-nginx/kube-webhook-certgen@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
root@xxxx:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/ingress-nginx/kube-webhook-certgen <none> c41e9fcadf5a 6 months ago 47.7MB


带 2 个: 的长 tag 拉取下来的之后 tag 是<none>
只要 tag 换成 v1.1.1 就可以了
ration
2022-05-07 09:46:33 +08:00
试过改 deploy.yaml 里的地址可行
konakona
2022-05-07 09:51:49 +08:00
1. google 生态的开发要准备科学上网(必备)
2. docker 环境设置代理
3. 命令行的配置设置代理,比如:export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

就可以了
klo424
2022-05-07 09:56:01 +08:00
@Illusionary @hhshenhuaxx #1 #2 我开了全局代理,访问 google 没有问题。

![全局代理访问 google]( https://s3.bmp.ovh/imgs/2022/05/07/9f2807cedcdea9c0.png)
klo424
2022-05-07 09:58:07 +08:00
@hzfyjgw #3 短的我也试过,一样的错误,就是不生效。
mysalt
2022-05-07 09:58:36 +08:00
# 首先确保国外有 Trojan 服务端

# 在腾讯云服务器上安装 Trojan 客户端
$ tar -xvf trojan-1.16.0-linux-amd64.tar.xz
$ mv trojan/trojan /usr/local/bin

# 配置 Trojan 客户端配置文件
$ mkdir /etc/trojan
$ cat > /etc/trojan/config.json <<-EOF
{
"run_type": "client",
"local_addr": "0.0.0.0",
"local_port": 1080,
"remote_addr": "xxxx",
"remote_port": 443,
"password": [
"xxxxx"
],
"log_level": 1,
"ssl": {
"verify": false,
"verify_hostname": false,
"cert": ""
}
}
EOF

# 配置 Systemd 的 Trojan 客户端服务
$ cat > /etc/systemd/system/trojan.service <<-EOF
[Unit]
Description=trojan
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/trojan -c /etc/trojan/config.json -l /var/log/trojan.log
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

# 创建日志文件
$ touch /var/log/trojan.log
$ chown nobody:nogroup /var/log/trojan.log

# 启动 Trojan
$ systemctl enable trojan
$ systemctl start trojan

# 验证代理是否成功
$ curl ip.sb --socks5 127.0.0.1:1080

# 在 Systemd 中配置 Docker Daemon 使用 SOCKS5 代理,其中代理 IP 改为自己的 Trojan 客户端 IP
$ mkdir -p /etc/systemd/system/docker.service.d
$ tee /etc/systemd/system/docker.service.d/socks5-proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=socks5://172.27.111.113:1080/" "HTTPS_PROXY=socks5://172.27.111.113:1080/" "NO_PROXY=localhost,127.0.0.1,docker.io,yanzhe919.mirror.aliyuncs.com,99nkhzdo.mirror.aliyuncs.com,*.aliyuncs.com,*.mirror.aliyuncs.com,registry.docker-cn.com,hub.c.163.com,hub-auth.c.163.com,"
EOF

# 重启 Docker Daemon 服务
$ systemctl daemon-reload
$ systemctl restart docker
$ systemctl show --property=Environment docker # 查看环境变量是否生效

# 测试能否下载 Google 镜像
$ docker pull k8s.gcr.io/kube-proxy:v1.22.0
hzfyjgw
2022-05-07 10:01:24 +08:00
@klo424 #14 只要 image 的 tag 不要带 2 个: 照理没问题了,你 yaml 文件里的 image 的 tag 不需要这么长的
mysalt
2022-05-07 10:06:15 +08:00
@mysalt 以上的步骤是我在国内云环境验证过可以成功的。如果是本地,直接搞个软路由吧,也不用折腾什么 HTTP ,SOCK5 这种代理。
klo424
2022-05-07 10:08:18 +08:00
@wd #4 apply 的 url 我换了,原来是 https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml ,换的 https://cdn.jsdelivr.net/gh/kade-code/k8s-mirror@master/deploy3.yaml ,我刚才又传到服务器本地试了下,还是一样的错误。
那个字段不允许改的话,具体是哪个字段呢?我只修改了 image 字段的值,别的都没改,所以我理解是这个文件就不能改。
#5 这个我也试了,改 tag ,但 apply 后,k8s 还是会 pull error 。
XiLingHost
2022-05-07 10:10:02 +08:00
我的解决方案是在内网搭一个 nexus 做 k8s.gcr.io 的 docker 镜像,然后把 yml 里的 repo 改成内网的 repo
stille
2022-05-07 10:15:59 +08:00
dockerproxy.com

这个可以临时解决问题么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851280

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX