1. 项目介绍​Openstack Networking(neutron)管理所有虚拟网络,包括网络基础设施(VNI)和访问层方面的物理网络(PNI)。它允许租户创建高级的虚拟网络拓扑结构,包括的服务有防火墙、负载均衡器、虚拟专用网络(VPNs)。​Networking提供了以下对象的抽象:网络、子网、路由器。每个功能模拟其物理实现:网络包含子网,路由提供不同子网、网络之间的​​路由​​通信。​每一个路由有一个网关连接网络,有很多接口连接子网。子网能够通过路由连接到其他子网的机器上。​任何给定的网络至少要设置一个外部网络。这个网络不仅仅是一个虚拟网络。相反这个网络是用来访问互联网的,因为这个网络仅仅代表外部网络的一部分,这个网络在中的DHCP是禁用的。​除了外部网络,任何网络设置有一个或者多个内部网络。这些软件定义的网络直接连接到云主机。然后虚拟机所在子网连接到一个​​路由器​​的接口上,该路由器的另一个接口连接到外部网络,这样云主机就可以直接连接到网络了。外部网络访问云主机,则需要把外部IP绑定到云主机。​Networking也支持安全组,安全组通过管理员来定义防火墙规则。一台云主机可以属于一个或者多个安全组。​Networking的每个插件都有它自己的概念。虽然操作Networking不是至关重要的,但是理解这些概念可以帮助你建立Networking。所有网络的安装使用一个核心插件和一个安全组插件;此外,Firewall-as-a-service(FWaaS)和Load-balancing-as-aservice(LBaaS)插件是可选用的。​
  2. 服务组件​neutron-server 是 OpenStack Networking 服务器的主要流程。它是一个 Python 后台进程,将用户请求从 OpenStack Networking API 中继到配置的插件中。OpenStack Networking 还包含 3 个代理,它们通过消息队列或标准 OpenStack Networking API 与主要 Neutron 进程交互:​neutron-dhcp-agent 用于创建和管理虚拟DHCP Server,向所有租户网络提供动态主机配置协议 (Dynamic Host Configuration Protocol, DHCP) 服务。​neutron-l3-agent 用于创建和管理虚拟路由器,执行 L3/网络地址转换 (Network Address Translation) 转发,以支持外部网络访问租户网络上的 VM。​ neutron-openvswitch-agent 用于创建虚拟的二层switch,在每个虚拟机管理程序上执行本地虚拟交换机配置。​Neutron插件架构目前已有很多不同功能和性能参数的插件,而且插件数量仍在增长。目前包含以下插件:​Openvswitch , linux bridge , NEC openflow​Neutron API 向用户和其他服务公开虚拟网络服务接口,但这些网络服务的实际实现位于一个插件中,插件向租户和地址管理等其他服务提供了隔离的虚拟网络。任何人都应该能够通过 Internet 访问 API 网络,而且该网络实际上可能是外部网络的一个子网。前面已经提到过,Neutron API 公开了一个网络连接模型,其中包含网络、子网和端口,但它并不实际执行工作。Neutron 插件负责与底层基础架构交互,以便依据逻辑模型而传送流量。​
  3. 网络服务的原理​Neutron只负责实现网络抽象的API,真正的功能是采用插件来完成的。插件大致分为两类:核心插件(core plugin)和服务插件(service plugin)。​其中核心插件实现了对网络二层和三层的抽象。​二层插件是ML2,ML2中又通过实际的type(local,vlan,gre,vxlan,flat——负责对应类型网络的虚拟化)和Mechanism driver(openvswitch,linux bridge——实际的网络实现机制)来对二层网络进行模拟。​三层插件L3-Agent,和DHCP-Agent来提供虚拟的三层网络服务。​Service plugin则是基于core plugin提供的功能的基础上提供额外的服务,如LBaaS插件提供负载均衡服务、VPNaaS提供VPN服务等。​
  4. 网络服务的搭建先配置控制节点(Controller Node),进行以下操作。
  1. 首先配置网络服务所需要的数据库首先在数据库中创建名为neutron的数据库:

然后授权neutron用户对neutron库拥有完全权限:​

Neutron 网络服务_桥接

  1. 创建keystone认证加载admin的环境变量,source admin-openrc.sh创建keystone认证用户neutron、neutron服务实体,endpoint

Neutron 网络服务_配置文件_02

Neutron 网络服务_配置文件_03

Neutron 网络服务_桥接_04

  1. 安装网络服务软件包
  2. 修改neutron的配置文件/etc/neutron/neutron.confa、首先连接数据库:

b、配置消息队列​

Neutron 网络服务_桥接_05

Neutron 网络服务_子网_06

  1. 创建keystone认证:​

Neutron 网络服务_子网_07

Neutron 网络服务_桥接_08

d、在默认域中,添加ML2插件,路由服务以及允许IP重叠:​

Neutron 网络服务_配置文件_09

e、在默认区域中,配置计算节点的网络通知和计算节点的endpoint​

Neutron 网络服务_子网_10

Neutron 网络服务_配置文件_11

  1. 修改ML2插件的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
  1. 在ml2域中,设置租户网络类型为GRE
  2. 在ml2_type_gre区域,设置tunnel的ID范围
  3. 在安全组区域,开启安全组并指定驱动类型
  4. 在默认域中配置APIS和驱动

Neutron 网络服务_桥接_12

Neutron 网络服务_桥接_13

Neutron 网络服务_配置文件_14

  1. 在neutron域配置访问参数​
  1. 配置计算服务的配置文件/etc/nova/nova.conf​

Neutron 网络服务_桥接_15

添加ml2插件的链接文件到/etc/neutron/plugin.ini​

Neutron 网络服务_桥接_16

填充neutron的数据库​

Neutron 网络服务_桥接_17

重启openstack-nova-api、openstack-nova-scheduler、openstack-nova-conductor​

Neutron 网络服务_配置文件_18

启动neutron服务并开机自启:​

Neutron 网络服务_子网_19

7、服务的验证​

首先加载admin的环境变量source admin-openrc.sh​

Neutron 网络服务_桥接_20

到此,控制节点的网络服务配置完毕。​

接下来配置网络节点(Network Node),进行以下操作。因为当前环境只有2台虚拟机,所以network和controller node部署在同一台上。​

在开始配置安装之前,首先修改节点的内核参数/etc/sysctl.conf​

net.ipv4.ip_forward=1​

net.ipv4.conf.all.rp_filter=0​

net.ipv4.conf.default.rp_filter=0​

然后刷新内核参数sysctl -p​

  1. 安装网络节点的软件包
  2. 修改neutron的 配置文件/etc/neutron/neutron.confa、配置消息队列

Neutron 网络服务_桥接_21

b、配置keystone认证:​

Neutron 网络服务_配置文件_22

Neutron 网络服务_桥接_23

c、在默认域中,添加ML2插件,路由服务以及允许IP重叠:​

Neutron 网络服务_子网_24

  1. 修改ML2插件的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini​

a、在[ml2]区域,修改租户网络类型为GRE​

Neutron 网络服务_桥接_25

b、在[ml2_type_flat]中,配置flat_network​

Neutron 网络服务_配置文件_26

c、在[ml2_type_gre]中,配置tunnel的ID范围​

Neutron 网络服务_桥接_27

d、在安全组区域,配置安全组,防火墙驱动等​

Neutron 网络服务_子网_28

e、在[ovs]区域,配置tunnel网络IP和桥接网络(默认没有需要手动添加)​

Neutron 网络服务_子网_29

f、在[agent]区域,配置tunnel的类型为GRE(默认没有需要添加)​

Neutron 网络服务_配置文件_30

4、修改L3的配置文件/etc/neutron/l3_agent.ini​

a、在默认区域配置接口驱动,外部网桥

Neutron 网络服务_桥接_31

5、修改DHCP的配置文件/etc/neutron/dhcp_agent.ini​

a、在默认区域配置接口驱动和DHCP驱动​

Neutron 网络服务_子网_32

6、(可选)​

修改/etc/neutron/dhcp_agent.ini​

在[default]中,​

Neutron 网络服务_桥接_33

创建并修改/etc/neutron/dnsmasq-neutron.conf​

Dhcp-option-force=26,1454​

然后杀死所有已经存在的dnsmasq​

pkill dnsmasq​

7、配置metadata agent的配置文件/etc/neutron/metadata_agent.ini​

a、在默认区域中,配置认证参数​

Neutron 网络服务_桥接_34

b、配置元数据主机和通信密码​

Neutron 网络服务_配置文件_35

8、配置控制节点的/etc/nova/nova.conf下的元数据代理和通信密码​

Neutron 网络服务_桥接_36

然后在controller节点上重启openstack-nova-api服务​

Neutron 网络服务_桥接_37

启动openvswitch并开机自启​

Neutron 网络服务_桥接_38

9、添加桥接网络br-ex,在本例中桥接控制节点的10.20.0.2,也就是与外部桥接的网卡。​

ifcfg-br-ex​

Neutron 网络服务_配置文件_39

ifcfg-enp0s8​

Neutron 网络服务_子网_40

然后添加外网网桥br-ex​

ovs-vsctl add-br br-ex​

添加连接外网的网桥端口​

ovs-vsctl add-port br-ex enp0s8​

然后重启network服务。​

Neutron 网络服务_桥接_41

注:有时候桥接完网络需要禁用generic receive offload​

ethtool –K interface_name gro off​

10、完成最后的操作​

链接ml2的配置文件到/etc/neutron/pugin.ini​

Neutron 网络服务_子网_42

由于安装包的bug,还需要将neutron-openvswitch-agent中的路径修改​

Neutron 网络服务_桥接_43

启动服务并开机自启​

Neutron 网络服务_配置文件_44

Neutron 网络服务_桥接_45

注:不要手动启动neutron-ovs-cleanup服务,启动完后查看以下neutron-openvswitch-agent的服务状态,因为这个服务容易出问题,出现问题后检查各个配置文件。配置完成后可以看见br-tun和br-int的网桥​

Neutron 网络服务_配置文件_46

11、验证配置​

首先加载admin的环境变量source admin-openrc.sh​

然后查看agent列表​

Neutron 网络服务_配置文件_47

接下来配置compute节点,compute节点控制实例的连通性和安全组​

首先修改内核参数​

net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1​

刷新内核sysctl –p​

1、安装网络服务的软件包​

Neutron 网络服务_配置文件_48

2、修改neutron的配置文件/etc/neutron/neutron.conf​

a、配置消息队列​

Neutron 网络服务_子网_49

Neutron 网络服务_桥接_50

b、配置keystone授权​

Neutron 网络服务_桥接_51

Neutron 网络服务_配置文件_52

c、在默认域中,添加ML2插件,路由服务以及允许IP重叠​

Neutron 网络服务_桥接_53

3、配置ML2插件的配置文件/etc/neutron/pugins/ml2/ml2_conf.ini​

a、在[ml2]区域,修改租户网络类型为GRE​

Neutron 网络服务_配置文件_54

b、在[ml2_type_gre]中,配置tunnel的ID范围​

Neutron 网络服务_配置文件_55

c、在安全组区域,配置安全组,防火墙驱动等​

Neutron 网络服务_子网_56

d、在[ovs]区域中,指定本机的tunnel网络的IP​

Neutron 网络服务_桥接_57

e、在[agent]域中,配置tunnel的类型为GRE​

Neutron 网络服务_子网_58

启动openvswitch服务并开机自启​

Neutron 网络服务_桥接_59

4、配置计算服务的配置文件/etc/nova/nova.conf​

a、在默认区域设置APIs和驱动​

Neutron 网络服务_配置文件_60

Neutron 网络服务_桥接_61

Neutron 网络服务_子网_62

Neutron 网络服务_桥接_63

b、在[neutron]区域,配置认证参数​

Neutron 网络服务_子网_64

完成配置:​

创建ml2插件的配置文件到/etc/neutron/pugin.ini​

Neutron 网络服务_子网_65

修改neutron-openvswitch-agent中的路径​

Neutron 网络服务_配置文件_66

重启启动计算服务openstack-nova-compute​

Neutron 网络服务_桥接_67

启动OVS并开机自启​

Neutron 网络服务_子网_68

启动后查看网卡​

Neutron 网络服务_子网_69

5、验证配置(在controller节点上操作)​

首先加载admin的环境变量source admin-openrc.sh​

查看agent列表​

Neutron 网络服务_配置文件_70

五、初始化网络(在控制节点上操作)​

1、创建外部网络​

首先加载admin的环境变量source admin-openrc.sh​

建立外部网络ext-net​

Neutron 网络服务_子网_71

建立外部网络的子网(用于设置实例对外的网段,需要与桥接网络在同一网段,且网关指定为虚拟机桥接的IP)​

Neutron 网络服务_桥接_72

2、创建租户网络​

首先加载demo用户的环境变量source demo-openrc.sh​

建立租户网络demo-net​

Neutron 网络服务_子网_73

建立租户网络的子网​

Neutron 网络服务_桥接_74

3、配置虚拟路由​

创建虚拟路由​

Neutron 网络服务_子网_75

添加租户的子网到虚拟路由​

Neutron 网络服务_配置文件_76

添加外部网关到虚拟路由​

Neutron 网络服务_子网_77

六、网络服务的验证​

在控制节点ping虚拟网络的外网网关:​

Neutron 网络服务_配置文件_78

到此neutron服务搭建完毕。​