第 4 步:创建路由器
无论是使用 IPv4 还是 IPv6,网络流量都需要在主机与主机之间以及网络与网络之间移动。
每个主机都有一个路由表,它告诉它如何为特定网络路由流量。
路由表条目将列出目标网络、将流量发送出去的接口以及将消息中继到其最终目的地所需的任何中间路由器的 IP 地址。
匹配网络流量目的地的路由表条目用于路由它。
如果两个条目匹配,则使用具有最长前缀的条目。
例如,为了与任何外部子网通信,必须部署路由器。
红帽 Openstack 平台使用基于 SDN 的虚拟路由器提供路由。
与物理路由器类似,基于 SDN 的虚拟路由器要求每个接口有一个子网。
路由器接收的流量使用路由器的默认网关作为下一跳。
默认网关使用虚拟网桥将流量路由到外部网络。
每个路由器都有许多连接到子网的接口和一个连接到网络的网关。
要创建路由器,请在 Horizon 中
导航到项目 -> 网络 -> 路由器
点击“创建路由器”
提供以下详细信息
路由器名称:test-router
管理员状态:UP
外部网络:external_network(选择我们在上面第 3 步中创建的公共网络)
然后点击“创建路由器”
接下来点击路由器名称,例如:“test-router”为我们
它将在“概览”下显示路由器详细信息
导航到“接口”选项卡,然后单击“添加接口”
接下来从“子网”的下拉菜单中选择我们创建的内部网络
我们可以将 IP 地址部分留空,因为我们已启用 DHCP,因此 IP 地址将自动分配给我们。
完成后点击“添加接口”
我们已经完成了我们的网络设置。
OpenStack 云中网络的重要部分是 OVS。
Open vSwitch 不是 OpenStack 项目的一部分。
但是,OVS 用于大多数 OpenStack 云的实现。
它还被集成到许多其他虚拟管理系统中,包括 OpenQRM、OpenNebula 和 oVirt。
Open vSwitch 可以提供对 OpenFlow、GRE、VLAN、VXLAN、NetFlow、sFlow、SPAN、RSPAN 和 LACP 等协议的支持。
它可以在带有中央控制器的分布式配置中运行。
在我的上一篇文章中,我已经分享了使用 packstack 启动控制器和计算设置以及安装 openstack 的步骤。
第 1 部分:在 RHEL 7 上使用 Packstack(计算和控制器节点)安装 Openstack 的分步教程
以下步骤和屏幕截图来自基于 Red Hat 的 Openstack 平台的验证,但这些步骤和命令也适用于运行在任何其他发行版上的开源 Openstack
Open vSwitch 本身由几个组件组成:
- openswitch_mod.ko :该模块在硬件交换机中起到ASIC(专用集成电路)的作用。该模块是流量处理的引擎。
- 守护进程 ovs-vswitchd :守护进程负责数据传输的管理和逻辑。
- 守护进程 ovsdb-server :守护进程用于内部数据库。它还为一个或者多个 Open vSwitch 数据库 (OVSDB) 提供 RPC(远程过程调用)接口。
检查安装的 openvswitch 版本
[root@controller-rhel ~]# ovs-vsctl -V ovs-vsctl (Open vSwitch) 2.5.0 Compiled Aug 2 2015 11:12:47 DB Schema 7.12.1
步骤 2:创建内部网络
现在我们准备好创建将分配给实例的内部网络
登录到控制面板
导航到项目 -> 网络 -> 网络
点击“创建网络”
填写提供的详细信息
网络名称:internal_network 管理员状态:UP 创建子网:选中 点击下一步 子网名称:int_subnet 网络地址:192.168.100.0/24 IP 版本:IPv4 网关 IP : 192.168.100.254 子网详细信息 DHCP 启用:选中 DNS 服务器:10.43.138.12
点击“创建”
所以我们的网络成功创建
步骤 1:在控制器上配置 OVSBridge
OpenStack Neutron 服务及其位置
要进行以下更改,请确保设置中安装了 openvswitch
# rpm -q openvswitch
导航到接口配置文件的路径
[root@controller-rhel ~]# cd /etc/sysconfig/network-scripts/
复制你的eth0的配置如下(接口名称可能因环境而异)
# cp ifcfg-eth0 ifcfg-br-ex
在 ifcfg-br-ex 中进行突出显示的更改
[root@controller-rhel network-scripts]# cat ifcfg-br-ex TYPE="OVSBridge" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" NAME="br-ex" UUID="e20b64ec-fc48-4b21-b60f-e110f5380fc3" DEVICE="br-ex" DEVICETYPE="ovs" ONBOOT="yes" IPADDR="192.168.122.12" PREFIX="24" GATEWAY="192.168.122.1" DNS1="10.43.138.12" NM_CONTROLLED="no"
接下来在 ifcfg-eth0 文件中进行以下更改并删除所有不需要的条目
[root@controller-rhel network-scripts]# cat ifcfg-eth0 TYPE="OVSPort" BOOTPROTO="static" DEFROUTE="yes" IPV6INIT="no" NAME="eth0" UUID="e20b64ec-fc48-4b21-b60f-e110f5380fc3" DEVICE="eth0" DEVICETYPE="ovs" OVS_BRIDGE="br-ex" ONBOOT="yes"
重新启动网络服务
# systemctl restart network
注意:如果网络配置中有一些错误,那么我们可能会在此处断开连接,因此我们可以登录到设置的控制台并对配置文件进行故障排除。
完成验证新配置后,现在必须将 IP 地址分配给“br-ex”设备而不是 eth0
[root@controller-rhel network-scripts]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000 link/ether 52:54:00:59:bb:98 brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:fe59:bb98/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:63:84:f4 brd ff:ff:ff:ff:ff:ff inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:63:84:f4 brd ff:ff:ff:ff:ff:ff 5: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 82:4c:d5:4b:54:32 brd ff:ff:ff:ff:ff:ff 7: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether ba:d0:22:7f:95:4c brd ff:ff:ff:ff:ff:ff 8: br-tun: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 82:91:ea:b4:b6:44 brd ff:ff:ff:ff:ff:ff 9: vxlan_sys_4789: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65470 qdisc noqueue master ovs-system state UNKNOWN qlen 1000 link/ether 26:c7:82:58:f7:4a brd ff:ff:ff:ff:ff:ff inet6 fe80::24c7:82ff:fe58:f74a/64 scope link valid_lft forever preferred_lft forever 10: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN qlen 1000 link/ether 2a:e2:56:f0:f3:4c brd ff:ff:ff:ff:ff:ff inet 192.168.122.12/24 brd 192.168.122.255 scope global br-ex valid_lft forever preferred_lft forever inet6 fe80::28e2:56ff:fef0:f34c/64 scope link valid_lft forever preferred_lft forever
验证网桥连接
[root@controller-rhel ~]# ovs-vsctl show 84045430-57bb-4057-9b6b-d059aaa60c05 Bridge br-int fail_mode: secure Port int-br-ex Interface int-br-ex type: patch options: {peer=phy-br-ex} Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port br-int Interface br-int type: internal Bridge br-tun fail_mode: secure Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port "vxlan-c0a87a0d" Interface "vxlan-c0a87a0d" type: vxlan options: {df_default="true", in_key=flow, local_ip="192.168.122.12", out_key=flow, remote_ip="192.168.122.13"} Port br-tun Interface br-tun type: internal Bridge br-ex fail_mode: standalone Port br-ex Interface br-ex type: internal Port phy-br-ex Interface phy-br-ex type: patch options: {peer=int-br-ex} Port "eth0" Interface "eth0" ovs_version: "2.5.0"
如我们所见,存在三个桥:
- 集成桥(br-int):每个节点上有一个集成桥。此网桥充当虚拟交换机,所有虚拟机的所有虚拟网卡都连接到该交换机。 OVS Neutron 代理自动创建集成桥。集成网桥“br-int”,标记和取消标记源自实例的 VLAN 流量和目的地为实例的流量
- 外部网桥(br-ex):此网桥用于与外部网络互连。在 o
- 隧道桥(br-tun):这个桥是一个类似于 br-int 的虚拟交换机。它连接 GRE 和 VXLAN 隧道端点。隧道桥“br-tun”将集成桥“br-int”接收到的流量转换为 VXLAN 隧道。
这是 neutron-openvswitch-agent 配置文件中的代码示例
[root@controller-rhel ~]# grep -o '^[^#]*' /etc/neutron/plugins/ml2/openvswitch_agent.ini [ovs] integration_bridge = br-int tunnel_bridge = br-tun local_ip =192.168.122.12 bridge_mappings =physnet1:br-ex enable_tunneling=True [agent] polling_interval = 2 tunnel_types =vxlan vxlan_udp_port =4789 l2_population = False arp_responder = False prevent_arp_spoofing = True enable_distributed_routing = False extensions = drop_flows_on_start=False [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
第 3 步:创建外部网络
现在我们需要一个可以用作浮动 IP 的外部网络来连接到实例。
重要说明:确保我们打算使用的外部网络可从主机服务器访问。
对于我的情况,我将使用与我的控制器和计算设置相同的子网,例如:192.168.122.0/24
登录到控制面板
导航到项目 -> 网络 -> 网络
点击“创建网络”
填写提供的详细信息
网络名称:external_network 管理员状态:UP 创建子网:选中 点击下一步 子网名称:ext_subnet 网络地址:192.168.122.0/24 IP 版本:IPv4 网关 IP : 192.168.122.1 子网详细信息 DHCP 启用:选中 DNS 服务器:10.43.138.12
点击“创建”
现在我们的网络已经创建,但目前它只能作为内部网络工作,除非我们明确地将其分配为“外部”
所以导航到管理 - >网络
在这里我们将看到我们创建的可用网络列表,如下所示
接下来选中“外部网络”的复选框,然后单击“编辑网络”
接下来选中如下所示的复选框,使其成为外部网络(公共),然后单击“保存更改”
我们还可以从 CLI 中验证这一点
[root@controller-rhel ~(keystone_admin)]# neutron net-list +--------------------------------------+------------------+-------------------------------------------------------+ | id | name | subnets | +--------------------------------------+------------------+-------------------------------------------------------+ | b85f4695-ac80-426a-9b69-87d0cec277db | external_network | 69f78d46-910c-4fb5-a086-812ff4743ec5 192.168.122.0/24 | | 60be14fb-f28e-40be-a1f7-e09731ce2062 | internal_network | a1d247b9-6db3-43ca-a6af-b2ade51e80bc 192.168.100.0/24 | +--------------------------------------+------------------+-------------------------------------------------------+
获取有关我们创建的网络的更多详细信息
[root@controller-rhel ~(keystone_admin)]# neutron net-show external_network +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | b85f4695-ac80-426a-9b69-87d0cec277db | | mtu | 0 | | name | external_network | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 50 | | router:external | True | | shared | False | | status | ACTIVE | | subnets | 69f78d46-910c-4fb5-a086-812ff4743ec5 | | tenant_id | dbb0e4e20f874acd85cbc7927517390a | +---------------------------+--------------------------------------+
现在的内网信息:
[root@controller-rhel ~(keystone_admin)]# neutron net-show internal_network +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 60be14fb-f28e-40be-a1f7-e09731ce2062 | | mtu | 0 | | name | internal_network | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 80 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | a1d247b9-6db3-43ca-a6af-b2ade51e80bc | | tenant_id | dbb0e4e20f874acd85cbc7927517390a | +---------------------------+--------------------------------------+