Kubernetes 的网络模型

68 阅读2分钟

请求访问Service对象上的服务(两种链路)

image.png

南北向流量: 集群外部和集群内部通信的流量 流入流出集群的流量

东西向流量: 集群内的流量 pod之间的流量

内部访问

  • 集群内部的通信流量也称为东西向流量,客户端也是集群上的Pod对象;
  • 内部的客户端(某个pod) 直接访问service对象

外部访问

  • 集群外部访问
    • 外部client -->node --> service对象 --> pod对象
    • 外部client --ingress --> pod对象
  • Service同集群外部的客户端之间的通信流量称为南北向流量,客户端是集群外部的进程;
    • 另外,集群上的Pod也可能会与集群外部的服务进程通信

Kubernetes 的网络模型

image.png

节点网络(物理网络)

  • 集群节点间的通信的网络 需要和集群外部端点通信
  • 各节点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集群自行管理

image.png

节点网络 Pod网络 Service网络 会在worker节点上交汇 由节点内核中的路由模块,以及iptables/netfilter和ipvs等完成网络间的流量转发

Kubernetes集群中的通信流量

Kubernetes网络中主要存在4种类型的通信流量

  • 同一Pod内的容器间通信 --loop接口完成
  • Pod间的通信 --pod网络完成
  • Pod与Service间的通信
  • 集群外部流量与Service间的通信

Pod网络需要借助于第三方网络插件(兼容CNI规范的)完成,这些插件需要满足以下功能要求

  • 所有Pod间均可不经NAT机制而直接通信
  • 所有节点均可不经NAT机制直接与所有Pod通信
  • 所有Pod对象都位于同一平面网络中(在同一个网段中 不能经过路由器转发)