K8S原理剖析:网络模型原理剖析和实践
大纲
- 网络模型与CNI
- Service
- Ingress
- DNS
- Network Policy
网络模型与CNI
一个Pod一个IP
- - 每个Pod独立IP, Pod内所有容器共享网络namespace(同一个IP)
- - 容器之间直接通信,不需要NAT
- - Node和容器直接通信,不需要NAT
- - 其他容器和容器自身看到的IP是一样的
集群内访问走Service,集群外访问走Ingress
CNI( container network interface)用于配置Pod网络 -不支持docker网络
Bridge网络
Overlay网络
CNI:Container Network Interface
容器网络的标准化
使用JSON来描述网络配置
两类接口:
- - 配置网络 -- 创建容器时调用
- AddNetwork(net NetworkConfig, rt RuntimeConf) (types.Result, error)
- - 清理网络 -- 删除容器时调用
- DelNetwork(net NetworkConfig, rt RuntimeConf)
Service
Service类型
ClusterIP
- - 默认类型,自动分配集群内部可以访问的虚IP——Cluster IP。
NodePort
- - 为Service在Kubernetes集群的每个Node上分配一个端口,即NodePort, 集群内/外部可基于任何一个NodeIP:NodePort的形式来访问Service。
LoadBalancer
- - 需要跑在特定的cloud provider上
- - Service Controller自动创建一个外部LB并配置安全组
- - 对集群内访问, kube-proxy用iptables或ipvs实现了云服务提供商LB的部分功能: L4转发,安全组规则等
Ingress
DNS