K8s的网络
K8s有几层网络呢?
Kubernetes(K8s)的网络模型可以分为 四层,每一层解决不同的网络通信需求。以下是详细的分层说明:
1. 节点网络(Node Network)
- 作用:物理或虚拟主机(节点)之间的底层网络通信。
- 实现:依赖底层基础设施(如云厂商VPC、物理交换机、Flannel的Host-GW等)。
- 关键点 :
- 确保所有节点(Master和Worker)能通过IP相互通信。
- 通常是宿主机网络(如eth0网卡)。
2. Pod网络(Pod Network)
- 作用 :实现同一集群内Pod-to-Pod的直接通信(无论Pod是否在同一节点)。
- 核心要求 :
- 每个Pod拥有唯一IP(IP-per-Pod模型)。
- Pod IP跨节点互通(无需NAT)。
- 常见实现 :
- Overlay网络(如Flannel/VXLAN、Calico/IPIP):通过隧道封装跨节点流量。
- Underlay网络(如Calico/BGP、MetalLB):直接利用底层网络路由。
- CNI插件:负责Pod网络的配置(如分配IP、设置路由等)。
3. 服务网络(Service Network)
- 作用:通过虚拟IP(VIP)和负载均衡暴露一组Pod,实现服务发现和稳定访问。
- 核心组件 :
- Service:通过kube-proxy维护的iptables/IPVS规则将VIP流量转发到后端Pod。
- DNS (CoreDNS):为Service提供集群内域名解析(如
my-svc.default.svc.cluster.local
)。
- 类型 :
- ClusterIP(默认)、NodePort、LoadBalancer等。
4. 外部网络(External Network)
- 作用:将集群内服务暴露到外部(如公网或企业内网)。
- 实现方式 :
- Ingress:基于HTTP/HTTPS的路由(如Nginx Ingress Controller)。
- LoadBalancer:云厂商提供的负载均衡器(如AWS ALB)。
- ExternalIP或NodePort:直接通过节点IP和端口访问。
网络分层流量示例
- 外部用户 → Ingress(外部网络)
- Ingress → Service(服务网络)
- Service → Pod(Pod网络)
- Pod → 另一节点上的Pod(经过节点网络)。
关键总结
层级 | 通信实体 | 典型技术 |
---|---|---|
节点网络 | 节点之间 | VPC、BGP、物理交换机 |
Pod网络 | Pod-to-Pod | Flannel、Calico、Cilium |
服务网络 | Service-to-Pod | kube-proxy、CoreDNS |
外部网络 | 外部到集群 | Ingress、LoadBalancer |
