【问题标题】:Why docker0 bridge is showing down in a kubernetes cluster with flannel?为什么 docker0 桥在带有 flannel 的 kubernetes 集群中显示出来?
【发布时间】:2019-11-04 20:10:33
【问题描述】:

我有一个使用 kubadm 创建的 kubernetes 集群,其中包含 1 个 master 和 2 个 worker。 flannel 被用作网络插件。注意到所有工作节点和主节点上的 docker0 网桥都已关闭,但集群网络工作正常。如果我们在 kubernetes 集群中使用任何网络插件(如 flannel),docker0 网桥是否会关闭?

docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:ad:8f:3a:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

【问题讨论】:

    标签: linux docker kubernetes kubernetes-pod flannel


    【解决方案1】:

    我从this SO 线程发布了一个社区 wiki 答案,因为我相信它回答了您的问题。


    这里有 Docker 和 Kubernetes 两种网络模型。

    Docker 模型

    默认情况下,Docker 使用主机私有网络。它创建一个虚拟网桥,默认情况下称为docker0,并从RFC1918 中为该网桥定义的私有地址块之一分配一个子网。对于 Docker 创建的每个容器,它都会分配一个连接到网桥的虚拟以太网设备(称为veth)。 veth 使用 Linux 命名空间映射为在容器中显示为 eth0。容器内的eth0 接口被分配了一个来自网桥地址范围的 IP 地址。

    结果是 Docker 容器只有在同一台机器上才能与其他容器通信(因此是同一个虚拟网桥)。 不同机器上的容器无法相互访问 - 事实上,它们最终可能具有完全相同的网络范围和 IP 地址。

    Kubernetes 模型

    Kubernetes 对任何网络实施都提出了以下基本要求(除非有任何有意的网络分段策略):

    • 所有容器都可以在没有 NAT 的情况下与所有其他容器通信
    • 所有节点都可以在没有 NAT 的情况下与所有容器通信(反之亦然)
    • 容器认为自己的 IP 与其他人认为的 IP 相同

    Kubernetes 在 Pod 范围内应用 IP 地址 - Pod 内的容器共享它们的网络命名空间 - 包括它们的 IP 地址。这意味着Pod 中的容器都可以到达localhost 上的彼此的端口。这确实意味着Pod 中的容器必须协调端口使用,但这与 VM 中的进程没有什么不同。这称为“IP-per-pod”模型。这是使用 Docker 作为“pod 容器”实现的,它保持网络命名空间打开,而“应用容器”(用户指定的东西)通过 Docker 的 --net=container:&lt;id&gt; 函数加入该命名空间。

    与 Docker 一样,可以请求主机端口,但这被简化为非常小众的操作。在这种情况下,将在主机Node 上分配一个端口,并将流量转发到PodPod 本身对主机端口的存在或不存在视而不见。

    为了将平台与底层网络基础设施集成,Kubernetes 提供了一个名为 Container Networking Interface (CNI) 的插件规范。如果满足 Kubernetes 的基本要求,供应商可以随意使用网络堆栈,通常使用覆盖网络来支持 multi-subnetmulti-az 集群。

    下面展示了如何通过Flannel 实现覆盖网络,这是一个流行的CNI

    您可以阅读更多关于其他 CNI 的hereCluster Networking 文档中解释了 Kubernetes 方法。我还建议阅读Kubernetes Is Hard: Why EKS Makes It Easier for Network and Security Architects,它解释了Flannel 的工作原理,还有另一个article from Medium

    希望这能回答你的问题。

    【讨论】:

    • 对好图的一次更新/更正:典型的 kubernetes 设置不再使用 docker0 网桥。改为使用 CNI 网桥,通常命名为 cni0。
    猜你喜欢
    • 2019-06-03
    • 2019-06-12
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多