0
点赞
收藏
分享

微信扫一扫

Kubernetes Network

CNI——基于插件的容器网络解决方案

深入理解k8s的pod网络

外部接入网络(NodePort/LoadBalancer/Ingress) 外部流量接入
Service网络(Cluster IP + Port) 服务发现和负载均衡
Pod网络(Pod IP + Port) Pod虚拟机互通互联
Node网络(Node IP + Port) 节点主机互通互联

pod网络原理

Pod 是 Kubernetes 中最小的调度和管理单元,它可以包含一个或多个容器,这些容器共享同一个网络命名空间和 IP 地址,因此它们之间可以直接通信。Pod 的网络实现是通过 CNI 接口来完成的,具体原理如下:

  1. 每个 Pod 在创建时都会被分配一个唯一的 IP 地址,这个 IP 地址是由 CNI 插件生成的,通常是在 Pod 所在节点的网络中动态分配的。
  2. Pod 的容器共享同一个网络命名空间,它们可以直接相互通信,不需要进行任何额外的网络配置。
  3. 当 Pod 跨越多个节点时,Kubernetes 会在不同的节点之间创建虚拟网络层,从而实现 Pod 之间的通信。这个虚拟网络层的创建和管理由 CNI 插件负责,可以使用不同的网络方案来实现。
  4. Kubernetes 使用 iptables 规则来实现 Pod 级别的流量控制和网络隔离,这些规则通常是由 CNI 插件动态生成的,可以根据用户的需求进行自定义。
Pod网络概念模型图

image.png

同一节点上的pod网络模型图:

image.png

pause:Pause 容器是一个特殊的容器,它的主要作用是在一个 Pod 中创建一个额外的网络命名空间,并且让其他容器共享这个网络命名空间。这个 Pause 容器会在 Pod 中创建后立即启动,并一直运行到 Pod 被删除为止

eth0:节点主机网卡,支持节点流量出入,也支持k8s集群节点之间做IP寻址和互通

docker0:虚拟网桥,简单理解为虚拟交换机,用来支持同一节点上pod之间进行寻址和网络互通的设备

veth0:pod自身的虚拟网卡,支持pod内不同容器之间进行网络互通的一个设备。pause容器唯一的作用就是用来创建veth0的网络接口

veth0的IP是由docker0这个虚拟网桥来分配的

不同节点上的pod之间如何互通

image.png

pod网络的IP地址是由k8s网络统一管理分配,保证pod的网络IP是不同的

路由方案:

image.png

整合了一下如上概念图的意思

目标为172.17.1.0/24这个范围内的包转发到10.100.0.3这个主机上

目标为172.17.0.0/24这个范围内的包转发到10.100.0.2这个主机上

覆盖网络方案:

image.png

Flannel 是 Kubernetes 中的一种覆盖网络方案,它的作用是为容器提供虚拟的网络层,解决容器之间的通信和互相发现问题

  • Flannel 的工作原理是通过创建一个虚拟网络层来解决容器之间的通信和互相发现问题。在 Flannel 中,每个节点都会分配一个唯一的子网,并为每个容器分配一个 IP 地址。这些 IP 地址是虚拟的,不会与底层网络冲突。Flannel 代理程序还负责将容器的 IP 地址映射到本地节点的 IP 地址上,从而实现容器之间的互相发现和通信

  • Flannel 支持多种后端,例如基于 VXLAN、基于 Linux Bridge、基于 Host-GW 等。不同的后端实现方式和性能都有所差异,用户可以根据自己的需求选择适合自己的后端。此外,Flannel 还支持使用 etcd 等分布式存储系统来保存和同步网络配置信息,从而实现高可用和容错性

  • 需要注意的是,Flannel 并不是 Kubernetes 中唯一的覆盖网络方案,还有其他一些方案,例如 Calico、Weave Net 等,它们在实现方式和性能等方面都有所不同。选择适合自己业务场景的覆盖网络方案是很重要的,可以根据实际情况进行选择

总体来说,Flannel 是一种简单而有效的 Kubernetes 覆盖网络方案,可以为容器提供高效、灵活和可靠的通信机制,让容器应用在分布式环境中更加容易管理和部署

CNI简介

CNI 原理:

  • CNI定义了一系列标准 API 和规范,用于容器运行时(如 Docker、Kubernetes 等)调用插件程序,以创建、删除、配置和销毁容器网络接口。插件程序可以通过各种方式实现,如使用 Linux 网络命名空间、使用 iptables、使用 VXLAN 等技术,从而实现容器之间的网络隔离和互通。

  • CNI 提供了一种简单、灵活和可扩展的网络插件接口,使得用户可以根据自己的需求选择适合自己的网络插件。例如,用户可以选择使用 Flannel、Calico、Weave Net 等开源网络插件,也可以使用商业化的插件,如 VMware NSX、Cisco ACI 等。

举报

相关推荐

0 条评论