网络
三个网络:
- Node 网络: 物理网络
- Pod 网络
- Service 网络
互不相交.
网络设计考量:
- 跨节点 Pod 通信
- Pod 中的服务如何被其他 Pod 发现, 以及负载均衡
- 如何暴露 Pod 中的服务到集群外
网络设计的基本要求:
- 像物理或虚拟机一样
- 无需 NAT
- 容器自身地址和其他 Pod 看到它的地址是同一个地址
Kubernetes 没有原生内置网络实现:
- CNI: 主流
CNI 插件模型:

CNI 插件功能:

网络实现方案:
- 二层交换方案
- 三层路由方案
- Overlay 网络方案
二层交换方案:
- pods 与 nodes 处于同一个二层广播域
- 将 node 的物理网卡桥接到虚拟网桥, 开启混杂模式
- 可以将目的 mac 不是自己的包也转发到 linux bridge
- 适用于小型 Kubernetes 集群
图示:
- arp

三层路由方案:
- 更具扩展性
- 需要维护路由表
方案一: 网关路由

方案二: 主机路由

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


对比:

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

