【问题标题】:Internet connection inside Docker container in KubernetesKubernetes 中 Docker 容器内的 Internet 连接
【发布时间】:2017-10-29 17:35:38
【问题描述】:

我有一个基于 jenkins/slave 容器的 Kubernetes pod,我以特权模式将 docker socket 和 docker 二进制文件以及必要的内核模块安装到该容器上。在该 pod 中,我基于运行 docker 容器构建 Docker 映像。在该容器内,我根本没有 Internet 连接,因为 pod 容器使用 flannel 网络(198.x.x.x),而该容器使用桥接 docker 网络(172.x.x.x),这在 pod 容器内不可用。如何在 Kubernetes pod 容器中创建的第二个容器中使 Internet 可用?在 Jenkins 管道中使用 Docker API 对我来说不是一个解决方案,只要它限制错误日志的输出,并且我无法提交在第二个容器中所做的更改,因为在构建后立即删除了该容器。

【问题讨论】:

标签: docker kubernetes


【解决方案1】:

不确定这篇文章是否能帮助您解决这个问题,JENKINS DECLARATIVE PIPELINES WITH KUBERNETES。本文展示了如何在 Kubernetes 中设置 Jenkins 的完整堆栈,还涉及关于 Docker 中的 Docker 的想法。

根据我的想法,我们可以将pod容器标记为container1,将pod中的容器标记为container2

我认为container1container2 应该位于同一个主机并共享同一个docker 引擎。所以 flannel 网络和 docker 网络应该一起设置。

按照我的想法,container2 的网络流量应该来自container2 -> docker0 -> host,不应该是container1

让我知道这是否应该是合理的,或者我们可以一起讨论,我认为这个问题很有趣。

【讨论】:

  • 嗨,赵,我能够解决这个问题。我的 Hypervisor 在 5 天前立即重启,重启后我注意到防火墙规则没有应用于 Docker 桥。一旦我添加了下一条规则: iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 问题就消失了。我已经添加了自动启动脚本,它将在重新启动时应用此规则。
  • @zaho 我也在为同样的问题而苦苦挣扎,我将 jenkins 作为 docker 容器内的 pod 托管,这个 jenkins 将 jenkins slave 作为 K8s pod 生成,在这个 slave 中我正在构建我的 dockerfile,从这里开始问题是,如果我在 dockerfile 中有任何需要互联网连接的语句(yum install xyz),那么我的从容器无法访问互联网。我的奴隶正在使用主机 docker 引擎,并且我已经在容器内映射了 docker.sock。对此有什么想法吗?
猜你喜欢
  • 2020-10-05
  • 2020-05-12
  • 2019-01-27
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2020-11-20
  • 2020-02-08
  • 2019-11-22
相关资源
最近更新 更多