在tacker与sfc的集成中,通过调用sfc的接口,来实现NFV特性的流量编排。
前提:
本文是使用rdo版本安装的openstack pika版本,操作系统:CentOS Linux release 7.2.1511
使用rdo版本安装openstack见:
http://blog.csdn.net/linshenyuan1213/article/details/77896219
创建能与外网通信的网络的配置方式见:
http://blog.csdn.net/linshenyuan1213/article/details/78124661
3、配置sfc的插件
server配置文件: /etc/neutron/neutron.conf
service_plugins=..., networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin
[sfc]
drivers=ovs
[flowclassifier]
drivers=ovs
4、加载sfc的驱动
agent配置文件: /etc/neutron/plugins/ml2/openvswitch_agent.ini
[agent]
extensions=sfc
5、升级neutron db:
# neutron-db-manage --config-file /etc/neutron/neutron.conf --subproject networking-sfc upgrade head
6、重启服务
重启neutron-server和neutron-openvswitch-agent
$ systemctl restart neutron-server
$ systemctl restart neutron-openvswitch-agent
7、创建sfc(转载)
可以参考:http://blog.csdn.net/bc_vnetwork/article/details/65630475
里面介绍sfc打通的要求,具体如下(了解以下部分,有助于配置tacker的VNFFD(VNF forwarding graph)的配置文件):
7.1 sfc配置
以下下列配置为例, 创建业务链串联sf1, sf2, sf3 三台nfv虚拟机, 并从VM1处发包进入业务链:
+------+ +------+ +------+
| SF1 | | SF2 | | SF3 |
+------+ +------+ +------+
p1| |p2 p3| |p4 p5| |p6
| | | | | |
VM 1-->----+ +--------+ +-----------+ +---->
根据代码中的一些限制(参考后面"限制"章节), p1必须和logical-source-port在一个子网中, p2、p3必须在一个子网中, p4、p5必须在一个子网中。
所以, 本示例中, 我们定义p1的子网为: 1.0.0.0/24, p2的子网为: 2.0.0.0/24, p3的子网为: 2.0.0.0/24, p4的子网为: 3.0.0.0/24, p5的子网为: 3.0.0.0/24, p6子网为4.0.0.0/24。
$ openstack network create sfc-net-1
$ openstack network create sfc-net-2
$ openstack network create sfc-net-3
$ openstack network create sfc-net-4
$ openstack subnet create --network sfc-net-1 --subnet-range 1.0.0.0/24 sfc-subnet-1
$ openstack subnet create --network sfc-net-2 --subnet-range 2.0.0.0/24 sfc-subnet-2
$ openstack subnet create --network sfc-net-3 --subnet-range 3.0.0.0/24 sfc-subnet-3
$ openstack subnet create --network sfc-net-4 --subnet-range 4.0.0.0/24 sfc-subnet-4
# 创建虚拟机, 命名为sfc-vm-1, 加入2个网络: sfc-net-1, sfc-net-2
# 创建虚拟机, 命名为sfc-vm-2, 加入2个网络: sfc-net-2, sfc-net-3
# 创建虚拟机, 命名为sfc-vm-3, 加入2个网络: sfc-net-3, sfc-net-4
# 修改虚拟机sfc-vm-1的nova port名字为: p1, p2
# 修改虚拟机sfc-vm-2的nova port名字为: p3, p4
# 修改虚拟机sfc-vm-3的nova port名字为: p5, p6
$ openstack sfc port pair create --ingress p1 --egress p2 port-pair-1
$ openstack sfc port pair create --ingress p3 --egress p4 port-pair-2
$ openstack sfc port pair create --ingress p5 --egress p6 port-pair-3
$ openstack sfc port pair group create --port-pair port-pair-1 port-pair-group-1
$ openstack sfc port pair group create --port-pair port-pair-2 port-pair-group-2
$ openstack sfc port pair group create --port-pair port-pair-3 port-pair-group-3
$ openstack sfc flow classifier create --source-ip-prefix 1.0.0.0/24 --logical-source-port p1 sfc-flow-class-1
$ openstack sfc port chain create --flow-classifier sfc-flow-class-1 --port-pair-group port-pair-group-1 --port-pair-group port-pair-group-2 --port-pair-group port-pair-group-3 sfc-port-chain-1
7.2 发包验证
为了减少安全组和port-security对实验的影响, 放开所有NFV虚拟机的安全组, 关闭port-security。
# neutron port-update 68434f35-f6fc-4c64-bbd3-55aca8f7b6ef --no-security-groups
# neutron port-update 68434f35-f6fc-4c64-bbd3-55aca8f7b6ef --port_security_enabled=True
...
关闭所有主机的iptables,以及firewalld
# systemctl stop firewalld
# systemctl stop iptables
在目的主机sfc-vm-3上开启sshd服务:
# systemctl start sshd
在sfc-vm-1上配置ARP:
# arp -s 2.0.0.1 fa:16:3e:ee:ee:ee
在sfc-vm-2上配置路由转发, 把eth0的流量转发到eth1上去:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ip route add 10.0.0.0/24 dev eth1
# arp -s 4.0.0.8 fa:16:3e:ee:ee:dd
7.3 验证数据流向特性
在sfc-vm-1上执行,ssh 4.0.0.8 sfc-vm-3的p6端口
# ssh 4.0.0.8
sfc-vm-2中间节点报文抓取截图:
sfc-vm-2 eth0口:
# tcpdump -i eth0 -xxvXX -n
sfc-vm-2 eth0口:
# tcpdump -i eth1 -xxvXX -n
sfc-vm-3上抓图, 能够正确抓到从sfc-vm-2发过来的报文:
# tcpdump -i eth0 -nxxvXX
7.4 参考资料:
http://blog.csdn.net/bc_vnetwork/article/details/65630475