理解k8s网络
单机上的两个Pod如何通信

- Pod通过network namespace与主机网络隔离
- Pod中存在一个虚拟以太网设备对(veth pair),一端(eth0)在Pod的network namespace中,另一端(ethxx)在主机网络中
- Host的多个veth通过bridge网络相连,所以单机Pod间的通信本质上是多个虚拟设备构成的桥接网络
多机上的两个Pod如何通信

- 多机场景下,需要将不同主机网络相连
Service 的原理

- services本身与网络拓扑没有关系
- services包括一个虚拟的ip地址
- kube-proxy(one per node)根据services的定义修改iptables规则,将发往services ip的包,路由到对应的pod地址
Ingress 的原理

- 与
LoadBalancer不同,Ingress只需要一个独立Ip地址,可以路由到多个Service - Ingress需要一个配套的
IngressController,来完成实际的流量分配 - IngressController需要将自身端口暴露到集群外部以供访问,可能是通过
NodePort
什么是Linux namespace
Linux namespace是内核提供的功能,是Linux容器化技术的基石,可以通过unshare命令调用。

什么是虚拟以太网设备(veth)
linux虚拟以太网设备是network interface的一种,可以在没有物理设备的情况下,对网络进行逻辑分区。