kubernetes系列(五) - kubernetes网络原理

前言

关于kubernetes网络,需要了解以下知识:

  1. kubernetes的网络原型是什么
  2. docker背后的网络基础是什么
  3. docker自身的网络模型和局限是什么
  4. kubernetes的网络组件之间是如何通信的
  5. 外部如何访问kubernetes集群
  6. 有哪些开源组件支持kubernetes的网络集群

1. kubernetes网络模型

kubernetes的网络模型假定了所有的pod都在一个直接连通的扁平的网络空间中,kubernetes运行的基础是假定这个网络已经存在。

自己搭建集群的话,需要自己实现这个网络假定,就是通过flannelcalico等组件


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开实现

  1. flannel能协助kubernetes,给每一个node伤的每个pod都分配一个不冲突的ip
  2. 且能在这些ip之中建立一个覆盖网络,通过这些覆盖网络overlay network,原封不动地传递到目标容器内

etcd为flannel提供的支持

  1. 存储管理flannel可分配的ip地址资源段
  2. 监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表

2.3 pod和service之间的通讯

目前基于性能考虑,全部为iptables维护和转发。

新版本中已经替换为lvs


2.4 外网访问pod

通过service nodeport完成


3. kubernetes的三层网络

三层分别是:

  1. pod网络
  2. service网络
  3. 节点(node)网络

真实的、具体的网络只有节点网络,其他两层都是虚拟的内部网络

posted @ 2020-06-20 16:48  宝树呐  阅读(609)  评论(0编辑  收藏  举报