通过前面三篇《从头搭建Openstack运行环境》的介绍,我们已经搭建出了一套基本的Openstack运行环境,此环境包含以下部分:
5.多租户虚机测试场景分析与搭建
5.1多租户场景包含元素:
1)网络节点和计算节点
2)GRE隧道网络和vlan网络
3)三个租户环境和虚机
租户1 tenant1 虚机2台
租户2 tenant2 虚机1台
租户3 tenant3 虚机1台
从以上场景可以设计出以下的功能测试场景:
1)虚机添加安全组
2)虚机添加floating
3)两个租户网络添加路由
4)两个租户网络添加路由后配置防火墙规则
5)两个租户下的虚机通过floating ip实现路由
6)租户下多个虚机创建loadbalance的VIP
7)对租户下loadbalance的VIP分配floating ip
下面会对此7个配置场景进行说明
5.虚机安全组
说到虚机安全组规则和实现原理有很多资料可以学习,其中最重要的就是iptables规则的配置,可以自己进行学习。下面重点讲一下具体配置
虚机安全组在Openstack里有两种实现方式:
1)通过nova配置实现安全组
2)通过neutron配置实现安全组
我们分别进行一下配置介绍。
5.1 nova的安全组配置
5.1.1配置准备
1)虚机安全组规则通过linux bridge桥设备来实现iptables规则,首先在计算节点内核打开bridge的iptable规则
#open bridge iptables function sysctl -w net.bridge.bridge-nf-call-arptables=1 sysctl -w net.bridge.bridge-nf-call-ip6tables=1 sysctl -w net.bridge.bridge-nf-call-iptables=1
2)清空计算节点iptables规则
iptables -F iptables -X iptables -Z
5.1.2配置nova安全组基础规则中,选取前面创建的tenant3的虚机vm04(10.0.2.84)为例
nova安全组只匹配进入虚机的流量,出虚机流量不检查。并且安全组规则是以虚机为单位,此处可以看到是以虚机ip地址为iptables的配置依据。
安全组的iptables规则涉及iptables的三个链INPUT、OUTPUT和FORWARD
iptables -t filter -N nova-compute-FORWARD iptables -t filter -N nova-compute-INPUT iptables -t filter -N nova-compute-OUTPUT iptables -t filter -N nova-compute-inst-04 iptables -t filter -N nova-compute-local iptables -t filter -N nova-compute-provider iptables -t filter -N nova-compute-sg-fallback iptables -t filter -N nova-filter-top iptables -t filter -A INPUT -j nova-compute-INPUT iptables -t filter -A FORWARD -j nova-filter-top iptables -t filter -A FORWARD -j nova-compute-FORWARD iptables -t filter -A OUTPUT -j nova-filter-top iptables -t filter -A OUTPUT -j nova-compute-OUTPUT iptables -t filter -A nova-compute-FORWARD -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT iptables -t filter -A nova-compute-INPUT -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT iptables -t filter -A nova-compute-inst-04 -m state --state INVALID -j DROP iptables -t filter -A nova-compute-inst-04 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t filter -A nova-compute-inst-04 -j nova-compute-provider iptables -t filter -A nova-compute-inst-04 -s 10.0.2.3/32 -p udp -m udp --sport 67 --dport 68 -j ACCEPT iptables -t filter -A nova-compute-inst-04 -j nova-compute-sg-fallback iptables -t filter -A nova-compute-local -d 10.0.2.84/32 -j nova-compute-inst-04 iptables -t filter -A nova-compute-sg-fallback -j DROP iptables -t filter -A nova-filter-top -j nova-compute-local
通过以上配置此时,虚机的网络访问能力 = 基本网络能力(DHCP访问、允许已建立的连接)。也就是说虚机此时是无法被网络访问,比如 ping,ssh 都无法连接。
5.1.3添加nova安全组规则(实现访问虚机ping和ssh)
iptables -t filter -I nova-compute-inst-04 5 -p tcp -m tcp --dport 22 -j ACCEPT iptables -t filter -I nova-compute-inst-04 5 -p icmp -j ACCEPT iptables -t filter -A nova-compute-inst-04 5 -s 10.0.2.0/24 -j ACCEPT
5.2 neutron的安全组配置
5.2.1配置准备
1)虚机安全组规则通过linux bridge桥设备来实现iptables规则,首先在计算节点内核打开bridge的iptable规则
#open bridge iptables function sysctl -w net.bridge.bridge-nf-call-arptables=1 sysctl -w net.bridge.bridge-nf-call-ip6tables=1 sysctl -w net.bridge.bridge-nf-call-iptables=1
2)清空计算节点iptables规则
iptables -F iptables -X iptables -Z
5.2.2配置neutron安全组基础规则中,选取前面创建的tenant3的虚机vm04(10.0.2.84)为例
neutron安全组匹配进入和发出虚机的两个方向流量,并且安全组规则是以port为依据来进行配置,此处可以看到是以虚机的tap设备为iptables的创建基础。
安全组的iptables规则涉及iptables的三个链INPUT、OUTPUT和FORWARD
iptables -t filter -N neutron-filter-top iptables -t filter -N neutron-openvswi-FORWARD iptables -t filter -N neutron-openvswi-INPUT iptables -t filter -N neutron-openvswi-OUTPUT iptables -t filter -N neutron-openvswi-i04 iptables -t filter -N neutron-openvswi-local iptables -t filter -N neutron-openvswi-o04 iptables -t filter -N neutron-openvswi-s04 iptables -t filter -N neutron-openvswi-sg-chain iptables -t filter -N neutron-openvswi-sg-fallback iptables -t filter -A INPUT -j neutron-openvswi-INPUT iptables -t filter -A FORWARD -j neutron-filter-top iptables -t filter -A FORWARD -j neutron-openvswi-FORWARD iptables -t filter -A OUTPUT -j neutron-filter-top iptables -t filter -A OUTPUT -j neutron-openvswi-OUTPUT iptables -t filter -A neutron-filter-top -j neutron-openvswi-local iptables -t filter -A neutron-openvswi-FORWARD -m physdev --physdev-out tap04 --physdev-is-bridged -j neutron-openvswi-sg-chain iptables -t filter -A neutron-openvswi-FORWARD -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-sg-chain iptables -t filter -A neutron-openvswi-INPUT -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-o04 iptables -t filter -A neutron-openvswi-i04 -m state --state INVALID -j DROP iptables -t filter -A neutron-openvswi-i04 -m state --state RELATED,ESTABLISHED -j RETURN iptables -t filter -A neutron-openvswi-i04 -s 10.0.2.3/32 -p udp -m udp --sport 67 --dport 68 -j RETURN iptables -t filter -A neutron-openvswi-i04 -j neutron-openvswi-sg-fallback iptables -t filter -A neutron-openvswi-o04 -p udp -m udp --sport 68 --dport 67 -j RETURN iptables -t filter -A neutron-openvswi-o04 -j neutron-openvswi-s04 iptables -t filter -A neutron-openvswi-o04 -p udp -m udp --sport 67 --dport 68 -j DROP iptables -t filter -A neutron-openvswi-o04 -m state --state INVALID -j DROP iptables -t filter -A neutron-openvswi-o04 -m state --state RELATED,ESTABLISHED -j RETURN iptables -t filter -A neutron-openvswi-o04 -j neutron-openvswi-sg-fallback iptables -t filter -A neutron-openvswi-s04 -s 10.0.2.84/32 -m mac --mac-source 52:54:00:12:34:63 -j RETURN iptables -t filter -A neutron-openvswi-s04 -j DROP iptables -t filter -A neutron-openvswi-sg-chain -m physdev --physdev-out tap04 --physdev-is-bridged -j neutron-openvswi-i04 iptables -t filter -A neutron-openvswi-sg-chain -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-o04 iptables -t filter -A neutron-openvswi-sg-chain -j ACCEPT iptables -t filter -A neutron-openvswi-sg-fallback -j DROP
虚机的网络访问能力 = 基本网络能力(DHCP访问、允许已建立的连接、防 IP 欺骗)。也就是说虚机此时是无法网络访问和被网络访问,比如 ping,ssh 都无法连接。
5.2.3添加neutron安全组规则(实现访问虚机ping、ssh和http)
iptables -t filter -I neutron-openvswi-o04 6 -p icmp -j RETURN iptables -t filter -I neutron-openvswi-i04 4 -p icmp -j RETURN iptables -t filter -I neutron-openvswi-o04 6 -p tcp -m tcp --dport 22 -j RETURN iptables -t filter -I neutron-openvswi-i04 4 -p tcp -m tcp --dport 22 -j RETURN iptables -t filter -I neutron-openvswi-i04 4 -p tcp -m tcp --dport 80 -j RETURN iptables -t filter -I neutron-openvswi-o04 6 -p tcp -m tcp --dport 80 -j RETURN
5.3总结
通过以上介绍了nova和neutron的安全组功能配置规则,对于iptables的理解还是需要比较深入的,如果想完全理解iptables配置的思路请阅读参考资料里SammyLiu的系列文章中安全组的章节,谢谢。
参考资料:
SammyLiu的《Neutron 理解》系列 http://www.cnblogs.com/sammyliu/p/4622563.html
深入理解Neutron -- OpenStack 网络实现 https://www.gitbook.com/book/yeasy/openstack_understand_neutron/details
作者简介:赵俊峰,现为北京新云东方系统科技有限责任公司 云计算部Openstack开发工程师。主要从事Power和x86混合环境下Openstack相关计算、网络、存储相关服务软件开发和系统架构设计工作。