干货分享体验kubernetes网络插件Contiv
Posted 苏研大云人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货分享体验kubernetes网络插件Contiv相关的知识,希望对你有一定的参考价值。
Kubernetes网络插件可谓是百花争艳,各有千秋。今天就为大家介绍一款功能强大的网络模型contiv。
Contiv是思科提出的容器网络解决方案,使用GO语言实现,基于ovs进行流量转发。它的架构和neutron很相似,Contiv netmaster作为server接收用户请求,然后将指令下发到contiv netplugin,由contiv netplugin配置ovs,实现容器网络的通信。
安装contiv 1.1
安装前提:已经使用kubeadm部署好一个kube集群。
VERSION=1.1.1
CONTIV_MASTER=10.132.46.119
注:CONTIV_MASTER和kubeadm init所使用的--api-advertise-addresses一致。
# curl -L -O https://github.com/contiv/install/releases/download/$VERSION/contiv-$VERSION.tgz
# tar oxf contiv-$VERSION.tgz
# cd contiv-$VERSION
只安装支持vxlan
# ./install/k8s/install.sh -n $CONTIV_MASTER
返回结果:
Contiv UI is available at https://10.132.46.119:10000
Please use the first run wizard or configure the setup as follows:
Configure forwarding mode (optional, default is routing).
netctl global set --fwd-mode routing
Configure ACI mode (optional)
netctl global set --fabric-mode aci --vlan-range <start>-<end>
Create a default network
netctl net create -t default --subnet=<CIDR> default-net
For example, netctl net create -t default --subnet=20.1.1.0/24 -g 20.1.1.1 default-net
根据结果的提示执行:
# netctl net create -t default --subnet=20.1.1.0/24 -g 20.1.1.1 default-net
# netctl net ls
查看kube-system pod状态
vxlan l2、l3通信
同网段通信
创建两个测试用的容器,如图:
容器1:ip 20.1.1.5/24 mac 02:02:14:01:01:05 位于计算节点paas-deploy-3上。
容器2: ip 20.1.1.4/24 mac 02:02:14:01:01:04 位于计算节点paas-deploy-2上。
# netctl net inspect default-net
进入paas-deploy-3上运行的netplugin容器,查看ovs。
# ovs-vsctl show
# ovs-vsctl list port vvport2
可以看出网桥的vvport2端口连接着容器1。
测试:容器1 ping 容器2,
进入位于paas-deploy-3上netplugin容器,查看ovs流表。
table 0
table 1
table 3
table 4
table 5
table 6
table 7
抓包结果:
跨网段通信
创建一个新网络,并启动一个pod使用该网络。
# netctl net create --subnet 192.168.10.0/24 --pkt-tag 1000 --gateway 192.168.10.1 net2
这里的gw 192.168.10.1 ping不通,不存在真实网关。
编写kube deployment文件:
# netctl net inspect net2
可以看到新建pod的网络信息:
使用容器1(20.1.1.5) ping 192.168.10.2
进入位于paas-deploy-3上netplugin容器,查看ovs流表。
table0
table1
table3
table4
table5、6和同网段通信一样。
table7
可以看出contiv利用ovs流表实现了一种精确匹配的路由。
对端的ovs流表:
处于不同计算节点的容器,流表最终将报文赋一个vxlan id值,目的mac指向00:00:11:11:11:11。
处于相同计算节点的容器,流表最终会通过报文的目的IP,将报文重新组装为src_mac=00:00:11:11:11:11,dst_mac=容器mac的报文。
对容器来说,环境中所有其他容器的mac都是00:00:11:11:11:11。
进入容器查看arp表:
容器访问外网
创建的网络需要配置网关。
访问外网的流表在table8中:
Output9是contivh0端口
原来的报文
Src_mac container-mac dst_mac 00:00:11:11:11:11
Src_ip container-ip dst_ip 8.8.8.8
经过table8修改后的报文
Src_mac container-mac dst_mac contivh0-mac
Src_ip 172.19.0.5 dst_ip 8.8.8.8
实际上使用ovs做了一次snat,然后把contivh0作为网关。
接下去就是传统的网络转发过程,主要是查询计算节点的路由表,利用iptables做snat。
关于mtu
目前没有设置容器mtu接口,需要看代码来确认是否有配置mtu的可能。但是使用contiv所创建的容器,mtu自动设置为1450,这也避免了使用vxlan协议后,报文mtu大于物理网卡的问题。
访问策略
contiv提供了类似安全组的功能,使用ovs流表,限制进出容器的流量,可以使用netctl或界面设置。
使用界面创建icmp-deny策略
策略icmp-deny包含一个egress规则:容器发出的访问default-net的icmp报文将被拒绝。
创建group
创建了一个名为icmp-deny的group,该group作用的范围是default-net,使用上一步创建的icmp-deny策略。
对于已存在于default-net的容器,策略并不生效,使用kuebctl label命令更新label也无效。新建的容器,配置相应的label,可使策略生效。
对应的流表:
table 1
table 5
QoS
contiv支持容器的出方向最大带宽限速,支持dscp mark,利用ovs的相关功能实现。
多租户隔离
与openstack neutron类似,contiv使用vxlan实现了多租户的网络隔离,用户可以在自己的租户内创建子网资源,而不受其他租户的影响。
多网络平面下contiv的配置
从安装上来看,可以通过“-v”参数指定vlan网络的数据网卡:
# ./install/k8s/install.sh -n $CONTIV_MASTER -v <data plane interface like eth1>
但是vxlan的并没有,需要通过代码查看,在多网卡情况下,如何配置vxlan数据网卡以及管理网卡。
总结
contiv提供了较完善的网络功能,支持多租户隔离,同时支持vlan、vxlan网络,具备安全功能和qos功能。如果熟悉openstack neutron,会很容易理解并使用contiv。但contiv使用ovs,在提高性能、可靠性方面,门槛较高,因此不易于开发、维护。
[参考文献]
1. 安装contiv https://github.com/contiv/install
2. 使用policy http://contiv.github.io/documents/networking/policies.html
END
往期精选
1.
2.
3. 【
以上是关于干货分享体验kubernetes网络插件Contiv的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# Kubernetes 搞定网络原来可以如此简单?(25)
#yyds干货盘点# 如何挑选合适的 Kubernetes 存储插件?(09)