【Kubernetes系列】第9篇 网络原理解析(上篇)

  • 时间:
  • 浏览:2

大多数状态下,一阵一阵是在云环境上,云提供商的路由表就能确保数据包到达正确的目的地。亲们在每个节点上建立正确的路由也能达到同样的目的。你你是什么 其它的网络插件通过自己的妙招达到有你你是什么 目的。

每个Pod拥有唯一的IP

这里亲们有这样 节点,与如果看到的例如。每个节点有不同的网络命名空间、网络接口以及网桥。

节点上的所有Pod前会 完成有你你是什么 过程。哪此Pod要相互通信,就要用到linux的以太网桥 cbr0 了。Docker使用了例如的网桥,称为docker0。给你用 brctl show 命令列出所有网桥。

Kubernetes Node(same node pod-to-pod communication)

主要的网络接口 eth0 好多好多 在有你你是什么 root netns下。

正如我前面提到,Pod也时需跨节点可达。Kubernetes不关心何如实现。亲们还也能 使用L2(ARP跨节点),L3(IP路由跨节点,就像云提供商的路由表),Overlay网络,因为甚至信鸽。无所谓,否则流量能到达这样 节点的期望Pod就好。每个节点都为Pod IPs分配了唯一的CIDR块(一段IP地址范围),否则每个Pod都拥有唯一的IP,不不和其它节点上的Pod冲突。

这点满足后,Kubernetes唯一的要求是,哪此Pod IP可被其它所有Pod访问,不管哪此Pod在哪个节点。

在每个Kubernetes节点(本场景指的是Linux机器)上,也有这样 根(root)命名空间(root是作为基准,而也有超级用户)-- root netns(root network namespace)。

有你你是什么 Pod IP被该Pod内的所有容器共享,否则其它所有Pod都还也能 路由到该Pod。你可曾注意到,你的Kubernetes节点上运行着你你是什么 "pause"容器?它们被称作“沙盒容器(sandbox containers)",其唯一任务是保留并持有这样 网络命名空间(netns),该命名空间被Pod内所有容器共享。通过有你你是什么 妙招,即使这样 容器死掉,新的容器创建出来代替有你你是什么 容器,Pod IP好多好多 会改变。有你你是什么 IP-per-pod模型的巨大优势是,Pod和底层主机不不有IP因为端口冲突。亲们不不担心应用使用了哪此端口。

假设这样 网络数据包要由pod1到pod2

Kubernetes网络有这样 重要的基本设计原则:

Kubernetes Node(linux network bridge)

第一步是确保同一节点上的Pod还也能 相互通信,否则还也能 扩展到跨节点通信、internet上的通信,等等。

这好多好多 同一节点内容器间通信的流程。当然也还也能 用其它妙招,否则无疑这是最简单的妙招,共同也是Docker采用的妙招。

这好多好多 Kubernetes网络的基础。下次你碰到哪此的问题报告 ,务必先检查哪此网桥、iptables规则表和路由表。

Kubernetes Node(root network namespace)

Kubernetes Nodes with route table(cross node pod-to-pod communication)

Kubernetes Node(pod network namespace)

假设这样 数据包要从pod1到达pod4(在不同的节点上)

亲们把Pod端的网络接口叫 eth0,这样 Pod就不时需知道底层主机,它认为它拥有自己的根网络设备。另一端命名成比如 vethxxx。给你用 ifconfig 因为 ip a 命令列出你的节点上的所有哪此接口。

例如的,每个Pod也有其自身的netns(network namespace),通过这样 虚拟的以太网对连接到root netns。这基本上好多好多 这样 管道对,一端在root netns内,另一端在Pod的netns内。