专业网站制作定制,创意设计是什么意思,微商营销技巧,怎样做免费网站会员1.Neutron的介绍 Neutron 为整个 OpenStack 环境提供网络支持#xff0c;包括二层交换#xff0c;三层路由#xff0c;负载均衡#xff0c;防火墙和 *** 等。Neutron 提供了一个灵活的框架#xff0c;通过配置#xff0c;无论是开源还是商业软件都可以被用来实现这些功能… 1.Neutron的介绍 Neutron 为整个 OpenStack 环境提供网络支持包括二层交换三层路由负载均衡防火墙和 *** 等。Neutron 提供了一个灵活的框架通过配置无论是开源还是商业软件都可以被用来实现这些功能。Openstack的设计理念是把所有的组件当做服务来注册的。 Neutron就是网络服务。它将网络、子网、端口和路由器抽象化之后启动的虚拟主机就可以连接到这个虚拟网络上最大的好处是这些都可视化的在Horizon里得到了实现部署或者改变一个SDN变得非常简单。我们先通过如下一个简单的流程来了解客户机如何连接到网络上 租户创建了一个网络比方说net租户为此网络分配一个子网比如192.168.56.0/24租户启动一个客户机并指明一个网口连接到netNova通知Neutron并在net上创建一个端口如port1Neutron选择并分配一个IP给port1客户机通过port1就连接到了net上 2.Neutron的架构 与 OpenStack 的其他服务的设计思路一样Neutron 也是采用分布式架构由多个组件子服务共同对外提供网络服务。 Neutron 由如下组件构成 Neutron Server 对外提供 OpenStack 网络 API接收请求并调用 Plugin 处理请求。 Plugin处理 Neutron Server 发来的请求维护 OpenStack 逻辑网络的状态 并调用 Agent 处理请求。 Agent 处理 Plugin 的请求负责在 network provider 上真正实现各种网络功能。 network provider 提供网络服务的虚拟或物理网络设备例如 Linux BridgeOpen vSwitch 或者其他支持 Neutron 的物理交换机。 Queue Neutron ServerPlugin 和 Agent 之间通过 Messaging Queue 通信和调用。 Database 存放 OpenStack 的网络状态信息包括 Network, Subnet, Port, Router 等。 案例理解内容以创建一个 VLAN100 的 network 为例假设 network provider 是 linux bridge 流程如下 ①Neutron Server 接收到创建 network 的请求通过 Message QueueRabbitMQ通知已注册的 Linux Bridge Plugin。 ②Plugin 将要创建的 network 的信息例如名称、VLAN ID等保存到数据库中并通过 Message Queue 通知运行在各节点上的 Agent。 ③Agent 收到消息后会在节点上的物理网卡比如 eth0上创建 VLAN 设备比如 eth0.100并创建 bridge 比如 brqXXX 桥接 VLAN 设备。 3.flat network原理 flat network 是不带 tag 的网络要求宿主机的物理网卡直接与 linux bridge 连接这意味着 每个 flat network 都会独占一个物理网卡。 上图中 eth1 桥接到 brqXXX为云主机提供 flat 网络。 如果需要创建多个 flat network就得准备多个物理网卡如下图所示。 4.neutron服务的部署与测试 1编辑配置neutron.conf 编辑/etc/neutron/neutron.conf 文件并完成如下操作
在 [database] 部分配置数据库访问[database]
...
connection mysqlpymysql://neutron:neutron192.168.56.11/neutron
在[DEFAULT]部分启用ML2插件并禁用其他插件[DEFAULT]
...
core_plugin ml2
service_plugins
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分配置认证服务访问[DEFAULT]
...
auth_strategy keystone[keystone_authtoken]
...
auth_uri http://192.168.56.11:5000
auth_url http://192.168.56.11:35357
memcached_servers 192.168.56.11:11211
auth_type password
project_domain_name default
user_domain_name default
project_name service
username neutron
password neutron
在[DEFAULT]部分配置RabbitMQ消息队列访问权限[DEFAULT]
...
transport_url rabbit://openstack:openstack192.168.56.11
在[DEFAULT]和[nova]部分配置网络服务来通知计算节点的网络拓扑变化[DEFAULT]
...
notify_nova_on_port_status_changes True
notify_nova_on_port_data_changes True[nova]
...
auth_url http://192.168.56.11:35357
auth_type password
project_domain_name default
user_domain_name default
region_name RegionOne
project_name service
username nova
password nova
在 [oslo_concurrency] 部分配置锁路径[oslo_concurrency]
...
lock_path /var/lib/neutron/tmp查看neutron所有配置项[rootlinux-node1 ~]# grep ^[a-z] /etc/neutron/neutron.conf
auth_strategy keystone
core_plugin ml2
service_plugins
notify_nova_on_port_status_changes true
notify_nova_on_port_data_changes true
transport_url rabbit://openstack:openstack192.168.56.11
connection mysqlpymysql://neutron:neutron192.168.56.11/neutron
auth_uri http://192.168.56.11:5000
auth_url http://192.168.56.11:35357
memcached_servers 192.168.56.11:11211
auth_type password
project_domain_name default
user_domain_name default
project_name service
username neutron
password neutron
auth_url http://192.168.56.11:35357
auth_type password
project_domain_name default
user_domain_name default
region_name RegionOne
project_name service
username nova
password nova
lock_path /var/lib/neutron/tmp 2配置 Modular Layer 2 (ML2) 插件 编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作
在[ml2]部分启用flat和VLAN网络[ml2]
...
type_drivers flat,vlan
在[ml2]部分禁用私有网络[ml2]
...
tenant_network_types
在[ml2]部分启用Linuxbridge机制[ml2]
...
mechanism_drivers linuxbridge
在[ml2] 部分启用端口安全扩展驱动[ml2]
...
extension_drivers port_security
在[ml2_type_flat]部分配置公共虚拟网络为flat网络[ml2_type_flat]
...
flat_networks public 指定普通用户创建的网络类型为 public
在 [securitygroup]部分启用 ipset 增加安全组的方便性[securitygroup]
...
enable_ipset True 3配置Linuxbridge代理 编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并且完成以下操作在[linux_bridge]部分将公共虚拟网络和公共物理网络接口对应起来[linux_bridge]
physical_interface_mappings public:eth0 指明 public 网络与物理网卡的对应关系
在[vxlan]部分禁止VXLAN覆盖网络[vxlan]
enable_vxlan False
在 [securitygroup]部分启用安全组并配置 Linux 桥接 iptables 防火墙驱动[securitygroup]
...
enable_security_group True
firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver tips理解此处的public与 eth0 的关系 public是 flat 网络的标识在创建 flat 时需要指定 label标识。label 的名字可以是任意字符串这里创建的标识为public。只要确保各个节点 ml2_conf.ini 中的 label 命名一致就可以了。 各个节点中 label 与物理网卡的对应关系可能不一样。这是因为每个节点可以使用不同的物理网卡将云主机连接到 flat network。 支持多个flat网络如果要创建多个 flat 网络需要定义多个 label用逗号隔开当然也需要用到多个物理网卡如下所示 [ml2_type_flat]
flat_networks flat1,flat2[linux_bridge]
physical_interface_mappings flat1:eth1,flat2:eth2 4配置DHCP代理 编辑/etc/neutron/dhcp_agent.ini文件并完成下面的操作在[DEFAULT]部分配置Linuxbridge驱动接口DHCP驱动并启用隔离元数据这样在公共网络上的实例就可以通过网络来访问元数据[DEFAULT]
...
interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver 使用 linux bridge 连接 DHCP namespace interface。
dhcp_driver neutron.agent.linux.dhcp.Dnsmasq 使用 dnsmasq 实现 DHCP。
enable_isolated_metadata True
当创建 network 并在 subnet 上 enable DHCP 时网络节点上的 DHCP agent 会启动一个 dnsmasq 进程为该 network 提供 DHCP 服务。 5配置元数据代理 编辑/etc/neutron/metadata_agent.ini文件并完成以下操作在[DEFAULT] 部分配置元数据主机以及共享密码[DEFAULT]
...
nova_metadata_ip 192.168.56.11
metadata_proxy_shared_secret nobody 6配置计算服务来使用网络服务 编辑/etc/nova/nova.conf文件并完成以下操作[rootlinux-node1 ~]# vim /etc/nova/nova.conf
在[neutron]部分配置访问参数启用元数据代理并设置密码[neutron]
...
url http://192.168.56.11:9696
auth_url http://192.168.56.11:35357
auth_type password
project_domain_name default
user_domain_name default
region_name RegionOne
project_name service
username neutron
password neutron
service_metadata_proxy True
metadata_proxy_shared_secret nobody 7完成安装 ①网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。如果超链接不存在使用下面的命令创建它[rootlinux-node1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
②同步数据库[rootlinux-node1 ~]# su -s /bin/sh -c neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head neutron
③重启计算API服务[rootlinux-node1 ~]# systemctl restart openstack-nova-api.service
④当系统启动时启动Networking服务并配置它启动[rootlinux-node1 ~]# systemctl enable neutron-server.service \neutron-linuxbridge-agent.service neutron-dhcp-agent.service \neutron-metadata-agent.service
[rootlinux-node1 ~]# systemctl start neutron-server.service \neutron-linuxbridge-agent.service neutron-dhcp-agent.service \neutron-metadata-agent.service 8创建“neutron”服务实体以及API端点 [rootlinux-node1 ~]# openstack service create --name neutron \--description OpenStack Networking network[rootlinux-node1 ~]# openstack endpoint create --region RegionOne \network public http://192.168.56.11:9696[rootlinux-node1 ~]# openstack endpoint create --region RegionOne \network internal http://192.168.56.11:9696[rootlinux-node1 ~]# openstack endpoint create --region RegionOne \network admin http://192.168.56.11:9696[rootlinux-node1 ~]# neutron agent-list 出现图中的3个笑脸代表网络服务的成功了 以下为网络底层变化原理的介绍 5.底层网络的变化 执行 brctl show查看控制节点当前的网络结构。 Neutron 自动新建了public 对应的网桥brqc39c1348-5a以及 dhcp 的 tap 设备tapae04cfac-d0。 另外tapae04cfac-d0 和物理网卡 eth0都已经连接到 bridge。此时flat networkpublic网络结构如图 6.DHCP服务解析 DHCP agent 的配置文件位于 /etc/neutron/dhcp_agent.ini。 dhcp_driver 使用 dnsmasq 实现 DHCP。 interface_driver 使用 linux bridge 连接 DHCP namespace interface。 当创建 network 并在 subnet 上 enable DHCP 时网络节点上的 DHCP agent 会启动一个 dnsmasq 进程为该 network 提供 DHCP 服务。 dnsmasq 是一个提供 DHCP 和 DNS 服务的开源软件。 dnsmasq 与 network 是一对一关系一个 dnsmasq 进程可以为同一 netowrk 中所有 enable 了 DHCP 的 subnet 提供服务。 网络创建完成我们可以在linux-node1上进行查看dnsmasq的进程 dnsmasq 重要的启动参数--dhcp-hostsfile 存放 DHCP host 信息的文件这里的 host 在我们这里实际上就是 instance。 dnsmasq 从该文件获取 host 的 IP 与 MAC 的对应关系。 每个 host 对应一个条目信息来源于 Neutron 数据库。 --interface 指定提供 DHCP 服务的网络接口。 dnsmasq 会在该网络接口上监听云主机的 DHCP 请求 思考从上面可以看到DHCP 的网络接口是tapae04cfac-d0并非是ns-ae04cfac-d0这是怎么一回事Neutron 通过 dnsmasq 提供 DHCP 服务而 dnsmasq 如何独立的为每个 network 服务呢答案是通过 Linux Network Namespace 隔离 每个 dnsmasq 进程都位于独立的 namespace, 命名为 qdhcp-\network id [rootlinux-node1 ~]# neutron net-list
----------------------------------------------------------------------------------------------------
| id | name | subnets |
----------------------------------------------------------------------------------------------------
| c39c1348-5a8f-4291-9772-b03a22b085df | public | df82f43f-97fe-41d0-bdbd-933565102598 192.168.56.0/24 |
----------------------------------------------------------------------------------------------------[rootlinux-node1 ~]# ip netns list
qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df (id: 0)ip netns list 命令列出所有的 namespace。
qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df就是public的namespace 其实宿主机本身也有一个 namespace叫 root namespace拥有所有物理和虚拟 interface device。 物理 interface 只能位于 root namespace。 新创建的 namespace 默认只有一个 loopback device。 管理员可以将虚拟 interface例如 bridgetap 等设备添加到某个 namespace。 对于 public的 DHCP 设备tapae04cfac-d0需要将其放到 namespaceqdhcp-c39c1348-5a8f-4291-9772-b03a22b085df 中但这样会带来一个问题 tapae04cfac-d0 将无法直接与 root namespace 中的 bridge 设备brqc39c1348-5a连接。 Neutron 使用 veth pair 解决了这个问题。 veth pair 是一种成对出现的特殊网络设备它们象一根虚拟的网线可用于连接两个 namespace。向 veth pair 一端输入数据在另一端就能读到此数据。 tapae04cfac-d0与ns-ae04cfac-d0 就是一对 veth pair它们将 qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df 连接到brqc39c1348-5a。如下图所示 转载于:https://www.cnblogs.com/linuxk/p/9454972.html