如果你选择网络选项2,你同样可以创建通过layer-3(路由)或者NAT连接到物理网络设施的私有项目虚拟网络。这个网络包括一个DHCP服务器为实例提供IP地址。在这个网络上的实例可以自动连接到外部网络如互联网。不过,从像互联网这样的外部网络访问实例需要配置 floating IP address。
demo 或者其他非特权用户可以创建这个网络,因为它只在 `demo``项目中提供到实例的访问。
警告
在创建私有项目网络前,你必须 create the public provider network 。
注解
下面的说明和框图使用示例IP 地址范围。你必须依据你的实际环境修改它们。
网络选项2:自服务网络-概述
网络选项2:自服务网络-连接
在控制节点上,获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ source demo-openrc.sh
创建网络:
$ neutron net-create private
Created a new network:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| id | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
| mtu | 0 |
| name | private |
| port_security_enabled | True |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | f5b2ccaa75ac413591f12fcaa096aa5c |
+-----------------------+--------------------------------------+
非特权用户一般不能在这个命令制定更多参数。服务会自动从下面的文件中的信息选择参数:
ml2_conf.ini:
[ml2]
tenant_network_types = vxlan
[ml2_type_vxlan]
vni_ranges = 1:1000
在网络上创建一个子网:
$ neutron subnet-create private PRIVATE_NETWORK_CIDR --name private \
--dns-nameserver DNS_RESOLVER --gateway PRIVATE_NETWORK_GATEWAY
将 PRIVATE_NETWORK_CIDR 替换为你想在私有网络中使用的子网。你可以使用任意值,尽管我们推荐遵从`RFC 1918 <https://tools.ietf.org/html/rfc1918>`_的网络。
将 DNS_RESOLVER 替换为DNS解析服务的IP地址。在大多数情况下,你可以从主机``/etc/resolv.conf`` 文件选择一个使用。
将``PRIVATE_NETWORK_GATEWAY`` 替换为你想在私有网络中使用的网关,一般是 ”.1” IP地址。
例子
私有网络使用172.16.1.0/24 网关172.16.1.1。DHCP服务负责为每个实例从172.16.1.2 到172.16.1.254中分配IP地址。所有实例使用8.8.4.4作为DNS。
$ neutron subnet-create private 172.16.1.0/24 --name private \
--dns-nameserver 8.8.4.4 --gateway 172.16.1.1
Created a new subnet:
+-------------------+------------------------------------------------+
| Field | Value |
+-------------------+------------------------------------------------+
| allocation_pools | {"start": "172.16.1.2", "end": "172.16.1.254"} |
| cidr | 172.16.1.0/24 |
| dns_nameservers | 8.8.4.4 |
| enable_dhcp | True |
| gateway_ip | 172.16.1.1 |
| host_routes | |
| id | 3482f524-8bff-4871-80d4-5774c2730728 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | private |
| network_id | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
| subnetpool_id | |
| tenant_id | f5b2ccaa75ac413591f12fcaa096aa5c |
+-------------------+------------------------------------------------+
私有网络使用虚拟路由器连接到公共网络。每个路由器包含至少一个连接到私有项目网络和公共网络网关的网络接口。
公共提供网络必须包括 ``router: external``选项,来启用项目路由使用它连接外部网络,比如互联网。``admin``或者其他权限用户在网络创建或者后面添加时必须包括这个选项。在这个环境里,我们把它加到存在的``public``提供网络。
在控制节点上,加载 admin 凭证来获取管理员能执行的命令访问权限:
$ source admin-openrc.sh
添加``router: external``到 public 网络:
$ neutron net-update public --router:external
Updated network: public
加载 demo 凭证获得用户能执行的命令访问权限:
$ source demo-openrc.sh
创建路由:
$ neutron router-create router
Created a new router:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | 89dd2083-a160-4d75-ab3a-14239f01ea0b |
| name | router |
| routes | |
| status | ACTIVE |
| tenant_id | f5b2ccaa75ac413591f12fcaa096aa5c |
+-----------------------+--------------------------------------+
在路由器添加一个私网子网接口:
$ neutron router-interface-add router private
Added interface bff6605d-824c-41f9-b744-21d128fc86e1 to router router.
在路由器上设置公共网络的网关:
$ neutron router-gateway-set router public
Set gateway for router router
我们推荐您在处理之前,确认操作和修复问题。以下步骤使用网络和子网创建例子中IP地址。
在控制节点上,加载 admin 凭证来获取管理员能执行的命令访问权限:
$ source admin-openrc.sh
列出网络命名空间。你应该可以看到一个``qrouter``命名空间和两个``qdhcp``命名空间。
$ ip netns
qrouter-89dd2083-a160-4d75-ab3a-14239f01ea0b
qdhcp-7c6f9b37-76b4-463e-98d8-27e5686ed083
qdhcp-0e62efcd-8cee-46c7-b163-d8df05c3c5ad
列出路由器上的端口来确定公网的网关IP 地址:
$ neutron router-port-list router
+--------------------------------------+------+-------------------+------------------------------------------+
| id | name | mac_address | fixed_ips |
+--------------------------------------+------+-------------------+------------------------------------------+
| bff6605d-824c-41f9-b744-21d128fc86e1 | | fa:16:3e:2f:34:9b | {"subnet_id": |
| | | | "3482f524-8bff-4871-80d4-5774c2730728", |
| | | | "ip_address": "172.16.1.1"} |
| d6fe98db-ae01-42b0-a860-37b1661f5950 | | fa:16:3e:e8:c1:41 | {"subnet_id": |
| | | | "5cc70da8-4ee7-4565-be53-b9c011fca011", |
| | | | "ip_address": "203.0.113.102"} |
+--------------------------------------+------+-------------------+------------------------------------------+
从控制节点或任意公共物理网络上的主机Ping这个IP地址:
$ ping -c 4 203.0.113.102
PING 203.0.113.102 (203.0.113.102) 56(84) bytes of data.
64 bytes from 203.0.113.102: icmp_req=1 ttl=64 time=0.619 ms
64 bytes from 203.0.113.102: icmp_req=2 ttl=64 time=0.189 ms
64 bytes from 203.0.113.102: icmp_req=3 ttl=64 time=0.165 ms
64 bytes from 203.0.113.102: icmp_req=4 ttl=64 time=0.216 ms
--- 203.0.113.102 ping statistics ---
rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.