网络模型

k8s 的网络中主要存在 4 种类型的通信

  1. 同一 Pod 内的容器通信
  2. 各 Pod 彼此之间的通信
  3. Pod 与 Service 之间的通信
  4. 集群外部流量和 service 之间的通信

k8s 为 Pod 和 Service 资源对象分别使用了各自的 专有网络 ,Pod 网络由 k8s 的网络插件配置实现,Service 的网络由 k8s 集群给予指定。

Pod 网络及其 IP 由 K8s 的网络插件负责配置和管理,具体使用的网络地址可在管理配置网络插件时指定,如 10.244.0.0/16 网络。而 Cluster 网络和 IP 则是由 k8s 集群负责配置和管理,如 10.96.0.0/12

总结起来,k8s 集群至少应该包含 3 个网络:

  1. 各主机(Master,Node,etcd)等自身所属的网络,其地址配置与主机的网络接口,用于各主机之间的通信。例 Master 与各个 Node 之间的通信,其地址配置于 k8s 集群构建之前,它并不能由 k8s 管理和指定
  2. 专用于 Pod 资源的对象网络,它是一个虚拟网络,用于各个 pod 对象设定 ip 地址等网络参数,其地址配置于 Pod 中容器的网络接口之上。
  3. 专用于 Service 资源对象的网络,它也是一个虚拟网络,用于为 k8s 集群之中的 service 配置 IP 地址,此地址并不配置任何主机或容器的网络接口之上,而是通过 Node 之上的 kube proxy 配置为 iptables ipvs 规则,从而将发往此地址的所有流量调度至其后端的各 Pod 对象之上 Service 网络在 Kubernetes 集群创建时予以指定,而各 Service 的地址则在用户创建 Service 时予以动态配置。