kubernetes系列(五) - kubernetes网络原理
目录
前言
关于kubernetes网络,需要了解以下知识:
- kubernetes的网络原型是什么
- docker背后的网络基础是什么
- docker自身的网络模型和局限是什么
- kubernetes的网络组件之间是如何通信的
- 外部如何访问kubernetes集群
- 有哪些开源组件支持kubernetes的网络集群
1. kubernetes网络模型
kubernetes的网络模型假定了所有的pod都在一个直接连通的扁平的网络空间中,kubernetes运行的基础是假定这个网络已经存在。
自己搭建集群的话,需要自己实现这个网络假定,就是通过
flannel和calico等组件
2. kubernetes的组件之间如何通讯
2.1 同一个pod内的多容器之间
前面了解过,同一个pod之间是有一个根容器pause,且共用一个pod ip的,所以容器之间的通讯是通过pause的网络栈的lo(无线网卡),直接使用localhost来互相访问
2.2 各个pod直接的通讯

2.2.1 同一个节点上的pod互相通讯
如上图,同一个node上的pod之间,是连接到同一个docker0网桥上的, 地址段相同,所以可以直接通信
2.2.2 不同节点上的pod之间的通信
通过开源网络组件flannel开实现
flannel能协助kubernetes,给每一个node伤的每个pod都分配一个不冲突的ip- 且能在这些ip之中建立一个覆盖网络,通过这些
覆盖网络overlay network,原封不动地传递到目标容器内
etcd为flannel提供的支持
- 存储管理flannel可分配的ip地址资源段
- 监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表
2.3 pod和service之间的通讯
目前基于性能考虑,全部为iptables维护和转发。
新版本中已经替换为
lvs
2.4 外网访问pod
通过service nodeport完成
3. kubernetes的三层网络
三层分别是:
- pod网络
- service网络
- 节点(node)网络
真实的、具体的网络只有节点网络,其他两层都是虚拟的内部网络


浙公网安备 33010602011771号