繁体   English   中英

在kubernetes内运行的docker容器内没有互联网连接,编织为网络

[英]No internet connectivity inside docker container running inside kubernetes with weave as networking

我有一个在AWS EC2实例上运行的kubernetes集群,并编织为网络(cni)。 我已经禁用了docker网络(ipmask和iptables),因为它是由weave管理的(以避免网络冲突)。

我已经在这个集群上部署了我的Jenkins作为K8s pod,这个jenkins使用jenkins kubernetes插件根据我已定义的pod和容器模板生成动态从属。 这些从属容器中有docker client,它通过docker.sock连接到主机docker引擎

因此,当我在Jenkins中运行任何作业时,它会启动一个奴隶,并在此基础上克隆一个git repo并开始构建repo中存在的Dockerfile。

我的示例dockerfile如下所示:

FROM abc:123
RUN yum update

因此,当容器开始构建时,它会尝试连接到redhat repo以更新本地存储库并在此处失败。 要调试我登录到此容器并尝试wget / CURL一些包,并发现此容器中没有Internet连接。

我怀疑构建docker时会启动中间容器,而这些容器不能通过编织来管理,因此它们没有互联网连接。

需要建议。

相关问题: Kubernetes中Docker容器内的Internet连接

好吧,经过多次努力,我找到了解决方案。
因此,当K8s启动一个pod时,它会启动一个sidecart容器,其作用基本上是为pod容器提供网络。
因此,当我运行docker build时,如果我将它的容器ID作为网络传递,那么我的中间上下文开始通过此容器获得Internet连接。 所以变化看起来像这样:

docker build -t "some name" --network container:\$(docker ps | grep \$(hostname) | grep k8s_POD | cut -d\" \" -f1) -f infra/docker/Dockerfile .

希望这可以帮助。 :d

您可以尝试动态地附加编织网络作为构建作业的一部分。 是否有可能通过编织改变航班上的活动集装箱网络。

也许您需要使用Weave Docker Api Proxy的一些额外容器,或者您可以使用不同的方式与节点上的Weave网络进行通信。

因此,主要的想法是将运行构建的容器附加到Kubernetes pods网络,在那里您可以进行外部访问。

此外,也许它会更好,您可以创建另一个Weave虚拟网络,可以访问Internet并将您的竞争者附加到它。

你是对的 - docker build过程在不同的上下文中运行,Weave Net不会自动附加它们。

更复杂的是,Kubernetes将通过CNI连接,而Docker拥有自己的插件API。 我相信可以同时在机器上同时使用,但相当复杂。

也许看看一些不使用Docker构建图像方法

暂无
暂无

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

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