云技术社区

必须了解的4种OpenStack Neutron网络

Posted on 2020-02-02

Neutron网络、子网和路由器
现在,我们已经准备好开始创建网络。以下系列命令将创建网络、子网、路由器、安全组规则、实例和浮动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。注意,我们正在切换到这些网络的“演示”项目:

. ~/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网络。 其源地址将被SNAT(源网络地址转换)为其浮动IP地址的源地址。这一转换发生在路由器namespace中。 但是,如果该实例没有浮动IP,那么它仍然具有external1网络访问权限。在这种情况下,路由器将源地址SNAT为它自己的公网IP地址的源地址。
入站访问——该实例通过浮动IP地址被外界所了解,路由器1演示将响应ARP请求。 该IP被DNAT(目的网络地址转换)为路由器namespace中的本地IP地址的目的地址。
注意:要看到这些NATing规则,从路由器namespace中转储它们:

. ~/keystonerc_demo

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

租户网络访问:此实例与private1演示网络上的任何其他实例位于相同的广播域中。 因为vxlan overlay网络抽象底层的物理网络,所以这个广播域扩展到托管这些实例的计算节点。

从Horizon控制台查看网络拓扑

. ~/keystonerc_admin

echo $OS_AUTH_URL

echo $OS_USERNAME

echo $OS_PASSWORD

将浏览器指向上面的URL。 用OS_USERNAME和OS_PASSWORD从〜/ keystonerc_admin登录。 从“Project”选项卡中选择“demo”项目(你需要添加管理员作为演示项目的成员)。然后选择“Network/Network Topology扑”,你将看到创建的网络;一定要尝试这两个视图——拓扑和图形。在尝试了解正在做的事情时,请保留这两个视图。

共享租户网络
可以使用“--shared”属性创建租户网络,允许其他租户将自己的实例附加到该网络。默认情况下,只有管理员可以创建一个共享的租户网络,但其他租户也可以使用RBAC来实现( 请参阅基于角色的网络访问控制Network/Network Topology)。当两个或多个项目具有受益于相同广播域的实例时,这种类型的网络可能是有用的,并因此绕过了共享浮动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 

现在,在管理员项目中,在共享租户网络上创建一个实例:

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

你刚刚做了什么? 如果你使用Horizon中的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,或使用共享私有网络来免除痛苦。通过了解用例,你可以为自己和/或客户选择正确的网络类型。

Posted in OpenStack 网络
咨询热线:400-100-3070

北京易捷思达科技发展有限公司:北京市海淀区西北旺东路10号院东区1号楼1层107-2号

南京子公司:江苏省南京市雨花台区软件大道168号润和创智中心B栋一楼西101

上海office:上海黄浦区西藏中路336号华旭大厦22楼2204

郑州分公司:河南省郑州市中原区西三环路大学科技园东区14号楼3层北户301

成都分公司:成都市高新区199号天府三街太平洋保险金融大厦A区8楼


邮编:100094


邮箱:

contact@easystack.cn (业务咨询)

partners@easystack.cn(合作伙伴咨询)

marketing@easystack.cn (市场合作)

training@easystack.cn (培训咨询)

hr@easystack.cn(招聘咨询)

Copyright © 2017 EasyStack Inc. All Rights Reserved. 京ICP备16000234号-1 京公网安备 11010802024994号