kubernetes-handbook/practice/network-modes-in-kubernetes.md

2.3 KiB
Raw Permalink Blame History

Kubernetes中的网络模式解析

Kubernetes本身不提供网络模式而是通过CNI网络插件实现这与docker中使用的libnetworkCNM的一种实现不同可关于CNM和CNI的详细信息可以参考Rancher网络探讨和扁平网络实现

一般情况下第一次安装和试用kubernetes的时候都会推荐使用flannel这个网络插件这也是官方文档中推荐的vxlan网络模式是最常使用的但是这种模式对网络的损耗较大大约在40%至50%而host-gw模式对网络的损耗比较小只有10%左右。

关于flannel的几种网络模式和性能测试请参考Comparison of Networking Solutions for Kubernetes

Flannel的配置参考Flannel configuration

Flannel host-gw模式架构

参考OpenShift Flannel Architectrue

Flannel的host-gw模式映射容器到容器的路由信息kubernetes的每个node都会运行一个flanneld进程,它有以下几个职责:

  • 为每个node分配一个独立的subnet
  • 为每个pod分配一个独立的IP地址
  • 映射容器到容器的路由信息,即便是不同主机上的容器

每个flanneld进程都会将信息发送到etcd集群中存储这样每个node就都可以在flannel网络中获取容器的路由信息。

下图是flannel host-gw模式的架构图

arch

图片来源:OpenShift Doc

查看Node1和Node2的路由信息你将会看到

Node1

default via 192.168.0.100 dev eth0 proto static metric 100
10.1.15.0/24 dev docker0 proto kernel scope link src 10.1.15.1
10.1.20.0/24 via 192.168.0.200 dev eth0

Node2

default via 192.168.0.200 dev eth0 proto static metric 100
10.1.20.0/24 dev docker0 proto kernel scope link src 10.1.20.1
10.1.15.0/24 via 192.168.0.100 dev eth0