簡體   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