必须了解的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,或使用共享私有网络来免除痛苦。通过了解用例,你可以为自己和/或客户选择正确的网络类型。
热门文章Top10
- EasyStack位列2018 OpenStack用户调研报告全球前三甲
- 金融云案例:EasyStack助兴业数金构建首个OpenStack金融行业云
- 证券私有云平台实战经验分享:海通证券金融云思考与实践
- 证券私有云案例:做科技型券商,EasyStack助光大证券构建私有云平台
- 江苏农信携手易捷行云,打造业内规模最大的农信开源云平台
- 制造私有云案例:EasyStack超融合助力可口可乐装瓶作业系统稳健升级
- 金融私有云案例| 新一代私有云OTA式赋能台州银行商业创新
- 能源云平台案例:EasyStack助国家电网山东省电力公司构建信息化云平台
- 证券私有云案例:借力EasyStack易捷行云中山证券构建首个OpenStack证券生产云
- 银行金融云平台案例:EasyStack易捷行云助人民银行构建新一代征信系统生产环境云平台