本文共 1036 字,大约阅读时间需要 3 分钟。
在Kubernetes网络模型中,默认所有Pod都位于一个扁平且直接联通的网络空间中。这种假设在Google Compute Engine(GCE)中是现成的网络环境,但在私有云中搭建Kubernetes集群时,这种假设并不成立。我们需要先打通不同节点之间的网络互联,再基于此运行Kubernetes。
####Pod间通讯机制
同一Pod内容器间通讯
使用pause
进程实现的localhost
访问模式,确保同一Pod内的容器能够直接互相访问。Pod共享一个网络命名空间和Linux协议栈。不同Pod间通讯
层覆盖网络(Overlay Network)作为Kubernetes默认的容器间通信机制。####Service与Pod的通讯
Service是Kubernetes集群中的虚拟网络设备,用iptables维护节点级的路由规则来实现Pod与Service之间的通信。目前主要采用iptables实现,但有性能优化使用Linux负载均衡(LVS)更高效。
####Pod与外部网络联通
Kubernetes中,Pod需要通过网络进行通信。具体实现如下:
此外,外部系统访问Pod时,可以通过Service转发实现。
Flannel由CentOS团队设计专为Kubernetes服务设计,是一种灵活的网络规划服务。它能够为集群中的各Pod分配唯一的虚拟IP地址,并通过覆盖网络实现数据包的原封不动传递。
####Flannel的主要功能
IP地址分配
Flannel能够动态分配集群内的虚拟IP地址段,并对这些IP进行管理。维护路由表
Flannel监控Etcd(Kubernetes Etcd集群)的状态,在内存中维护Pod节点路由表。覆盖网络支持
通过Flannel,实现跨节点的网络通信,将数据包直接传递至目标Pod,无需经过节点网络。这种高效的网络规划机制极大地方便了Kubernetes集群的网络管理和扩展。
转载地址:http://oxnkk.baihongyu.com/