Kubernetes 的几个重要概念2

网络通讯模式

同一个 Pod 内的多个容器之间通讯:lo
各 Pod 之间的通讯:Overlay Network
Pod 与 Service 之间的通讯:各节点的 Iptables 规则

Flannel

CoreOS 团队针对 Kubernetes 设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的 Docker 容器具有全集群唯一的虚拟 IP 地址。而且它还能在这些 IP 地址之间建立一个覆盖网络(Overlay Network), 通过这个覆盖网络,将数据包原封不动地传递到目标容器内。
例如:web app2 想访问 Backend,报文中 outerIp 封装了物理主机的 IP,InnerIP 封装了 Pod 的 IP。

ETCD 与 Flannel

ETCD 集群存储管理 Flannel 可分配的 IP 地址段资源,所以需要修改 Docker 启动配置(更改docker0 的 IP)。
监控 ETCD 中每个 Pod 的实际地址,并在内存中简历维护 Pod 节点路由表

不同情况下网络通信的方式

  • 同一个 Pod 内部通讯: 同一个 Pod 共享同一个网络命名空间,共享同一个 Linux 协议栈
  • Pod1 至 Pod2 通信(在同一台机器):由 Docker0 网桥直接转发请求至 Pod2,不需要经过 Flannel
  • Pod1 至 Pod2 通信(不在同一台机器):Pod 的地址是与 Docker0 在同一个网段上,但是 Docker0 网段与宿主机网卡是两个完全不同的 IP 网段,并且不同 Node 直接的通信只能通过宿主机的网络网卡进行。将 Pod 的 IP 和所在 Node 的 IP 关联起来,通过这个关联让 Pod 可以互相访问。
  • Pod 至 Service 的网络:目前基于性能考虑,为 ipvs 维护和转发
  • Pod 到外网: Pod 向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行 Masqueradel, 把源 IP 更改为宿主网卡的 IP,然后向外网服务器发送请求
  • 外网访问 Pod: Service

posted @ 2020-02-29 13:01  klvchen  阅读(254)  评论(0编辑  收藏  举报