网络

三个网络:

  • Node 网络: 物理网络
  • Pod 网络
  • Service 网络

互不相交.

网络设计考量:

  • 跨节点 Pod 通信
  • Pod 中的服务如何被其他 Pod 发现, 以及负载均衡
  • 如何暴露 Pod 中的服务到集群外

网络设计的基本要求:

  • 像物理或虚拟机一样
  • 无需 NAT
  • 容器自身地址和其他 Pod 看到它的地址是同一个地址

Kubernetes 没有原生内置网络实现:

  • CNI: 主流

CNI 插件模型:

image.png

CNI 插件功能:

image.png

网络实现方案:

  • 二层交换方案
  • 三层路由方案
  • Overlay 网络方案

二层交换方案:

  • pods 与 nodes 处于同一个二层广播域
  • 将 node 的物理网卡桥接到虚拟网桥, 开启混杂模式
    • 可以将目的 mac 不是自己的包也转发到 linux bridge
  • 适用于小型 Kubernetes 集群

图示:

  • arp

image.png

三层路由方案:

  • 更具扩展性
  • 需要维护路由表

方案一: 网关路由

image.png

方案二: 主机路由

image.png

Overlay 网络方案:

  • 保留原网络结构, 尽量不改造
  • 性能不如二层, 三层方案

image.png

image.png

对比:

image.png

Service:

  • Cluster IP
  • 外部请求 -> NodeIP:NodePort -> ClusterIP:Port -> ContainerIP:TargetPort
  • 实现者: kube-proxy
  • iptables, 流量转发, 负载均衡

image.png