天天看點

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 發包驗證

為了減少安全組和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