Kubernetes pods无法启动,运行绑定代理

时间:2017-05-02 00:30:07

标签: docker kubernetes minikube

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

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工作正常

3 个答案:

答案 0 :(得分:4)

我能够自己解决这个问题。 我的主机上有Docker,Minikube上有Docker。 Minukube的码头工人遇到了问题 我不得不ssh到minikube VM并按照这篇文章

Cannot download Docker images behind a proxy 这一切都有效,

应该有一个更好的方法来做这个,在启动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中设置了相同的env变量,以使其正常工作

答案 1 :(得分:3)

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

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

  1. 确保在连接到桌面上的minikube时,kubctl不会通过代理。
  2. 当需要连接到图像存储库时,确保minikube 中的docker守护程序通过代理。
  3. 首先,确保您的代理设置在您的环境中正确无误。这是我的.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。您可以在群集启动后添加它。
    3. 好的,所以应该照顾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)。

答案 2 :(得分:0)

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

export NO_PROXY=$no_proxy,$(minikube ip)

请参阅此主题:kubectl behind a proxy