请教 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 天,实在没有办法,特来请教,希望大佬们支支招。

7210 次点击
所在节点    Kubernetes
56 条回复
stille
2022-05-07 11:22:41 +08:00
你这个需求还是得搞定 daemon.json,需要 reload daemon 和重启 docker.

这样不会再你本身项目中来修改一些配置.
stille
2022-05-07 11:25:34 +08:00
@stille 接 39 楼

不过值得注意的是,daemon 加的是 k8s 的代理.拉取确实是不需要加 k8s.gcr.io 前缀,但是 docker 默认最后还是加 docker.io,所以还是用原始的镜像地址拉取 k8s.gcr.io/xxx/xxx
klo424
2022-05-07 11:37:07 +08:00
@liuhan907 解决了,哈哈哈哈哈哈哈哈哈哈!!!
多谢提醒!感谢!感谢!~

之前搜 field is immutable 搜到的是 kubectl delete deployment ,这个只删除了 deployment 。
刚刚搜 error when apply patch ,搜到了 https://github.com/kubernetes/ingress-nginx/issues/5884#issuecomment-946298539 ,试了先 kubectl delete -f <doployment_file_location> 再 kubectl apply -f <doployment_file_location>,就可以了,不报错了。
见图,https://s3.bmp.ovh/imgs/2022/05/07/3f4724878bbd85d2.png
kubectl delete 不止删除了 deployment ,还删除了其他的一些,之前都没有删掉,所以 apply 时还是之前的 ingress-nginx-admission-create ,就报那个 field is immutable 的错误了。

结帖!
klo424
2022-05-07 11:37:49 +08:00
@stille @julyclyde 谢了,已经解决了。
klo424
2022-05-07 11:41:11 +08:00
@hzfyjgw #43 刚才过于兴奋,@错人了😂
多谢提醒!感谢!感谢!~
sujin190
2022-05-07 13:51:12 +08:00
这个问题确实烦人,全新安装的时候依赖镜像又很多,除了 k8s.gcr.io ,还有 gcr.ioproduction.cloudflare.docker.comingresses.meta.k8s.io 都访问有问题,production.cloudflare.docker.com 这个好多不是从这地方发拉取的镜像中间也会走到这个去,后来没办法了去每个节点上都用 iptables 把这几个域名的访问都重定向都代理去了才顺顺利利的装完了
Frankcox
2022-05-07 16:10:13 +08:00
想起不知道在哪看见有人说的,每次安装 kubernetes 集群,都会发自内心感恩强大的祖国
oceanxie
2022-05-07 18:13:40 +08:00
我本地的话就走的 docker 先拉镜像的,可以试试 https://oceanxie.cn/2021/09/14/docker%E9%80%9A%E8%BF%87ssr%E4%BB%A3%E7%90%86/
jxxz
2022-05-07 18:21:38 +08:00
kubesphere 的 kubekey 工具支持从国内镜像下载安装 k8s 集群的,也提供了离线部署方式
对国内网络比较友好
zxbutton
2022-05-07 23:07:25 +08:00
旁路由吧,这个一劳永逸
uncat
2022-05-08 06:57:45 +08:00
Add your proxy settings and restart docker daemon

[Imgur]( https://imgur.com/7kL1a5i)
uncat
2022-05-08 06:59:08 +08:00
Add your proxy settings and restart docker daemon
![howto setup docker behind a http proxy]( https://i.imgur.com/7kL1a5i)
SakataToushirou
2022-05-09 08:06:56 +08:00
你可能需要一个支持 TUN 模式的代理
xin053
2022-05-09 09:11:44 +08:00
可以利用 github action 帮你下载国外镜像,并推送到 docker hub ,或者你自己的私仓,参考:
https://github.com/xin053/mirror_docker_image
yyttrr
2022-05-15 11:28:43 +08:00
生产环境一定要用自建镜像仓库,出现过官方镜像小版本变更引起的 bug ,镜像 tag 没变实际上里面变动了一个小版本
LanLiang
2023-06-07 16:04:16 +08:00
太简单了,只需要为 gcr.ioregistry.k8s.io 配置镜像源为 gcr.lank8s.cnregistry.lank8s.cn 就可以愉快了拉取镜像了!

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

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

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

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

© 2021 V2EX