Kubernetes网络(二)
CNI(容器网络接口)
CNI是Container Network Interface的是一个标准的,通用的接口。现在容器平台:docker,kubernetes,mesos,容器网络解决方案:flannel,calico,weave。只要提供一个标准的接口,就能为同样满足该协议的所有容器平台提供网络功能,而CNI正是这样的一个标准接口协议。
2.1 pod的通信分类
1、同一个Pod内的多个容器之间:lo Network
2、各Pod之间 或 不同主机各Pod 的通讯:Over lay Network
3、Pod 与 Service之间的通讯:各节点的 Iptables规则 或者 IPVS
2.2 K8S整体网络模型图
2.3 K8S中的三种网络
1、node网络:负责不同主机之间的pod通信的入口和出口(物理网络)
2、service网络:负责对外提供服务(暴露网络&集群内部网络)
3、pod网络:负责pod内部容器之间的通信 和 pod 与 pod之间的通信(内部网络)
2.4 K8S的网络通讯原理
1、同一个Pod内部通讯:
- 同一个Pod共享同一个网络命名空间,共享同一个 Linux协议栈。
2、Pod1 至 Pod2:
- Pod1与Pod2在同一台机器:由 Docker0网桥直接转发请求至Pod2,不需要经过 Flannel。
- Pod1至Pod2不在同一台主机:Pod的地址是与 docker0在同一个网段的,但 docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。
3、Pod 至 Service的网络:
- iptables 或者 IPVS维护和转发
4、Pod到外网:
- Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后, iptables执行 Masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求
5、外网访问Pod:
- 访问对应的Service即可