您必须了解的4种OpenStack Neutron网络类型

如果您托管的OpenStack虚拟实例需要网络连接,则必须创建一个网络。 有多种类型的网络,为了做出正确的选择,您至少需要了解两个非常重要的网络属性:“ router:external”和“ shared”。 除非您知道这些属性及其组合的含义,否则很难做出最佳的网络选择。

在本文中,我们将解释这些属性指示的四种网络类型以及如何配置它们,并简要解释一些典型的用例。 其中一些练习适用于租户,而其他练习仅适用于管理员。 给出了在KVM托管的Red Hat或RDO多合一 OpenStack实例上完成该练习的示例。 这已经在Red Hat OpenStack Platform 8、9、10以及RDO Mitaka和Newton上进行了测试。

四种类型的解释

下表概述了我们要创建的网络类型及其名称。

router-external 共享 网络类型 在这个练习中的名字 描述
false vxlan private1-demo 典型的租户网络,仅可由租户成员使用。 通常为叠加层(vxlan,gre)。
false 真正 vxlan admin1共用 可以由多个租户与RBAC共享使用权。 通常为叠加层(vxlan,gre)。
true 平面 外部1 典型的外部网络,范围是所有租户。 只能由管理员创建。 租户连接其路由器以进行外部访问。 通常为“扁平”或“ VLAN”网络。
true 真正 平面 外部2共享 范围是所有租户。 只能由管理员创建。 租户可以直接连接到它。 通常称为“提供者”网络,为“扁平”或“ VLAN”。

逻辑网络拓扑

您必须了解的4种OpenStack Neutron网络类型_第1张图片

OpenStack多合一构建

多实例实例方便理解不需要单独角色的新概念。 故障排除和配置已大大简化,这就是我们将在示例中使用的内容。 如果您有Red Hat订阅,则可以按照以下说明进行操作 。 您还可以注册进行60天的Red Hat OpenStack Platform评估。

对于RDO实例,请转到此处以获取快速安装指南,并确保在此页面上启用其他存储库。

当您的packstack构建完成时,以root用户身份登录并运行以下命令以验证您的OpenStack部署是否正常工作:



   
     
     
     
     
. ./keystonerc_admin
openstack catalog list
neutron agent-list
nova service-list
nova boot --flavor m1.tiny --image cirros --nic net-name=private admin01

一旦建立了OpenStack的运行状况,请删除刚刚创建的虚拟实例以及由packstack安装创建的“公共”和“私有”网络(及其子网)以及“ router1”。

KVM主机配置

此练习的KVM主机将具有三个网络:

Linux bridge name KVM网络名称, VM nic 目的
virbr0 默认值eth0 直接访问OpenStack虚拟主机。
virbr1 外部1,eth1 通过SNAT或浮动IP对实例进行外部访问。
virbr2 外部2,eth2 竖立外部访问。

您的KVM主机可能已经在eth0上带有带有网桥virbr0的默认网络。 我们将定义然后创建其他两个外部网络。 确保以root身份执行此操作:



   
     
     
     
     
cat > /tmp/external1.xml << EOF

 external1
 
   
     
   

 

 
 
 
 


EOF

cat > /tmp/external2.xml << EOF

 external2
 
   
     
   

 

 
 
 
 


EOF

现在创建这些网络并启动它们:



   
     
     
     
     
virsh net-define /tmp/external1.xml; virsh net-define /tmp/external2.xml
virsh net-autostart external1; virsh net-autostart external2
virsh net-start external1; virsh net-start external2

现在,将VNIC添加到每个外部网络的OpenStack多合一实例中。 从KVM主机执行此操作:



   
     
     
     
     
dom=
virsh attach-interface --domain $dom --type network --source external1 --model virtio --config --live
virsh attach-interface --domain $dom --type network --source external2 --model virtio --config --live  

验证KVM主机



   
     
     
     
     
$ virsh net-list
Name              State   Autostart Persistent
----------------------------------------------------------
default           active yes        yes
external1         active yes        yes
external2         active yes        yes

$ brctl show
bridge name    bridge id    STP enabled    interfaces
virbr0    8000.525400ce5983    yes    virbr0-nic
virbr1    8000.52540073a08e    yes    virbr1-nic
virbr2    8000.52540061988c    yes    virbr2-nic
 
$ route
Kernel IP routing table
Destination  Gateway      Genmask      Flags Metric Ref Use Iface
172.16.0.0   0.0.0.0      255.255.255.192 U 0   0     0 virbr1
172.16.0.64  0.0.0.0      255.255.255.192 U 0   0     0 virbr2
192.168.122.0  0.0.0.0            255.255.255.0     U      0          0          0 virbr0

OpenStack多合一配置

我们需要对packstack交付的Neutron配置进行一些更改,以删除单个Linux网桥“ br-ex”,并重新添加新的网桥br-ex和br-ex2以及将连接到其上的扁平网络:



   
     
     
     
     
yum install crudini -y
crudini --set /etc/neutron/l3_agent.ini DEFAULT external_network_bridge #blank this
crudini --set /etc/neutron/l3_agent.ini DEFAULT gateway_external_network_id  #blank this
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers  vxlan,flat
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 network_vlan_ranges physnet1,physnet2
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings physnet1:br-ex,physnet2:br-ex2

请注意,使用“扁平”网络时,您要如何称呼network_vlan_ranges取决于您。 创建外部网络时,它们将是“ --provider:physical_network”名称。 您也可以选择外部网桥名称(br-ex *)。

现在,为Open vSwitch创建接口配置:



   
     
     
     
     
cat >  /etc/sysconfig/network-scripts/ifcfg-br-ex << EOF
DEVICE=br-ex
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.192
EOF

cat >  /etc/sysconfig/network-scripts/ifcfg-eth1 << EOF
DEVICE=eth1
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
BOOTPROTO=none
EOF

cat >  /etc/sysconfig/network-scripts/ifcfg-br-ex2 << EOF
DEVICE=br-ex2
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=172.16.0.65
NETMASK=255.255.255.192
EOF

cat >  /etc/sysconfig/network-scripts/ifcfg-eth2 << EOF
DEVICE=eth2
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex2
BOOTPROTO=none
EOF

验证Open vSwitch外部网桥

完成这些配置步骤后,您将需要重新引导虚拟主机。 重新启动后,创建的网桥应如下所示:



   
     
     
     
     
ovs-vsctl list-ports br-ex

eth1
phy-br-ex

ovs-vsctl list-ports br-ex2

eth2
phy-br-ex2

中子网络,子网和路由器

最后,我们准备好开始业务并创建我们一直在谈论的网络。 以下一系列命令将创建网络,子网,路由器,安全组规则,实例和浮动IP。 完成后,您将可以使用四种不同类型的网络。

外部网络

以下系列创建了我们的外部网络。 请注意,两个网络都使用“ router:external = true”,并且都使用“ network_type = flat”,但是每个网络都位于不同的physical_network上,第二个网络具有“ --shared”属性:



   
     
     
     
     
. ~/keystonerc_admin
neutron net-create external1  --router:external=True  --provider:network_type=flat  --provider:physical_network=physnet1

neutron subnet-create --name external1-subnet --disable-dhcp external1 172.16.0.0/26 --allocation-pool start=172.16.0.2,end=172.16.0.62

neutron net-create external2-shared --shared --router:external=True --provider:network_type=flat --provider:physical_network=physnet2  

neutron subnet-create external2-shared --name external2-shared-subnet --allocation-pool\
 start=172.16.0.66,end=172.16.0.126  --gateway 172.16.0.65 172.16.0.64/26

租户网络和路由器

租户网络是您可以在其中创建自己的私有rfc 1918地址空间的地方。 租户可以预配置网络,子网和路由器的任意组合,以满足其需求。 他们可以定义自己的广播域,并确定可以通过浮动IP地址从外部访问哪些实例。

以下内容将创建专用或“租户”网络和子网。 它还创建了一个路由器,将其连接到外部网络external1。请注意,我们正在切换到这些网络的'demo'项目:



   
     
     
     
     
. ~/keystonerc_demo
neutron net-create private1-demo

neutron subnet-create private1-demo 10.0.1.0/24 --name private1-demo-subnet    

请注意,默认情况下使用以下内容创建了该网络:



   
     
     
     
     
neutron net-show -c 'router:external' -c shared private1-demo
+-----------------+-------+
| Field           | Value |
+-----------------+-------+
| router:external | False |
| shared          | False |
+-----------------+-------+

neutron router-create router1-demo

neutron router-gateway-set router1-demo external1

neutron router-interface-add router1-demo private1-demo-subnet

路由器网关应该可ping通。 执行此命令并ping它返回的网关IP:


neutron router-list -c external_gateway_info | grep -o "172.16.0.[0-9]*" 

安全组规则,虚拟实例和浮动IP

在创建虚拟实例之前,让我们在默认安全组中打开ICMP和SSH的端口,以便我们能够连接到它们:



   
     
     
     
     
. ~/keystonerc_demo
neutron security-group-rule-create --direction ingress \
   --ethertype IPv4 --protocol tcp --port-range-min 22 \
   --port-range-max 22 default

neutron security-group-rule-create --direction ingress \
   --ethertype IPv4 --protocol icmp default

nova boot --flavor m1.tiny --image cirros --nic\
 net-id=$(neutron net-show private1-demo -c id -f value) demo01-private1

nova floating-ip-create external1

nova floating-ip-associate demo01-private1 $(neutron floatingip-list -c floating_ip_address -f value)

nova list  #the floating IP should be pingable and you should be able to ssh to this instance through it.

你刚才做了什么? 您创建了具有以下特征的外部网络和私有租户网络上的实例:

出站访问:此实例可以通过其路由器(router1-demo)访问external1网络。 其源地址将为其浮动IP地址的源地址“ SNAT ed”。 “ SNATing”发生在路由器名称空间中。 但是,如果该实例没有浮动IP,则它仍将具有external1网络访问权限。 在这种情况下,路由器会将源地址SNAT为其自己的公用IP地址。

入站访问:此实例通过其浮动IP地址为外界所知,router1-demo将响应该实例的ARP请求。 该IP是路由器名称空间中的本地IP地址的DNAT 。

注意:要查看这些NATing规则将其从路由器名称空间中转储出来:



   
     
     
     
     
. ~/keystonerc_demo
ip netns exec qrouter-$(neutron router-show router1-demo -c id -f value) iptables -S -t nat

租户网络访问:此实例与private1-demo网络上的任何其他实例在同一广播域中。 因为vxlan覆盖网络抽象了基础物理网络,所以此广播域跨托管这些实例的计算节点扩展。

从Horizo​​n控制台查看网络拓扑



   
     
     
     
     
. ~/keystonerc_admin
echo $OS_AUTH_URL
echo $OS_USERNAME
echo $OS_PASSWORD

将浏览器指向上面的URL。 从〜/ keystonerc_admin使用OS_USERNAME和OS_PASSWORD登录。 从“项目”选项卡中选择“演示”项目(您需要首先将admin添加为演示项目的成员)。 现在选择“网络/网络拓扑”。 在这里,您将看到我们创建的网络; 请务必尝试两个视图-拓扑和图形。 当我们试图了解我们在做什么时,请将此视图摆在您面前。

共享租户网络

可以使用“ --shared”属性创建一个租户网络,该属性允许其他租户将自己的实例附加到该网络。 默认情况下,只有管理员租户可以创建共享租户网络,但其他租户也可以使用RBAC来创建共享租户网络。 请参阅网络的基于角色的访问控制 。 当两个或多个项目的实例受益于相同的广播域,从而避免了与浮动IP地址共享的需要时,这种类型的网络可能会很有用。



   
     
     
     
     
. ~/keystonerc_admin
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 #allow icmp through default security group

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 #allow ssh through default security group

neutron net-create --shared --router:external=false admin1-shared

neutron subnet-create admin1-shared 10.0.9.0/24 --name admin1-shared-subnet  

现在,从admin项目在共享租户网络上创建一个实例:



   
     
     
     
     
nova boot --flavor m1.tiny --image cirros --nic\
 net-id=$(neutron net-show admin1-shared -c id -f value) admin01-admin1-shared

现在,通过演示项目在共享租户网络上创建一个实例:



   
     
     
     
     
. ~/keystonerc_demo
nova boot --flavor m1.tiny --image cirros --nic\
 net-id=$(neutron net-show admin1-shared -c id -f value) demo02-admin1-shared

你刚才做了什么? 如果使用Horizo​​n中的instance / console选项登录到这些实例中的任何一个,则即使它们位于不同的项目中,也会注意到它们位于同一子网中。 这种类型的网络对于在项目之间共享实例很有用。 这样做的唯一其他选择是使用浮动IP。 默认情况下,任何租户都可以查看并加入共享网络(admin1共享)。 请注意,除非您添加路由器并将网关设置为external1,否则无法从该网络访问外部网络。

共享的外部网络

在共享的外部网络上,租户可以将其实例直接连接到外部网络,并获得自动分配的浮动IP地址。 我们将使用上面已经创建的external2共享网络。



   
     
     
     
     
. ~/keystonerc_demo
nova boot --flavor m1.tiny --image cirros --nic net-name=external2-shared demo03-external2-shared

nova console-log demo03-external2-shared

您可能会从控制台日志输出中注意到实例未能与元数据服务联系:



   
     
     
     
     
checking http://169.254.169.254/2009-04-04/instance-id
failed 1/20: up 3.03. request failed
failed 2/20: up 8.09. request failed
failed 3/20: up 11.09. request failed
etc…

您可能可以ping通该实例,但是如果您希望external2共享上的实例可以访问元数据服务,则可以在/etc/neutron/dhcp_agent.ini中进行设置:



   
     
     
     
     
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True

systemctl restart neutron-dhcp-agent

这是必需的,因为您没有通过路由器连接到该网络,通常这是元数据服务访问的来源。 现在重新启动实例,并再次检查控制台日志:



   
     
     
     
     
nova reboot demo03-external2-shared

nova console-log dem03-external2-shared

现在,您应该在日志中看到以下内容:



   
     
     
     
     
checking http://169.254.169.254/2009-04-04/instance-id
successful after 1/20 tries: up 2.04. iid=i-000000ef

我们刚刚做了什么? 通过在此共享的外部网络上创建实例,您无需使用路由器进行外部访问。 此外,默认情况下,您获得的金额等于浮动IP。 最后,广播域是外部子网。 因此,无论租户如何,该子网上的任何实例都在同一广播域中,这与我们之前看过的共享租户网络的特征相同。 如果租户仅通过在其专用网络上浮动IP来访问实例,则使用共享的外部网络可能会更好。

为正确的工作使用正确的网络属性

通过了解这四种类型的网络的特性,您将在利用Neutron的灵活性方面有了一个良好的开端。 例如,浮动IP可能成为一种稀缺的IPv4资源。 解决方法是,您可以依赖NAT或使用共享的专用网络来避免麻烦。 通过了解您的用例,您将能够为自己和/或客户选择正确的网络类型。

本文最初是在Red Hat博客上发布的,是Red Hat 技术客户经理 (TAM)系列文章的一部分。

翻译自: https://opensource.com/article/17/4/openstack-neutron-networks

你可能感兴趣的:(网络,java,数据库,vue,分布式,ViewUI)