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