增加Kubernetes中的网络模式解析

pull/10/head
Jimmy Song 2017-04-26 18:49:12 +08:00
parent 1ee21683e1
commit 77aefbbbed
4 changed files with 49 additions and 1 deletions

View File

@ -0,0 +1,46 @@
# Kubernetes中的网络模式解析
Kubernetes本身不提供网络模式而是通过[CNI网络插件](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/)实现这与docker中使用的libnetworkCNM的一种实现不同可关于CNM和CNI的详细信息可以参考[Rancher网络探讨和扁平网络实现](https://rootsongjc.github.io/docker-practice/docs/rancher_network.html)。
一般情况下第一次安装和试用kubernetes的时候都会推荐使用flannel这个网络插件这也是官方文档中推荐的vxlan网络模式是最常使用的但是这种模式对网络的损耗较大大约在40%至50%而host-gw模式对网络的损耗比较小只有10%左右。
关于flannel的几种网络模式和性能测试请参考[Comparison of Networking Solutions for Kubernetes](http://machinezone.github.io/research/networking-solutions-for-kubernetes/#comparison-of-networking-solutions-for-kubernetes)。
Flannel的配置参考[Flannel configuration](https://github.com/coreos/flannel/blob/master/Documentation/configuration.md)。
## Flannel host-gw模式架构
参考[OpenShift Flannel Architectrue](https://docs.openshift.com/container-platform/3.4/architecture/additional_concepts/flannel.html)
Flannel的host-gw模式映射容器到容器的路由信息kubernetes的每个node都会运行一个**flanneld**进程,它有以下几个职责:
- 为每个node分配一个独立的subnet
- 为每个pod分配一个独立的IP地址
- 映射容器到容器的路由信息,即便是不同主机上的容器
每个flanneld进程都会将信息发送到etcd集群中存储这样每个node就都可以在flannel网络中获取容器的路由信息。
下图是flannel host-gw模式的架构图
![arch](images/flannel-host-gw-arch.png)
图片来源:[OpenShift Doc](https://docs.openshift.com/container-platform/3.4/architecture/additional_concepts/flannel.html)
查看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
```

View File

@ -29,7 +29,8 @@ GitHub地址https://github.com/rootsongjc/kubernetes-handbook
- [4.0 Kubernetes中的概念解析]() TODO - [4.0 Kubernetes中的概念解析]() TODO
- [5.0 Kubernetes的安全设置]() - [5.0 Kubernetes的安全设置]()
- [5.1 Kubernetes中的RBAC支持](13-kubernetes中的RBAC支持.md) - [5.1 Kubernetes中的RBAC支持](13-kubernetes中的RBAC支持.md)
- [6.0 Kubernetes网络配置]() TODO - [6.0 Kubernetes网络配置]()
- [6.1 Kubernetes中的网络模式解析](16-kubernetes中的网络模式解析.md)
- [7.0 Kubernetes存储配置]() TODO - [7.0 Kubernetes存储配置]() TODO
- [8.0 问题记录](issues.md) - [8.0 问题记录](issues.md)

View File

@ -22,6 +22,7 @@
* [5.0 Kubernetes的安全设置]() * [5.0 Kubernetes的安全设置]()
* [5.1 Kubernetes中的RBAC支持](13-Kubernetes中的RBAC支持.md) * [5.1 Kubernetes中的RBAC支持](13-Kubernetes中的RBAC支持.md)
* [6.0 Kubernetes网络配置]() * [6.0 Kubernetes网络配置]()
* [6.1 Kubernetes中的网络模式解析](16-kubernetes中的网络模式解析.md)
* [7.0 Kubernetes存储配置]() * [7.0 Kubernetes存储配置]()
* [8.0 问题记录](issues.md) * [8.0 问题记录](issues.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB