Kubernetes网络模型是一个描述性的网络模型,也就是说,任何满足Kubernetes网络模型规范的网络都是Kubernetes网络。
然而,Kubernetes并没有规定如何实现网络模型。事实上,现在市面上有许多替代的实现,称为网络插件。
本节将用一组关于消息交换的约束条件来描述Kubernetes网络模型。
限制条件:网络可寻址实体
Kubernetes网络模型定义了3个可寻址实体:K8S pod、K8S 节点以及K8S Service,每个实体都会分配到一个不同的IP地址。
- ∧ (K8s-Pod(E₁) ∨ K8s-Node(E₁) ∨ K8s-Service(E₁)) ∧ (K8s-Pod(E₂) ∨ K8s-Node(E₂) ∨ K8s-Service(E₂)):
- addr(E₁, a) ∧ addr(E₂, a)₂
- ⟺ E₁ = E₂
然而,网络模型不对这些IP地址做任何进一步的声明。例如,Kubernetes网络模型不对从这些IP地址中提取的IP地址空间做任何进一步的声明。
限制条件:容器间通信
Kubernetes网络模型要求在Pod P上下文中执行的容器C1可以通过localhost与在P上下文中执行的其他容器C2进行通信。
- K8s-Pod(P) ∧ K8s-Container(C₁, P) ∧ K8s-Container(C₂, P): open(C₂, p)
- ⟹
- Send(e, C₁, 127.0.0.1, _, 127.0.0.1, p)
- ⟹
- Recv(e, C₂, 127.0.0.1, _, 127.0.0.1, p)
限制条件:Pod到Pod
Kubernetes网络模型要求在Pod P1上下文中执行的容器C1可以通过P2的地址与在P2上下文中执行的其他容器C2进行通信。
- ∧ K8s-Pod(P₁) ∧ K8s-Container(C₁, P₁) ∧ K8s-Pod(P₂) ∧ K8s-Container(C2, P₂):
- addr(P₁, sa) ∧ addr(P₁, ta) ∧ open(C₂, tp)
- ⟹
- Send(e, C₁, sa, sp, ta, tp)
- ⟹
- Recv(e, C₂, sa, sp, ta, tp)
限制条件:Process到Pod
Kubernetes网络模型要求托管在节点N上的一个Process,称为Daemon D,可以通过P的地址与托管在N上的Pod P上下文中执行的任何容器C进行通信。