请求访问Service对象上的服务(两种链路)
南北向流量: 集群外部和集群内部通信的流量 流入流出集群的流量
东西向流量: 集群内的流量 pod之间的流量
内部访问
- 集群内部的通信流量也称为东西向流量,客户端也是集群上的Pod对象;
- 内部的客户端(某个pod) 直接访问service对象
外部访问
- 集群外部访问
- 外部client -->node --> service对象 --> pod对象
- 外部client --ingress --> pod对象
- Service同集群外部的客户端之间的通信流量称为南北向流量,客户端是集群外部的进程;
- 另外,集群上的Pod也可能会与集群外部的服务进程通信
Kubernetes 的网络模型
节点网络(物理网络)
- 集群节点间的通信的网络 需要和集群外部端点通信
- 各节点IP地址需要于Kubernetes部署前完成配置,非由Kubernetes管理
- 需要由管理员手动进行,或借助于主机虚拟化管理程序进行
Pod网络(虚拟网络)
- 集群内的Pod对象之间通信的网络
- 需要经由CNI网络插件实现,例如Flannel(10.244.0.0/16)、Calico(192.168.0.0/16)、Cilium等
- pod网络需要借助 节点网络
Service网络(虚拟网络 10.96.0.0/12)
- 在部署Kubernetes集群时指定,各Service对象使用的地址将从该网络中分配
- Service对象的IP地址存在于其相关的iptables或ipvs规则中
- 由Kubernetes集群自行管理
节点网络 Pod网络 Service网络 会在worker节点上交汇 由节点内核中的路由模块,以及iptables/netfilter和ipvs等完成网络间的流量转发
Kubernetes集群中的通信流量
Kubernetes网络中主要存在4种类型的通信流量
- 同一Pod内的容器间通信 --loop接口完成
- Pod间的通信 --pod网络完成
- Pod与Service间的通信
- 集群外部流量与Service间的通信
Pod网络需要借助于第三方网络插件(兼容CNI规范的)完成,这些插件需要满足以下功能要求
- 所有Pod间均可不经NAT机制而直接通信
- 所有节点均可不经NAT机制直接与所有Pod通信
- 所有Pod对象都位于同一平面网络中(在同一个网段中 不能经过路由器转发)