繁体   English   中英

Kubernetes pod 未启动,在代理后面运行

[英]Kubernetes pods not starting, running behind a proxy

我在 minikube 上运行 kubernetes,我在代理后面,所以我在 /etc/systemd/system/docker.service.d/http-proxy.conf 中为 docker 设置了环境变量(HTTP_PROXY 和 NO_PROXY)。 我能够做 docker pull 但是当我运行下面的例子时

kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
kubectl get pod

pod 永远不会启动,我收到错误

desc = unable to pull sandbox image \"gcr.io/google_containers/pause-amd64:3.0\"

docker pull gcr.io/google_containers/echoserver:1.4工作正常

我遇到了同样的问题,并分享了我在犯了几次错误后学到的东西。 这是 minikube v0.19.0。 如果您有旧版本,您可能需要更新。

请记住,我们需要完成两件事:

  1. 确保 kubctl 在连接到桌面上的 minikube 时不通过代理。
  2. 确保 minikube 中的 docker 守护进程在需要连接到图像存储库时确实通过代理。

首先,确保您的代理设置在您的环境中是正确的。 这是 my.bashrc 中的示例:

export {http,https,ftp}_proxy=http://${MY_PROXY_HOST}:${MY_PROXY_PORT}
export {HTTP,HTTPS,FTP}_PROXY=${http_proxy}
export no_proxy="localhost,127.0.0.1,localaddress,.your.domain.com,192.168.99.100"
export NO_PROXY=${no_proxy}

有几点需要注意:

  1. 我设置了小写和大写。 有时这很重要。
  2. 192.168.99.100 来自minikube ip 您可以在集群启动后添加它。

好的,这样应该可以确保 kubectl 正常工作。 现在我们有下一个问题,即确保使用您的代理设置配置 minikube 中的 Docker 守护进程。 你这样做,正如 PMat 所提到的那样:

$ minikube delete
$ minikube start --docker-env HTTP_PROXY=${http_proxy} --docker-env HTTPS_PROXY=${https_proxy} --docker-env NO_PROXY=192.168.99.0/24

要验证是否已采用这些设置,请执行以下操作:

$ minikube ssh -- systemctl show docker --property=Environment --no-pager

您应该会看到列出的代理环境变量。

为什么minikube delete 因为没有它,如果您之前创建了一个集群(比如没有代理信息),启动将不会更新 Docker 环境。 也许这就是为什么 PMat 没有成功通过 --docker-env 启动(或者可能是在旧版本的 minikube 上)。

我能够自己修复它。 我的主机上有 Docker,Minikube 中也有 Docker。 Minukube 中的 Docker 有问题我必须通过 ssh 进入 minikube VM 并关注这篇文章

无法在代理后面下载 Docker 映像,现在一切正常,

应该有更好的方法,在启动 minikube 时我已经通过了如下所示的 docker env,但没有用

minikube start --docker-env HTTP_PROXY=http://xxxx:8080 --docker-env HTTPS_PROXY=http://xxxx:8080 
--docker-env NO_PROXY=localhost,127.0.0.0/8,192.0.0.0/8 --extra-config=kubelet.PodInfraContainerImage=myhub/pause:3.0

我在 Minikube VM 中设置了相同的环境变量,以使其工作

看起来您需要将 minikube ip 添加到 no_proxy:

export NO_PROXY=$no_proxy,$(minikube ip)

看到这个线程: kubectl behind a proxy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM