Neutron/ServiceInsertionAndChaining
目录
旧版本链接
贡献者
- Cathy Zhang (项目负责人)
- Louis Fourie
- Paul Carver
- Vikram Choudhary
- Mohan Kumar
- Bernard Cafarelli
- Pavel Glushchak
- Rao Fei
- Xiaodong Wang
- Ramanjaneya Reddy Palleti
- Stephen Wong
- Igor Duarte Cardoso
- Prithiv
- Akihiro Motoki
- Swaminathan Vasudevan
- Armando Migliaccio
- Kyle Mestery
- Murali Birru
每周 IRC 项目会议信息
每周四 1700 UTC 在 #openstack-meeting-4 https://wiki.openstack.org/wiki/Meetings/ServiceFunctionChainingMeeting
networking-sfc IRC 频道
还有一个 #networking-sfc SFC IRC 频道
概述
服务功能链是一种覆盖基于目的地的典型 IP 网络转发的机制。它在概念上与物理网络中的 基于策略的路由 相关,但通常被认为是软件定义网络技术。它通常与安全功能结合使用,尽管它也可以用于更广泛的功能。从根本上说,SFC 能够使网络数据包流通过网络以不同于通过数据包的目的 IP 地址在路由表中查找所选择的路径。它最常与 网络功能虚拟化 结合使用,在虚拟环境中重现一系列传统上由通过电缆连接的物理网络设备集合实现的网络功能。
服务链的一个非常简单的例子是强制所有从点 A 到点 B 的流量都通过防火墙,即使防火墙从路由表的角度来看并不在点 A 和点 B 之间。
一个更复杂的例子是按顺序排列的一系列函数,每个函数都在多个 VM 中实现,以便流量必须在链中的每个跃点通过一个 VM,但网络使用哈希算法将不同的流分布到每个跃点的多个 VM 上。
在 Liberty 周期中,正在为 Neutron 开发服务功能链的 API 和初始参考实现。
- 可以在这里找到 API 规范:https://github.com/openstack/networking-sfc/blob/master/doc/source/api.rst
- 可以在这里找到整体工作的蓝图:https://blueprints.launchpad.net/neutron/+spec/openstack-service-chain-framework
- 可以在这里找到初始 API 工作的蓝图:https://blueprints.launchpad.net/neutron/+spec/neutron-api-extension-for-service-chaining
- 可以在这里找到与初始 API 工作相关的审查:https://review.openstack.org/#/q/topic:networking-sfc,n,z
单主机 networking-sfc 安装步骤和测试环境设置
如果您的测试环境中已经安装了以前的 networking-sfc 补丁,请执行以下操作以获取新的更新补丁代码集
1. 清理 networking-sfc
- cd /opt/stack
- rm –rf networking-sfc
2. 将 networking-sfc 克隆到本地仓库
3. cd /opt/stack/networking-sfc 并运行 "sudo python setup.py install"
4. cd ~/devstack/ 并运行 unstack.sh 和 stack.sh
如果您之前尚未在测试环境中安装 networking-sfc,请执行以下操作以获取补丁代码集
1. 安装 Ubuntu 14.04 和 git
- sudo apt-get update
- sudo apt-get install git-core
- git config --global user.name "testuser"
- git config --global user.email "testuser@example.com"
- sudo apt-get install software-properties-common
- sudo add-apt-repository cloud-archive:mitaka
2. 升级 Linux 内核和 Open vSwitch 2.5.0
- sudo apt-get install linux-image-generic-lts-wily linux-headers-generic-lts-wily
- sudo reboot (重启服务器以确保安装了新的内核)
- apt-cache policy openvswitch-switch ( 确保 Candidate 是 2.5.0-0ubuntu1~cloud0)
- sudo apt-get install openvswitch-switch
- sudo ovs-vsctl -V (确保您已安装 Open vSwitch 2.5.0)
3. 将 networking-sfc 克隆到本地仓库
- sudo mkdir /opt/stack
- sudo chown stack.stack /opt/stack
- cd /opt/stack/
- git clone git://git.openstack.org/openstack/networking-sfc.git
4. 下载 devstack
- cd /opt/stack
- git clone git://git.openstack.org/openstack-dev/devstack.git -b stable/mitaka
5. 将 local.conf 复制到本地仓库并添加以下行
- enable_plugin networking-sfc git://git.openstack.org/openstack/networking-sfc stable/mitaka
或者
- enable_plugin networking-sfc /opt/stack/networking-sfc
6. 运行 stack.sh
- cd devstack
- ./stack.sh
如果报告了一些错误,请阅读错误消息并尝试修复它。
7. 安装 OVS 2.4 或 OVS 2.5。请注意,OVS 版本应与其支持的 Linux 内核版本匹配,以便 OVS 正常工作。下表列出了 Open vSwitch 内核模块将成功构建的 Linux 内核版本。
| Open vSwitch | Linux 内核 |
|---|---|
| 2.0.x | 2.6.32 到 3.10 |
| 2.1.x | 2.6.32 到 3.11 |
| 2.3.x | 2.6.32 到 3.14 |
| 2.4.x | 2.6.32 到 4.0 |
| 2.5.x | 3.1 及更高版本 |
8. 运行 unstack.sh 和 stack.sh
- ./unstack
- ./stack
在我们的单服务器测试环境中,所有 OpenStack 组件都在一台物理服务器上运行。我们创建了 3 个 VM,一个用于源 VM,另一个用于服务功能 VM,最后一个用于目标 VM。
数据路径封装流程
初始参考实现将基于使用流表条目编程 Open vSwitch,这些条目会覆盖默认的基于 MAC 的转发,而是基于通过 Neutron SFC API 定义的标准转发帧。对于具有 Neutron 集成和 SFC 功能的第三方 SDN 实现(例如 Contrail、Nuage 等),也可以编程它们各自的转发平面,基于 Neutron SFC API,但这取决于各自的供应商更新其 SDN 控制器与 Neutron 的集成。
多主机安装
术语
- H1 – 物理主机 1(控制器 + 网络 + 计算)
- H2 – 物理主机 2(计算)
- H3 – 物理主机 3(计算)
- SRC – 源 VM
- SF1 – 服务功能 1
- SF2 – 服务功能 2
- DST – 目标 VM
SRC DST | | H1=============H2===============H3 | | SF1 SF2
重要提示:当前,使用 OVS 2.4.0 时,内核模块会丢弃命中洪泛条目的 MPLS over tunnel 数据包。可以通过启用 l2population 来解决此问题。请参阅以下步骤以获取详细的设置说明。
步骤 1:准备 H1(控制器 + 网络 + 计算)
步骤 1.1
H1 的 local.conf:localrc
SERVICE_TOKEN=abc123 ADMIN_PASSWORD=abc123 MYSQL_PASSWORD=abc123 RABBIT_PASSWORD=abc123 SERVICE_PASSWORD=$ADMIN_PASSWORD HOST_IP=10.145.90.160 SERVICE_HOST=10.145.90.160 SYSLOG=True SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516 LOGFILE=$DEST/logs/stack.sh.log LOGDAYS=2 disable_service tempest RECLONE=no PIP_UPGRADE=False MULTI_HOST=TRUE # Disable Nova Networking disable_service n-net # Disable Nova Compute #disable_service n-cpu # Neutron - Networking Service enable_service q-svc enable_service q-agt enable_service q-dhcp enable_service q-l3 enable_service q-meta enable_service neutron # Cinder disable_service c-api disable_service c-sch disable_service c-vol # Disable security groups Q_USE_SECGROUP=False LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver enable_plugin networking-sfc /opt/stack/networking-sfc
步骤 1.2:从您的 /opt/stack/devstack 运行 ./stack.sh
步骤 1.3:devstack 完成后,手动覆盖关键的 neutron 配置文件。我就是这样做的。我相信有一种方法可以直接在 local.conf 文件中进行配置。我手动修改以下文件 /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/l3_agent.ini /etc/neutron/dhcp_agent.ini /etc/neutron/dnsmasq-neutron.conf
/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2] tenant_network_types = vxlan extension_drivers = port_security type_drivers = local,flat,vlan,gre,vxlan mechanism_drivers = openvswitch,linuxbridge,l2population [ml2_type_flat] flat_networks=public [ml2_type_vxlan] vni_ranges = 8192:100000 [securitygroup] enable_security_group = False enable_ipset = False firewall_driver = neutron.agent.firewall.NoopFirewallDriver [agent] tunnel_types = vxlan l2_population = True arp_responder = True root_helper_daemon = sudo /usr/local/bin/neutron-rootwrap-daemon /etc/neutron/rootwrap.conf root_helper = sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf [ovs] datapath_type = system tunnel_bridge = br-tun bridge_mappings = public:br-ex local_ip = 192.168.2.160
/etc/neutron/l3_agent.ini
[DEFAULT] l3_agent_manager = neutron.agent.l3_agent.L3NATAgentWithStateReport external_network_bridge = br-ex interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver ovs_use_veth = False use_namespaces = True debug = True verbose = True [AGENT] root_helper_daemon = sudo /usr/local/bin/neutron-rootwrap-daemon /etc/neutron/rootwrap.conf root_helper = sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
/etc/neutron/dhcp_agent.ini
[DEFAULT] dhcp_agent_manager = neutron.agent.dhcp_agent.DhcpAgentWithStateReport interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver ovs_use_veth = False use_namespaces = True debug = True verbose = True dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf [AGENT] root_helper_daemon = sudo /usr/local/bin/neutron-rootwrap-daemon /etc/neutron/rootwrap.conf root_helper = sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
/etc/neutron/dnsmasq-neutron.conf
dhcp-option-force=26,1450
步骤 1.4:修改上述文件后,重新启动以下服务 q-svc、q-agt、q-dhcp、q-l3
您的 Host1(控制器+网络+计算)现在已准备好进行多节点操作
步骤 2:准备 H2(计算)
步骤 2.1
H2 的 local.conf
SERVICE_TOKEN=cisco123123 ADMIN_PASSWORD=cisco123123 MYSQL_PASSWORD=cisco123123 RABBIT_PASSWORD=cisco123123 DATABASE_PASSWORD=cisco123123 SERVICE_PASSWORD=$ADMIN_PASSWORD DATABASE_TYPE=mysql HOST_IP=10.145.90.166 SERVICE_HOST=10.145.90.160 SYSLOG=True SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516 MYSQL_HOST=$SERVICE_HOST RABBIT_HOST=$SERVICE_HOST Q_HOST=$SERVICE_HOST GLANCE_HOSTPORT=$SERVICE_HOST:9292 NOVA_VNC_ENABLED=True NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html" VNCSERVER_LISTEN=$HOST_IP VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN LOGFILE=$DEST/logs/stack.sh.log LOGDAYS=2 disable_service tempest RECLONE=no PIP_UPGRADE=False MULTI_HOST=TRUE # Disable Nova Networking disable_service n-net disable_service neutron # Neutron - Networking Service ENABLED_SERVICES=n-cpu,q-agt # Disable security groups Q_USE_SECGROUP=False LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver enable_plugin networking-sfc /opt/stack/networking-sfc
步骤 2.2:从您的 /opt/stack/devstack 运行 ./stack.sh
步骤 2.3:如下覆盖 /etc/neutron/plugins/ml2/ml2_conf.ini
/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2] tenant_network_types = vxlan extension_drivers = port_security type_drivers = local,flat,vlan,gre,vxlan mechanism_drivers = openvswitch,linuxbridge,l2population [ml2_type_vxlan] vni_ranges = 8192:100000 [securitygroup] enable_security_group = True enable_ipset = False #firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver firewall_driver = neutron.agent.firewall.NoopFirewallDriver [agent] tunnel_types = vxlan root_helper_daemon = sudo /usr/local/bin/neutron-rootwrap-daemon /etc/neutron/rootwrap.conf root_helper = sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf l2_population = True arp_responder = True [ovs] datapath_type = system tunnel_bridge = br-tun local_ip = 192.168.2.166
步骤 2.4:修改上述文件后,重新启动 q-agt 服务。
步骤 3:准备 H3(计算),类似于 H2
步骤 4:您的 3 节点多主机设置现在已准备好配置服务链。

