Kubernetes下Flannel网络
现在各大公有云的 k8s 网络插件基本用的都是 vxlan,我们也需要对这个进行一下详细了解,以便用于公司的正式生产环境。 一、原理 首先,kubernetes的网络模型: 包含三要素: 所有的容器(container)之间能够在不使用 NAT 的情况下互相通讯 所有的节点(Node)能够在不使用 NAT 的情况下跟所有的容器(container)互相通讯(反之容器访问节点亦然) 容器(container)中的IP地址,在容器内和容器外面看起来是一样的 那来到 flannel,它是一种 Overlay network 覆盖网络,盖在原有的 Node 网络基础上: 上图要仔细分析, K8S 中存在三个+一个网络段: node 网络段,上图是 172.20.32.0/19,这是基础网络段 pod 网络段,100.96.0.0/16,2¹⁶(65536)个IP,这是由 flannel 产生的 overlay network,所有的 pod 都站在一个大广场上,互相可见 svc 网络段,上图未提,我们需要知道,想要把 pod 的 ip 给固定下来,就得使用 svc 来分配固定的域名,这个是由 iptables 来维护的 In-Host docker network网络段,这是每个 Node 主机的单独网络段,flannel给每个 Node 主机划分了一个 100.96.x.0/24 段,然后在 etcd 内进行维护,来避免不同的 Node 主机分配IP冲突。 综述:flannel 为每个 Node 分配一个 subnet,容器(container)从此 subnet 中分配 IP,这些 IP 可以在 Node 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信。 ...