/etc/neutron/neutron.conf
Nova 虚机获取固定IP (Fixed IP)主要分为两个步骤:
(1)在创建虚机过程中,Neutron 随机生成 MAC 和 从配置数据中分配一个固定IP 地址,并保存到 Dnsmasq 的 hosts 文件中,让 Dnsmasq 做好准备。
(2)虚机在启动时向 Dnsmasq 获取 IP 地址
Neutron 提供 DHCP 服务的组件是 DHCP agent。
DHCP agent 在网络节点运行上,默认通过 dnsmasq 实现 DHCP 功能。
DHCP agent 的配置文件位于 /etc/neutron/dhcp_agent.ini
Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢---------通过 Linux Network Namespace 隔离
每个 namespace 都有自己独立的网络栈,包括 route table,firewall rule,network interface device 等。
Neutron 通过 namespace 为每个 network 提供独立的 DHCP 和路由服务,从而允许租户创建重叠的网络。
如果没有 namespace,网络就不能重叠,这样就失去了很多灵活性。
每个 dnsmasq 进程都位于独立的 namespace, 命名为 qdhcp-
ip netns list ##列出所有的 namespace
ip netns exec <ns_name> <ip(command)> ##在指定的ns中执行命令
sudo ip netns exec qdhcp-794d9da1-70cf-4172-ad51-c4140783c0e5 ip a ##执行得到得tap81dc7eb8-3a网卡得ip;通过ovs-vsctl show | grep tap81dc7eb8-3a也可以找到
ip netns add NAME ##创建一个命名的 network namespace
ip netns delete newns # 删除ns
ip netns exec net1 bash 然后执行ip a 查看当前命名空间的ip ##进入ns
route -n # 查看路由
iptables -nvL # 查看 filter 表防火墙规则
arp -n # 查看 arp 表信息
ifconfig # 查看启用的网卡信息
ip link # 查看网卡信息,不包括 IP 信息
ip addr # 查看网卡信息,包括 IP 信息
控制节点也就是网络节点:
neutron.conf和api-paste.ini的配置与计算节点上是一样的。
dhcp_agent.ini的主要设置以下几项:
nterface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
metadata_agent.ini的设置主要是keystone相关的
配置 Modular Layer 2 (ML2) plug-in
在[DEFAULT]
部分,启用ML2插件并禁用其他插件:
[DEFAULT]
...
core_plugin = ml2
service_plugins = ###没有配置就是禁用其他插件
显示控制节点上有三个网桥 br-ex,br-int 和 br-tun:
-
br-ex:连接外部(external)网络的网桥。
-
br-int:集成(integration)网桥,所有 instance 的虚拟网卡和其他虚拟网络设备都将连接到该网桥。
-
br-tun:隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信。
这些网桥都是 Neutron 自动为我们创建的,但是通过 brctl show 命令却看不到它们。需要使用Open vSwitch 的命令 ovs-vsctl show 查看。
/etc/neutron/plugins/ml2/ml2_conf.ini
插件配置
[ml2]
type_drivers=flat,vlan,gre,vxlan,geneve ##使用flat、vlan、gre
、vxlan和geneve这5个驱动
mechanism_drivers=linuxbridge,openvswitch #使用linuxbridge和openvswich插件来创建网络
tenant_network_types= #禁用私有网络,什么都不写
extension_drivers=port_security #启动端口安全扩展驱动
OVS
ovs-appctl bond/list
##列出所有bond
ovs-appctl bond/show | grep dpdk
##查找dpdk
ovs-appctl bond/show bond_name
###显示bond的简要信息
ovs-ofctl show br-prv | grep dpdk[0-1]|awk -F " addr:" '{print $2"="$1}' |sed -e s/"[0-9]("// -e s/")"://
##查找dpdk mac
sudo ovs-vsctl list-ifaces br_prv
##看指定网桥br_prv下的interface
ovs-vsctl list-ports br0
##列出挂接到网桥br0上的所有网络接口(不包括本地接口)
ovs-vsctl list port s1 s1-eth1
##查看端口配置信息
ovs-vsctl list-br
##列出所有网桥
ovs-vsctl list bridge s1
##列出网桥简要信息
ovs-vsctl br-exists br0
##判断网桥存在不,退出码:成功返回0
ovs-vsctl port-to-br ens33
##列出已挂接ens33网络接口的网桥
sudo ovs-vsctl iface-to-br br_prv
##查看interface属于哪个桥
ovs-vsctl del-port br0 eth0
##删除网桥br0上挂接的eth0网络接口
OVS与Vxlan
使用Openvswitch作为网络驱动之后创建vxlan网络会生成在controller生成三个网桥,分别是:
br-int 连接 Dnsmasq,流表逻辑处理
br-ex 连接网卡,出外网网桥
br-tun 隧道端点
在compute节点生成两中网桥,分别是:
br-int 连接虚拟机
br-tun 隧道端点,连接到controller
安装openswitch:
compute计算节点和controller控制节点都要执行:apt-get install neutron-openvswitch-agent
或者yum -y install neutron-openvswitch-agent
#######/etc/neutron/plugins/ml2/ml2_conf.ini 文件
[ml2]
type_drivers = vlan,flat
tenant_network_types = vlan
mechanism_drivers =openvswitch,sriovnicswitch
extension_drivers = port_security
#######/etc/neutron/plugins/ml2/openvswitch_agent.ini
[ovs]
integration_bridge = br-int
bridge_mappings =physnet2:br-prv
enable_tunneling=False
增加用于外部网络的网桥: ovs-vsctl add-br br-ex
向外部网桥添加物理网卡: ovs-vsctl add-port br-ex ens33
下图为 compute节点的br-int网桥,网桥上挂有两个端点,第一个是与实例有关,第二个连接br-tun:
下图为controller节点的端口信息,第一个为controller上br-int与br-tun的连接;第二个是dhcp的设备;第三个是dashboard中创建的路由器的一端;第四个是br-int与br-ex的连接。
Bridge与Vxlan
安装
vxlan配置:
控制节点:
#####/etc/neutron/plugins/ml2/ml2_conf.ini文件
配置tenant_network_types = vxlan
配置flat外部网络的标签为provider,在创建外部网络时使用
#####/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件
配置物理网卡的映射,通俗讲即指定外网网卡