Openstack Train配置手册-07Neutron网络实现

snow chuai汇总、整理、撰写---2020/3/3


1. FLAT网络实现
1) 拓扑
     ------------+---------------------------+---------------------------+------------
                 |                           |                           |
             eth0|192.168.10.11          eth0|192.168.10.12          eth0|192.168.10.13
     +-----------+-----------+   +-----------+-----------+   +-----------+-----------+
     |    [ Control Node ]   |   |    [ Network Node ]   |   |    [ Compute Node ]   |
     |   [node1.1000cc.net]  |   |   [node3.1000cc.net]  |   |   [node2.1000cc.net]  |
     |  MariaDB    RabbitMQ  |   |      Open vSwitch     |   |        Libvirt        |
     |  Memcached  httpd     |   |        L2 Agent       |   |     Nova Compute      |
     |  Keystone   Glance    |   |        L3 Agent       |   |      Open vSwitch     |
     |  Nova API             |   |     Metadata Agent    |   |        L2 Agent       |
     |  Neutron Server       |   |                       |   |                       |
     |  Metadata Agent       |   |                       |   |                       |
     +-----------------------+   +-----------+-----------+   +-----------+-----------+
                                             |eth1                       |eth1
2) 更改Network节点的配置 (1) 添加桥接设备 [root@node3 ~]# ovs-vsctl add-br br0 [root@node3 ~]# ovs-vsctl add-port br0 eth1
(2) 配置ML2 [root@node3 ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini ...... ...... ...... ...... ...... ......
# 于文件末尾,添加如下内容 [ml2_type_flat] flat_networks = physnet1
(3) 配置ovs_agent [root@node3 ~]# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini ...... ...... ...... ...... ...... ......
# 于文件末尾,添加如下内容 [ovs] bridge_mappings = physnet1:br0 [root@node3 ~]# systemctl restart neutron-openvswitch-agent
3) 更改Nova Compute节点的配置 (1) 添加桥接设备 [root@node3 ~]# ovs-vsctl add-br br0 [root@node3 ~]# ovs-vsctl add-port br0 eth1
(2) 配置ML2 [root@node3 ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini ...... ...... ...... ...... ...... ......
# 于文件末尾,添加如下内容 [ml2_type_flat] flat_networks = physnet1
(3) 配置ovs_agent [root@node3 ~]# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini ...... ...... ...... ...... ...... ......
# 于文件末尾,添加如下内容 [ovs] bridge_mappings = physnet1:br0 [root@node3 ~]# systemctl restart neutron-openvswitch-agent
4) 在控制节点[node1]上创建FLAT网络 [root@node1 ~(keystone)]# projectID=$(openstack project list | grep service | awk '{print $2}') [root@node1 ~(keystone)]# openstack network create \ --project $projectID \ --share --provider-network-type flat \ --provider-physical-network physnet1 \ qyynet1 +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | UP | | availability_zone_hints | | | availability_zones | | | created_at | 2020-03-02T17:59:13Z | | description | | | dns_domain | None | | id | 110870d6-6fb9-4b10-be73-b2522b9ed6d7 | | ipv4_address_scope | None | | ipv6_address_scope | None | | is_default | False | | is_vlan_transparent | None | | location | cloud='', project.domain_id=, ... | | mtu | 1500 | | name | qyynet1 | | port_security_enabled | True | | project_id | 7972f61f4a1c4f2592d2bb6dc7711e81 | | provider:network_type | flat | | provider:physical_network | physnet1 | | provider:segmentation_id | None | | qos_policy_id | None | | revision_number | 2 | | router:external | Internal | | segments | None | | shared | True | | status | ACTIVE | | subnets | | | tags | | | updated_at | 2020-03-02T17:59:13Z | +---------------------------+--------------------------------------+
5) 创建qyynet1可分配及使用的子网 [root@node1 ~(keystone)]# openstack subnet create subnet1 --network qyynet1 \ --project $projectID \ --subnet-range 192.168.10.0/24 \ --allocation-pool start=192.168.10.251,end=192.168.10.254 \ --gateway 192.168.10.1 \ --dns-nameserver 192.168.10.10 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | allocation_pools | 192.168.10.251-192.168.10.254 | | cidr | 192.168.10.0/24 | | created_at | 2020-03-02T18:01:52Z | | description | | | dns_nameservers | 192.168.10.10 | | enable_dhcp | True | | gateway_ip | 192.168.10.1 | | host_routes | | | id | d9d68ce4-b961-471e-ab54-cf68160dc141 | | ip_version | 4 | | ipv6_address_mode | None | | ipv6_ra_mode | None | | location | cloud='', project.domain_id=, ... | | name | subnet1 | | network_id | 110870d6-6fb9-4b10-be73-b2522b9ed6d7 | | prefix_length | None | | project_id | 7972f61f4a1c4f2592d2bb6dc7711e81 | | revision_number | 0 | | segment_id | None | | service_types | | | subnetpool_id | None | | tags | | | updated_at | 2020-03-02T18:01:52Z | +-------------------+--------------------------------------+
[root@node1 ~(keystone)]# openstack network list +--------------------------------------+---------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+---------+--------------------------------------+ | 110870d6-6fb9-4b10-be73-b2522b9ed6d7 | qyynet1 | d9d68ce4-b961-471e-ab54-cf68160dc141 | +--------------------------------------+---------+--------------------------------------+
2. 测试FLAT网络
1) 设置环境
[root@node1 ~(keystone)]# su - snow
[snow@node1 ~]$ vim ~/keystonerc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=1000cc
export OS_USERNAME=snow
export OS_PASSWORD=userpassword
export OS_AUTH_URL=http://192.168.10.11:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='[\u@\h \W(keystone)]\$ '
[snow@node1 ~]$ chmod 600 ~/keystonerc [snow@node1 ~]$ source ~/keystonerc [snow@node1 ~(keystone)]$ echo "source ~/keystonerc " >> ~/.bash_profile 2) 查看及设定相关资源 # 查看Flavor [snow@node1 ~(keystone)]$ openstack flavor list +----+----------+-----+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +----+----------+-----+------+-----------+-------+-----------+ | 0 | m1.small | 800 | 5 | 0 | 1 | True | +----+----------+-----+------+-----------+-------+-----------+
[snow@node1 ~(keystone)]$ openstack image list +--------------------------------------+------+--------+ | ID | Name | Status | +--------------------------------------+------+--------+ | d848c42d-801b-437b-a8ab-4b86a67eb584 | c77 | active | +--------------------------------------+------+--------+
[snow@node1 ~(keystone)]$ openstack network list +--------------------------------------+---------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+---------+--------------------------------------+ | 110870d6-6fb9-4b10-be73-b2522b9ed6d7 | qyynet1 | d9d68ce4-b961-471e-ab54-cf68160dc141 | +--------------------------------------+---------+--------------------------------------+
# 创建安全组secgroup1 [snow@node1 ~(keystone)]$ openstack security group create secgroup1 +-----------------+------------------------------------------------------------------------------+ | Field | Value | +-----------------+------------------------------------------------------------------------------+ | created_at | 2020-03-02T18:07:30Z | description | secgroup1 | id | 02727066-475f-4964-966a-19e16c4447d4 | location | cloud='', project.domain_id=, ...... | name | secgroup1 | project_id | 70e9c932884544eea84190f7fb42f9f6 | revision_number | 1 | rules | created_at='2020-03-02T18:07:30Z', direction='egress', ethertype='IPv4',... | | created_at='2020-03-02T18:07:30Z', direction='egress', ethertype='IPv6',... | updated_at | 2020-03-02T18:07:30Z +-----------------+------------------------------------------------------------------------------+
3) 设定预连接的账户秘钥 # 创建ssh秘钥 [snow@node1 ~(keystone)]$ ssh-keygen -q -N "" Enter file in which to save the key (/home/snow/.ssh/id_rsa):
# 添加公钥 [snow@node1 ~(keystone)]$ openstack keypair create --public-key ~/.ssh/id_rsa.pub snowkey +-------------+-------------------------------------------------+ | Field | Value | +-------------+-------------------------------------------------+ | fingerprint | 91:e4:fa:6c:fa:f4:14:4b:28:87:4c:3f:f1:60:42:16 | | name | snowkey | | user_id | d3a4d7927ebd4dfb8b6fa00d11f778f0 | +-------------+-------------------------------------------------+br> 5) 创建实例 # 获取网络ID [snow@node1 ~(keystone)]$ netID=$(openstack network list | grep qyynet1 | awk '{ print $2 }') # 创建实例 [snow@node1 ~(keystone)]$ openstack server create \ --flavor m1.small \ --image c77 \ --security-group secgroup1 \ --nic net-id=$netID \ --key-name snowkey \ CentOS7 +-----------------------------+---------------------------------------------+ | Field | Value | +-----------------------------+---------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | | | OS-EXT-STS:power_state | NOSTATE | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | None | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | | | adminPass | CaStfQ9ujyd3 | | config_drive | | | created | 2020-03-02T18:10:55Z | | flavor | m1.small (0) | | hostId | | | id | 2592d40e-30a8-4881-9b29-7a49ce085e6c | | image | c77 (d848c42d-801b-437b-a8ab-4b86a67eb584) | | key_name | snowkey | | name | CentOS7 | | progress | 0 | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | properties | | | security_groups | name='02727066-475f-4964-966a-19e16c4447d4' | | status | BUILD | | updated | 2020-03-02T18:10:55Z | | user_id | d3a4d7927ebd4dfb8b6fa00d11f778f0 | | volumes_attached | | +-----------------------------+---------------------------------------------+
[snow@node1 log(keystone)]$ openstack server list +--------------------------------------+---------+--------+------------------------+-------+------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+---------+--------+------------------------+-------+------+ | 2592d40e-...... | CentOS7 | ACTIVE | qyynet1=192.168.10.252 | c77 | m1.small | +--------------------------------------+---------+--------+------------------------+-------+------+
6) 允许ping及ssh连接实例 # 允许icmp通过 [snow@node1 log(keystone)]$ openstack security group rule create --protocol icmp --ingress secgroup1 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | created_at | 2020-03-02T18:13:02Z | | description | | | direction | ingress | | ether_type | IPv4 | | id | ab6ef684-22ab-4fd4-a5c2-50e34df5e575 | | location | cloud='', project.domain_id=, | | name | None | | port_range_max | None | | port_range_min | None | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | protocol | icmp | | remote_group_id | None | | remote_ip_prefix | 0.0.0.0/0 | | revision_number | 0 | | security_group_id | 02727066-475f-4964-966a-19e16c4447d4 | | updated_at | 2020-03-02T18:13:02Z | +-------------------+--------------------------------------+
# 允许ssh通过 [snow@node1 log(keystone)]$ openstack security group rule create --protocol tcp --dst-port 22:22 secgroup1 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | created_at | 2020-03-02T18:14:31Z | | description | | | direction | ingress | | ether_type | IPv4 | | id | 574be4b2-6c85-48ab-9586-dad616ce92ec | | location | cloud='', project.domain_id=, | | name | None | | port_range_max | 22 | | port_range_min | 22 | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | protocol | tcp | | remote_group_id | None | | remote_ip_prefix | 0.0.0.0/0 | | revision_number | 0 | | security_group_id | 02727066-475f-4964-966a-19e16c4447d4 | | updated_at | 2020-03-02T18:14:31Z | +-------------------+--------------------------------------+
# 确认安全组规则 [snow@node1 log(keystone)]$ openstack security group rule list +--------------------------------------+-------------+-----------+-----------+------------+--------------------------------------+--------------------------------------+ | ID | IP Protocol | Ethertype | IP Range | Port Range | Remote Security Group | Security Group | +--------------------------------------+-------------+-----------+-----------+------------+--------------------------------------+--------------------------------------+ | 0098bf9e-e319-4d7c-a233-b5ca0065d45b | None | IPv6 | ::/0 | | None | ad841831-fa94-4626-a40a-b9dca465918c | | 0c36003c-ec80-47d2-8a26-eccf315937c2 | None | IPv4 | 0.0.0.0/0 | | ad841831-fa94-4626-a40a-b9dca465918c | ad841831-fa94-4626-a40a-b9dca465918c | | 574be4b2-6c85-48ab-9586-dad616ce92ec | tcp | IPv4 | 0.0.0.0/0 | 22:22 | None | 02727066-475f-4964-966a-19e16c4447d4 | | 7535f006-d557-4e4b-8d58-957759a8d41e | None | IPv4 | 0.0.0.0/0 | | None | ad841831-fa94-4626-a40a-b9dca465918c | | 79869c32-81df-48e8-8459-ea84d731a96b | None | IPv4 | 0.0.0.0/0 | | None | 02727066-475f-4964-966a-19e16c4447d4 | | 820dab79-30f7-4515-9d6d-ee770aa1ff59 | None | IPv6 | ::/0 | | ad841831-fa94-4626-a40a-b9dca465918c | ad841831-fa94-4626-a40a-b9dca465918c | | ab6ef684-22ab-4fd4-a5c2-50e34df5e575 | icmp | IPv4 | 0.0.0.0/0 | | None | 02727066-475f-4964-966a-19e16c4447d4 | | e18fc579-2f5d-4c06-9012-f2e24dc96412 | None | IPv6 | ::/0 | | None | 02727066-475f-4964-966a-19e16c4447d4 | +--------------------------------------+-------------+-----------+-----------+------------+--------------------------------------+--------------------------------------+
7) 测试 [snow@node1 log(keystone)]$ ping -c 2 192.168.10.252 PING 192.168.10.252 (192.168.10.252) 56(84) bytes of data. 64 bytes from 192.168.10.252: icmp_seq=1 ttl=64 time=1.34 ms 64 bytes from 192.168.10.252: icmp_seq=2 ttl=64 time=1.80 ms
--- 192.168.10.252 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.340/1.574/1.809/0.237 ms
[snow@node1 log(keystone)]$ ssh centos@192.168.10.252 The authenticity of host '192.168.10.252 (192.168.10.252)' can't be established. ECDSA key fingerprint is SHA256:CRRhDDjIZPnKTrKw5T/Dtp2vQO8uuWfrfFCjqD0A7+A. ECDSA key fingerprint is MD5:a7:c9:2a:c4:d4:0e:89:ad:48:46:e9:b0:51:f3:29:2f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.10.252' (ECDSA) to the list of known hosts. [centos@localhost ~]$
3. VxLAN网络实现
3.1 拓扑
     ------------+---------------------------+---------------------------+------------
                 |                           |                           |
             eth0|192.168.10.11          eth0|192.168.10.12          eth0|192.168.10.13
     +-----------+-----------+   +-----------+-----------+   +-----------+-----------+
     |    [ Control Node ]   |   |    [ Network Node ]   |   |    [ Compute Node ]   |
     |   [node1.1000cc.net]  |   |   [node1.1000cc.net]  |   |   [node1.1000cc.net]  |
     |  MariaDB    RabbitMQ  |   |      Open vSwitch     |   |        Libvirt        |
     |  Memcached  httpd     |   |        L2 Agent       |   |     Nova Compute      |
     |  Keystone   Glance    |   |        L3 Agent       |   |      Open vSwitch     |
     |  Nova API             |   |     Metadata Agent    |   |        L2 Agent       |
     |  Neutron Server       |   |                       |   |                       |
     |  Metadata Agent       |   |                       |   |                       |
     +-----------------------+   +-----------+-----------+   +-----------------------+
                                             |eth1
3.2 配置及实现VxLAN
1) 配置Controll节点
(1) 配置ML2
[root@node1 ~(keystone)]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
......
......
......
......
......
......
# 于文件最后,设定租户网络类型 [ml2] type_drivers = flat,vlan,gre,vxlan tenant_network_types = vxlan # 并定义物理网络信息 [ml2_type_flat] flat_networks = physnet1 # 定义vxlanID [ml2_type_vxlan] vni_ranges = 1:1000
(2) 重启Neutron服务 [root@node1 ~(keystone)]# systemctl restart neutron-server
2) 配置Network节点 (1) 创建桥接,以允许Vxlan与物理网络映射 # 添加桥接设备br0 [root@node3 ~]# ovs-vsctl add-br br0
# 将eth1加入至桥接设备br0 [root@node3 ~]# ovs-vsctl add-port br0 eth1
(2) 配置ML2 [root@node3 ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini ...... ...... ...... ...... ...... ......
# 于文件最底部,设定租户网络类型 [ml2] type_drivers = flat,vlan,gre,vxlan tenant_network_types = vxlan ...... ......
# 定义物理网络信息 [ml2_type_flat] flat_networks = physnet1
# 定义vxlanID [ml2_type_vxlan] vni_ranges = 1:1000

(3) 配置ovs代理 [root@node3 ~]# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini ...... ...... ...... ...... ...... ......
# 于文件最底部,添加如下内容 [agent] tunnel_types = vxlan prevent_arp_spoofing = True
# 并定义本地IP地址及网络映射 [ovs] local_ip = 192.168.10.13 bridge_mappings = physnet1:br0

(4) 重启服务 [root@node3 ~]# systemctl restart neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-openvswitch-agent # 关闭防火墙 [root@node3 ~]# systemctl disable --now firewalld
3) 配置Compute节点 (1) 配置ML2 [root@node2 ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini ...... ...... ...... ...... ...... ......
# 于文件最底部,定义租户网络类型 [ml2] type_drivers = flat,vlan,gre,vxlan tenant_network_types = vxlan
# 定义物理网络信息 [ml2_type_flat] flat_networks = physnet1
# 定义VxLAN ID范围 [ml2_type_vxlan] vni_ranges = 1:1000

(2) 配置ovs agent [root@node2 ~]# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini ...... ...... ...... ...... ...... ......
# 于文件最底部,添加VxLAN信息 [agent] tunnel_types = vxlan prevent_arp_spoofing = True
# 定义本地IP [ovs] local_ip = 192.168.10.12

[root@node01 ~]# systemctl restart neutron-openvswitch-agent
# 关闭防火墙 [root@node01 ~]# systemctl disable --now firewalld
3.3 创建VxLAN(控制节点)
1) 创建路由(由VxLAN至物理网络vRouter)
[root@node1 ~(keystone)]# openstack router create r1
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| admin_state_up          | UP                                   |
| availability_zone_hints |                                      |
| availability_zones      |                                      |
| created_at              | 2020-03-02T18:38:26Z                 |
| description             |                                      |
| distributed             | False                                |
| external_gateway_info   | None                                 |
| flavor_id               | None                                 |
| ha                      | False                                |
| id                      | e36d0ac6-fa95-43d7-96e3-fdf9765173ec |
| location                | cloud='', project.domain_id=,......  |
| name                    | r1                                   |
| project_id              | 558ed85c8f84439a876cfd35150d0fe1     |
| revision_number         | 1                                    |
| routes                  |                                      |
| status                  | ACTIVE                               |
| tags                    |                                      |
| updated_at              | 2020-03-02T18:38:26Z                 |
+-------------------------+--------------------------------------+
2) 创建inet_net(vNetwork)类型为vxlan [root@node1 ~(keystone)]# openstack network create int_net --provider-network-type vxlan +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | UP | | availability_zone_hints | | | availability_zones | | | created_at | 2020-03-02T18:39:40Z | | description | | | dns_domain | None | | id | 67c8409d-4051-4cc5-a3d1-5a17151e800e | | ipv4_address_scope | None | | ipv6_address_scope | None | | is_default | False | | is_vlan_transparent | None | | location | cloud='', project.domain_id=,...... | | mtu | 1450 | | name | int_net | | port_security_enabled | False | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | provider:network_type | vxlan | | provider:physical_network | None | | provider:segmentation_id | 95 | | qos_policy_id | None | | revision_number | 1 | | router:external | Internal | | segments | None | | shared | False | | status | ACTIVE | | subnets | | | tags | | | updated_at | 2020-03-02T18:39:40Z | +---------------------------+--------------------------------------+
3) 创建vNetwork子网 [root@node1 ~(keystone)]# openstack subnet create subnet1 \ --network int_net \ --subnet-range 192.168.188.0/24 \ --gateway 192.168.188.1 \ --dns-nameserver 192.168.10.10 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | allocation_pools | 192.168.188.2-192.168.188.254 | | cidr | 192.168.188.0/24 | | created_at | 2020-03-02T18:41:35Z | | description | | | dns_nameservers | 192.168.10.10 | | enable_dhcp | True | | gateway_ip | 192.168.188.1 | | host_routes | | | id | 5d951598-e4aa-4932-8410-fcf94e520747 | | ip_version | 4 | | ipv6_address_mode | None | | ipv6_ra_mode | None | | location | cloud='', project.domain_id=,...... | | name | subnet1 | | network_id | 67c8409d-4051-4cc5-a3d1-5a17151e800e | | prefix_length | None | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | revision_number | 0 | | segment_id | None | | service_types | | | subnetpool_id | None | | tags | | | updated_at | 2020-03-02T18:41:35Z | +-------------------+--------------------------------------+
4) 将子网subne1与vRouer(r1)相连 [root@node1 ~(keystone)]# openstack router add subnet r1 subnet1
5) 创建flat扩展网络physnet1 [root@node1 ~(keystone)]# openstack network create \ --provider-physical-network physnet1 \ --provider-network-type flat \ --external ext_net +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | UP | | availability_zone_hints | | | availability_zones | | | created_at | 2020-03-02T18:43:10Z | | description | | | dns_domain | None | | id | 28c92a79-3ec6-460e-ae64-f486dc088063 | | ipv4_address_scope | None | | ipv6_address_scope | None | | is_default | False | | is_vlan_transparent | None | | location | cloud='', project.domain_id=, ...... | | mtu | 1500 | | name | ext_net | | port_security_enabled | False | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | provider:network_type | flat | | provider:physical_network | physnet1 | | provider:segmentation_id | None | | qos_policy_id | None | | revision_number | 4 | | router:external | External | | segments | None | | shared | False | | status | ACTIVE | | subnets | | | tags | | | updated_at | 2020-03-02T18:43:10Z | +---------------------------+--------------------------------------+
6) 创建flat子网subnet2,并划分地址及相关信息,实例IP由手工指定,关闭DHCP [root@node1 ~(keystone)]# openstack subnet create subnet2 \ --network ext_net \ --subnet-range 192.168.10.0/24 \ --allocation-pool start=192.168.10.220,end=192.168.10.229 \ --gateway 192.168.10.1 \ --dns-nameserver 192.168.10.10 \ --no-dhcp +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | allocation_pools | 192.168.10.220-192.168.10.229 | | cidr | 192.168.10.0/24 | | created_at | 2020-03-02T18:44:20Z | | description | | | dns_nameservers | 192.168.10.10 | | enable_dhcp | False | | gateway_ip | 192.168.10.1 | | host_routes | | | id | 6d8669f5-dae0-4240-9b80-49c21218cd1a | | ip_version | 4 | | ipv6_address_mode | None | | ipv6_ra_mode | None | | location | cloud='', project.domain_id=, ...... | | name | subnet2 | | network_id | 28c92a79-3ec6-460e-ae64-f486dc088063 | | prefix_length | None | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | revision_number | 0 | | segment_id | None | | service_types | | | subnetpool_id | None | | tags | | | updated_at | 2020-03-02T18:44:20Z | +-------------------+--------------------------------------+
7) 将子网subne2与vRouer(r1)相连 [root@node1 ~(keystone)]# openstack router set r1 --external-gateway ext_net
8) 授权网络访问 # 默认情况下,所有项目都可以访问外部网络,但对于内部网络,只有管理项目可以访问它,因此请将内部网络的访问权限授予希望让项目中的用户使用的项目。 [root@node1 ~(keystone)]# openstack network rbac list +--------------------------------------+-------------+--------------------------------------+ | ID | Object Type | Object ID | +--------------------------------------+-------------+--------------------------------------+ | 6a835c06-11de-45df-8b4c-1a311514ed4a | network | 28c92a79-3ec6-460e-ae64-f486dc088063 | +--------------------------------------+-------------+--------------------------------------+
[root@node1 ~(keystone)]# openstack network rbac show 6a835c06-11de-45df-8b4c-1a311514ed4a +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | action | access_as_external | | id | 6a835c06-11de-45df-8b4c-1a311514ed4a | | location | cloud='', project.domain_id=, ...... | | name | None | | object_id | 28c92a79-3ec6-460e-ae64-f486dc088063 | | object_type | network | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | target_project_id | * | +-------------------+--------------------------------------+
[root@node1 ~(keystone)]# openstack network list +--------------------------------------+---------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+---------+--------------------------------------+ | 28c92a79-3ec6-460e-ae64-f486dc088063 | ext_net | 6d8669f5-dae0-4240-9b80-49c21218cd1a | | 67c8409d-4051-4cc5-a3d1-5a17151e800e | int_net | 5d951598-e4aa-4932-8410-fcf94e520747 | +--------------------------------------+---------+--------------------------------------+
[root@node1 ~(keystone)]# openstack project list +----------------------------------+---------+ | ID | Name | +----------------------------------+---------+ | 558ed85c8f84439a876cfd35150d0fe1 | admin | | 70e9c932884544eea84190f7fb42f9f6 | 1000cc | | 7972f61f4a1c4f2592d2bb6dc7711e81 | service | +----------------------------------+---------+
**授权inet_net访问1000cc租户 [root@node1 ~(keystone)]# netID=$(openstack network list | grep int_net | awk '{ print $2 }') [root@node1 ~(keystone)]# prjID=$(openstack project list | grep 1000cc | awk '{ print $2 }') [root@node1 ~(keystone)]# openstack network rbac create \ --target-project $prjID \ --type network \ --action access_as_shared $netID +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | action | access_as_shared | | id | 6c7838c2-578c-4abc-93b8-b16db6517bd9 | | location | cloud='', project.domain_id=, ...... | | name | None | | object_id | 67c8409d-4051-4cc5-a3d1-5a17151e800e | | object_type | network | | project_id | 558ed85c8f84439a876cfd35150d0fe1 | | target_project_id | 70e9c932884544eea84190f7fb42f9f6 | +-------------------+--------------------------------------+
3.4 测试
1) 设定租户管理员环境
[root@node1 ~(keystone)]# su - snow
[snow@node1 ~]$ vim keystonerc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=1000cc
export OS_USERNAME=snow
export OS_PASSWORD=userpassword
export OS_AUTH_URL=http://192.168.10.11:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='[\u@\h \W(keystone)]\$ '
[snow@node1 ~]$ chmod 600 ~/keystonerc [snow@node1 ~]$ source ~/keystonerc [snow@node1 ~(keystone)]$ echo "source ~/keystonerc " >> ~/.bash_profile
2) 确认实例创建所需要的信息 [snow@node1 ~(keystone)]$ openstack flavor list +----+----------+-----+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +----+----------+-----+------+-----------+-------+-----------+ | 0 | m1.small | 800 | 5 | 0 | 1 | True | +----+----------+-----+------+-----------+-------+-----------+
[snow@node1 ~(keystone)]$ openstack image list +--------------------------------------+------+--------+ | ID | Name | Status | +--------------------------------------+------+--------+ | d848c42d-801b-437b-a8ab-4b86a67eb584 | c77 | active | +--------------------------------------+------+--------+
[snow@node1 ~(keystone)]$ openstack network list +--------------------------------------+---------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+---------+--------------------------------------+ | 28c92a79-3ec6-460e-ae64-f486dc088063 | ext_net | 6d8669f5-dae0-4240-9b80-49c21218cd1a | | 67c8409d-4051-4cc5-a3d1-5a17151e800e | int_net | 5d951598-e4aa-4932-8410-fcf94e520747 | +--------------------------------------+---------+--------------------------------------+
3) 创建安全组 [snow@node1 ~(keystone)]$ openstack security group create secgroup1 +-----------------+-------------------------------------------------------------------------------+ | Field | Value | +-----------------+-------------------------------------------------------------------------------+ | created_at | 2020-03-02T18:56:35Z | description | secgroup1 | id | 8cbeca34-25f7-45e8-a153-d119d63d250b | location | cloud='', project.domain_id=,...... | name | secgroup1 | project_id | 7146a34d5b744320b2ed45af5b2e761b | revision_number | 1 | rules | created_at='2020-03-02T18:56:35Z', direction='egress', ethertype='IPv4',...... | | created_at='2020-03-02T18:56:35Z', direction='egress', ethertype='IPv6'...... | updated_at | 2020-03-02T18:56:35Z +-----------------+-------------------------------------------------------------------------------+
4) 设定连接秘钥并添加公钥 [snow@node1 ~(keystone)]$ ssh-keygen -q -N '' Enter file in which to save the key (/home/snow/.ssh/id_rsa):
[snow@node1 ~(keystone)]$ openstack keypair create --public-key ~/.ssh/id_rsa.pub snowkey +-------------+-------------------------------------------------+ | Field | Value | +-------------+-------------------------------------------------+ | fingerprint | 71:05:35:30:3c:67:1b:76:5a:04:18:69:97:ba:88:94 | | name | snowkey | | user_id | d3a4d7927ebd4dfb8b6fa00d11f778f0 | +-------------+-------------------------------------------------+
5) 创建实例 (1) 获取inet_net的ID,作为实例所使用的网络 [snow@node1 ~(keystone)]$ netID=$(openstack network list | grep int_net | awk '{ print $2 }')
(2) 创建实例 [snow@node1 ~(keystone)]$ openstack server create \ --flavor m1.small \ --image c77 \ --security-group secgroup1 \ --nic net-id=$netID \ --key-name snowkey \ c7 +-----------------------------+---------------------------------------------+ | Field | Value | +-----------------------------+---------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | | | OS-EXT-STS:power_state | NOSTATE | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | None | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | | | adminPass | tLuPE72x3Lgx | | config_drive | | | created | 2020-03-02T18:59:16Z | | flavor | m1.small (0) | | hostId | | | id | aed6d985-d2e7-4382-8eb6-a602c04c89e6 | | image | c77 (d848c42d-801b-437b-a8ab-4b86a67eb584) | | key_name | snowkey | | name | c7 | | progress | 0 | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | properties | | | security_groups | name='8cbeca34-25f7-45e8-a153-d119d63d250b' | | status | BUILD | | updated | 2020-03-02T18:59:17Z | | user_id | d3a4d7927ebd4dfb8b6fa00d11f778f0 | | volumes_attached | | +-----------------------------+---------------------------------------------+
[snow@node1 ~(keystone)]$ openstack server list +--------------------------------------+------+--------+-----------------------+-------+----------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+------+--------+-----------------------+-------+----------+ | be6d5223-8374-49e9-8e0c-552559d01143 | c7 | ACTIVE | int_net=192.168.188.5 | c77 | m1.small | +--------------------------------------+------+--------+-----------------------+-------+----------+
6) 为实例添加floating IP (1) 获取flating ip [snow@node1 ~(keystone)]$ openstack floating ip create ext_net +---------------------+--------------------------------------+ | Field | Value | +---------------------+--------------------------------------+ | created_at | 2020-03-02T19:12:01Z | | description | | | fixed_ip_address | None | | floating_ip_address | 192.168.10.225 | | floating_network_id | 28c92a79-3ec6-460e-ae64-f486dc088063 | | id | 61b25e5b-26a4-427a-82c9-dd9d49c7a322 | | location | Munch({'project': Munch({'domain... | name | 192.168.10.225 | | port_id | None | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | qos_policy_id | None | | revision_number | 0 | | router_id | None | | status | DOWN | | subnet_id | None | | updated_at | 2020-03-02T19:12:01Z | +---------------------+--------------------------------------+
(2) 将flating ip与实例关联 [snow@node1 ~(keystone)]$ openstack server add floating ip c7 192.168.10.225 [snow@node1 ~(keystone)]$ openstack server list +-------+------+--------+---------------------------------------+-------+----------+ | ID | Name | Status | Networks | Image | Flavor | +-------+------+--------+---------------------------------------+-------+----------+ | be6d..| c7 | ACTIVE | int_net=192.168.188.5, 192.168.10.225 | c77 | m1.small | +-------+------+--------+---------------------------------------+-------+----------+
(3) 开放ping及ssh安全组规则 [snow@node1 ~(keystone)]$ openstack security group rule create --protocol icmp --ingress secgroup1 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | created_at | 2020-03-02T19:14:45Z | | description | | | direction | ingress | | ether_type | IPv4 | | id | 5d51d93b-a188-4d6a-9d15-643420f6eae0 | | location | cloud='', project.domain_id=, ...... | | name | None | | port_range_max | None | | port_range_min | None | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | protocol | icmp | | remote_group_id | None | | remote_ip_prefix | 0.0.0.0/0 | | revision_number | 0 | | security_group_id | 8cbeca34-25f7-45e8-a153-d119d63d250b | | updated_at | 2020-03-02T19:14:45Z | +-------------------+--------------------------------------+
[snow@node1 ~(keystone)]$ openstack security group rule create --protocol tcp --dst-port 22:22 secgroup1 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | created_at | 2020-03-02T19:15:53Z | | description | | | direction | ingress | | ether_type | IPv4 | | id | 1f91657e-e75e-4756-b7ab-e86469c0f304 | | location | cloud='', project.domain_id=, ...... | | name | None | | port_range_max | 22 | | port_range_min | 22 | | project_id | 70e9c932884544eea84190f7fb42f9f6 | | protocol | tcp | | remote_group_id | None | | remote_ip_prefix | 0.0.0.0/0 | | revision_number | 0 | | security_group_id | 8cbeca34-25f7-45e8-a153-d119d63d250b | | updated_at | 2020-03-02T19:15:53Z | +-------------------+--------------------------------------+
[snow@node1 ~(keystone)]$ openstack security group rule list +---------+-------------+-----------+------------+----------------------+---------------+ | ID | IP Protocol | IP Range | Port Range | Remote Security Group| Security Group| +---------+------------+------------+------------+----------------------+---------------+ | 0c16... | None | 0.0.0.0/0 | | None | 8cbe......... | | 1f91... | None | 0.0.0.0/0 | 22:22 | None | 8cbe......... | | 55d5... | None | 0.0.0.0/0 | | None | 47d9......... | | 5a7c... | None | 0.0.0.0/0 | | 47d9... | 47d9......... | | 5d51... | icmp | 0.0.0.0/0 | | None | 8cbe......... | | 6209... | None | ::/0 | | None | 47d9......... | | 6ecb... | None | ::/0 | | 47d9... | 8cbe......... | | ed06... | None | ::/0 | | None | c7d9......... | +---------+-------------+-----------+------------+----------------------+---------------+
7) 测试 (1) ping测试 [snow@node1 ~(keystone)]$ ping -c 2 192.168.10.225 PING 192.168.10.223 (192.168.10.223) 56(84) bytes of data. 64 bytes from 192.168.10.223: icmp_seq=1 ttl=63 time=4.07 ms 64 bytes from 192.168.10.223: icmp_seq=2 ttl=63 time=2.23 ms
--- 192.168.10.223 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 2.230/3.151/4.073/0.923 ms
(2) ssh登录测试 [snow@node1 ~(keystone)]$ ssh centos@192.168.10.223 The authenticity of host '192.168.10.223 (192.168.10.223)' can't be established. ECDSA key fingerprint is SHA256:CRRhDDjIZPnKTrKw5T/Dtp2vQO8uuWfrfFCjqD0A7+A. ECDSA key fingerprint is MD5:a7:c9:2a:c4:d4:0e:89:ad:48:46:e9:b0:51:f3:29:2f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.10.223' (ECDSA) to the list of known hosts. [centos@c7 ~]$ (3) vmc测试 # 获取url地址并复制 [snow@node1 ~(keystone)]$ openstack console url show c7 +-------+------------------------------------------------------------------------------------+ | Field | Value | +-------+------------------------------------------------------------------------------------+ | type | novnc | | url | http://192.168.10.11:6080/vnc_auto.html?path=%3Ftoken%3D94eb1756-f664-4682-90ef... | +-------+------------------------------------------------------------------------------------+
# 使用浏览器访问 [浏览器]==>复制rul地址==>打开实例

 

如对您有帮助,请随缘打个赏。^-^

gold