网络模型的三条基本要求
Kubernetes 对网络实现只提要求,不限定方案:- Pod 之间无需 NAT 即可互通,跨节点也一样。
- 节点与 Pod 之间无需 NAT 即可互通。
- Pod 自己看到的 IP 与别人看到的 IP 一致。
Pod 网络与 CNI 插件
CNI 插件负责给 Pod 分配 IP、打通跨节点网络。常见选择:Service 四种类型
Service 为一组 Pod 提供稳定入口。四种类型对比:
NodePort 示例:
kube-proxy 的两种模式
kube-proxy 负责把 Service 的虚拟 IP 转发到后端 Pod。- iptables 模式:默认模式。用 iptables 规则做转发,规则多时匹配变慢,且只支持随机负载均衡。
- IPVS 模式:用内核 IPVS 做转发,支持多种调度算法,大规模集群性能更好。
CoreDNS 服务发现
CoreDNS 为每个 Service 分配 DNS 名称。格式:Ingress 与 Ingress Controller
Ingress 按域名和路径把 HTTP 流量路由到不同 Service。Ingress 只是规则,需要 Ingress Controller(如 nginx-ingress)真正执行。NetworkPolicy 入门
NetworkPolicy 限制哪些 Pod 可以互相通信。默认集群内全部放行。 下面的示例只允许带app=frontend 标签的 Pod 访问后端: