OpenStack Tacker介绍 - 4.neutron sfc特性集成

1、简单介绍:

   sfc(Service Function Chain)是提供一种动态建立服务链使不同租户的流量可以按照不同顺序导向不同的服务功能模块。其概念类似于策略路由, 即SFC使网络报文流量走特定的路径,而不是通过IP目的地址来查看路由表得最终目的地。
   sfc 应用于SDN网络技术中, 通常用来联同NetworkFunction Virtualization(网络功能虚拟化)来实现特定功能。举个例子, 我们可以强制某流量从A到B必须经过中间的防火墙, 或者不经过防火墙,而不管当前的路由表。

   在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

2、安装sfc代码

# yum install -y python-networking-sfc

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 发包验证

扫描二维码关注公众号,回复: 2515446 查看本文章
为了减少安全组和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



猜你喜欢

转载自blog.csdn.net/linshenyuan1213/article/details/78195061