深入理解K8S四层网络
模仿七层网络模型,抽象出四层模型
POD网络
同一节点上的pod网络
- 依赖于虚拟网桥/网卡(linux虚拟设备)
- pod内容器共享网络栈(pause容器创建)
不同节点上的pod网络
- 路由方案:依赖于底层网络设备,但性能开销小
- 覆盖网络:不依赖于底层网络,但有封包解包开销
CNI:容器网络接口
- 是一个pod网络集成标准,简化k8s和不同pod网络实现技术的集成
Service网络
- service网络构建于pod网络之上,目的在于:
1. 服务发现service discovery
2. 负载均衡load balancing
- servicename+clusterip统一屏蔽服务发现和负载均衡,原理基于DNS+service registry
- 客户端kube-proxy + iptables转发,无倾入不穿透性能损耗比较小
- k8s的服务发现机制可以认为是现代微服务发现机制+传统linux内核机制的融合
服务网络实现原理
服务发现:k8s方案 vs Eureka+Ribbon方案
NodePort vs LoadBalancer vs Ingress对外暴露服务方案
- NodePort 将service暴露在节点网路上,nodeport背后是kube-proxy。kube-proxy是沟通service网络、pod网络和节点网络的桥梁
- LoadBalancer 将service暴露在公网上+负载均衡,背后对接nodeport,公有云支持但收费
- Ingress 同时将多个HTTP服务暴露到外网,但是只需申请一个或少量LB,七层反向代理,相当于一种特殊的service
- 通过kubectl proxy或者port forward,可以在本地环境快速调试k8s中的服务或pod
- k8s的Service发布的三种type :
- type=ClusterIP,表示内部可以访问服务
- type=NodePort,表示通过NodePort对外暴露的服务
- type=LoadBalancer,表示通过LoadBalancer对外暴露服务
深入分析Kube-Proxy
理解netfilter和iptables
kube-proxy的三种工作模式
用户空间代理模式
已经基本淘汰
iptables模式
生产适用,中小规模集群
ipvs模式
生产适用,大规模集群