Bạn phải tạo các mạng ảo cần thiết để hỗ trợ việc khởi chạy các instance trên OpenStack. Có hai tùy chọn cho việc cấu hình mạng: tùy chọn 1 bao gồm một Provider networks với một instance sử dụng nó, trong khi tùy chọn 2 bao gồm một Provider networks và một Self-service networks với mỗi mạng có một instance sử dụng nó. Hướng dẫn này sử dụng các công cụ giao diện dòng lệnh (CLI) trên controller, nhưng bạn có thể làm theo hướng dẫn trên bất kỳ máy chủ nào đã cài đặt các công cụ này.
1. Create the provider network
Trên controller, cung cấp thông tin đăng nhập admin để có quyền truy cập vào các lệnh CLI chỉ dành cho quản trị viên:
. admin-openrc
Tạo network bằng cách sử dụng lệnh openstack network create
được sử dụng để tạo một mạng ảo (virtual network) trong OpenStack. Trong đó:
- Tùy chọn
--share
cho phép tất cả các project trong OpenStack sử dụng mạng ảo này. - Tùy chọn
--external
xác định mạng ảo được tạo là mạng ngoài (external network), nghĩa là được kết nối với mạng bên ngoài, có thể truy cập từ bên ngoài vào các máy ảo trong mạng ảo. - Tùy chọn
--provider-physical-network provider
xác định tên của physical network, được sử dụng để kết nối với mạng ảo, trong trường hợp này làprovider
. - Tùy chọn
--provider-network-type flat
xác định kiểu mạng mà mạng ảo sử dụng, ở đây là kiểu flat (mạng flat là mạng native/untagged, không sử dụng VLAN).
Tổng quan, lệnh này tạo một mạng ảo external (ngoài) có tên là provider
, được kết nối với physical network có tên provider
và sử dụng kiểu mạng flat (untagged/native).
$ openstack network create --share --external \
--provider-physical-network provider \
--provider-network-type flat provider
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-03-14T14:37:39Z |
| description | |
| dns_domain | None |
| id | 54adb94a-4dce-437f-a33b-e7e2e7648173 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| mtu | 1500 |
| name | provider |
| port_security_enabled | True |
| project_id | 4c7f48f1da5b494faaa66713686a7707 |
| provider:network_type | flat |
| provider:physical_network | provider |
| provider:segmentation_id | None |
| qos_policy_id | None |
| revision_number | 3 |
| router:external | External |
| segments | None |
| shared | True |
| status | ACTIVE |
| subnets | |
| updated_at | 2017-03-14T14:37:39Z |
+---------------------------+--------------------------------------+
- Tùy chọn
--share
cho phép tất cả các dự án trong hệ thống có thể sử dụng mạng ảo này. Tùy chọn--external
chỉ định mạng ảo này là một mạng bên ngoài, nếu muốn tạo ra một mạng nội bộ, ta có thể sử dụng tùy chọn--internal
. Mặc định, giá trị của mạng ảo làinternal
. - Các tùy chọn
--provider-physical-network
và--provider-network-type
kết nối mạng ảo loạiflat
với mạng vật lý loạiflat
(tức là không được gắn thẻ/tag) trên giao diệneth1
trên máy chủ sử dụng thông tin từ các file cấu hìnhml2_conf.ini
vàlinuxbridge_agent.ini
.
ml2_conf.ini
:
[ml2_type_flat]
flat_networks = provider
linuxbridge_agent.ini
:
[linux_bridge]
physical_interface_mappings = provider:eth1
Create a subnet on the network.
Lệnh openstack subnet create
được sử dụng để tạo ra một subnet cho mạng đã được tạo trước đó (provider
trong đoạn lệnh). Trong lệnh này, các thông số cần thiết để tạo một subnet đều được cung cấp:
--allocation-pool
: Định nghĩa các địa chỉ IP sẽ được phân bổ cho các máy ảo trong subnet.start
vàend
là các địa chỉ IP đầu và cuối của dải địa chỉ IP muốn phân bổ. Ví dụ:--allocation-pool start=192.168.0.100,end=192.168.0.200
.--dns-nameserver
: Xác định máy chủ DNS được sử dụng bởi các máy ảo trong subnet.--gateway
: Định nghĩa địa chỉ IP của cổng mạng kết nối với mạng bên ngoài subnet.--subnet-range
: Định nghĩa dải địa chỉ IP sẽ được sử dụng cho subnet. Ví dụ:--subnet-range 192.168.0.0/24
.
Sau khi chạy lệnh này, OpenStack sẽ tạo ra một subnet với các thông số được chỉ định và liên kết nó với mạng đã được tạo trước đó (provider
).
openstack subnet create --network provider \
--allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS \
--dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY \
--subnet-range PROVIDER_NETWORK_CIDR provider
Ví dụ đoạn lệnh này sử dụng lệnh openstack subnet create
để tạo một subnet trên mạng provider
. Các thông số của subnet được chỉ định bởi các tùy chọn sau:
--allocation-pool
: Chỉ định các địa chỉ IP thuộc subnet được cấp phát cho các VM. Trong đoạn lệnh này, các địa chỉ IP được cấp phát trong khoảng từ203.0.113.101
đến203.0.113.250
.--dns-nameserver
: Chỉ định địa chỉ IP của máy chủ DNS được sử dụng để giải quyết tên miền trong subnet. Trong đoạn lệnh này, máy chủ DNS được sử dụng là8.8.4.4
.--gateway
: Chỉ định địa chỉ IP của gateway trong subnet. Trong đoạn lệnh này, gateway được đặt tại địa chỉ203.0.113.1
.--subnet-range
: Chỉ định phạm vi các địa chỉ IP trong subnet. Trong đoạn lệnh này, subnet sử dụng địa chỉ mạng là203.0.113.0/24
.provider
: Tên của subnet mới được tạo ra.
$ openstack subnet create --network provider \
--allocation-pool start=203.0.113.101,end=203.0.113.250 \
--dns-nameserver 8.8.4.4 --gateway 203.0.113.1 \
--subnet-range 203.0.113.0/24 provider
Created a new subnet:
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| allocation_pools | 203.0.113.101-203.0.113.250 |
| cidr | 203.0.113.0/24 |
| created_at | 2017-03-29T05:48:29Z |
| description | |
| dns_nameservers | 8.8.4.4 |
| enable_dhcp | True |
| gateway_ip | 203.0.113.1 |
| host_routes | |
| id | e84b4972-c7fc-4ce9-9742-fdc845196ac5 |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | provider |
| network_id | 1f816a46-7c3f-4ccf-8bf3-fe0807ddff8d |
| project_id | 496efd248b0c46d3b80de60a309177b5 |
| revision_number | 2 |
| segment_id | None |
| service_types | |
| subnetpool_id | None |
| updated_at | 2017-03-29T05:48:29Z |
+-------------------+--------------------------------------+
2. Create m1.nano flavor
Lệnh openstack flavor create
dùng để tạo ra các kiểu máy ảo (flavor) trên OpenStack. Trong câu lệnh openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
, các tham số được truyền vào để tạo flavor m1.nano
với các thông số:
--id 0
: ID của flavor là 0.--vcpus 1
: Flavor có 1 vCPU.--ram 64
: Flavor có dung lượng RAM là 64MB.--disk 1
: Flavor có dung lượng đĩa cứng là 1GB.
Flavor m1.nano là một trong những flavor nhỏ nhất có thể tạo trên OpenStack, được sử dụng để chạy các instance với yêu cầu tài nguyên thấp.
$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
+----------------------------+---------+
| Field | Value |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| disk | 1 |
| id | 0 |
| name | m1.nano |
| os-flavor-access:is_public | True |
| properties | |
| ram | 64 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 1 |
+----------------------------+---------+
3. Generate a key pair
Các lệnh dưới là một chuỗi các lệnh được thực thi trên một command line interface của OpenStack. Nó có ý nghĩa như sau:
- “. demo-openrc” sẽ đặt các biến môi trường để kết nối tới API endpoint của OpenStack. Điều này cho phép người dùng sử dụng OpenStack CLI để tương tác với các dịch vụ của OpenStack.
- “ssh-keygen -q -N “” ” sẽ tạo một cặp khóa công khai và khóa riêng tư. Cặp khóa này được sử dụng để xác thực vào máy ảo mà bạn sẽ tạo ra sau này. Tùy chọn “-q” sẽ tắt các thông báo của ssh-keygen, “-N” xác định passphrase của khóa riêng tư.
- “openstack keypair create –public-key ~/.ssh/id_rsa.pub mykey” sẽ tạo một khóa công khai trong OpenStack từ khóa công khai được tạo bởi ssh-keygen. Khóa công khai này được đặt tên là “mykey”. Khóa công khai này sẽ được sử dụng để truy cập vào máy ảo mà bạn sẽ tạo.
$ . demo-openrc
$ ssh-keygen -q -N ""
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
+-------------+-------------------------------------------------+
| Field | Value |
+-------------+-------------------------------------------------+
| fingerprint | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
| name | mykey |
| user_id | 58126687cbcc4888bfa9ab73a2256f27
Xác nhận lại key pair đã tạo thành công.
$ openstack keypair list
+-------+-------------------------------------------------+
| Name | Fingerprint |
+-------+-------------------------------------------------+
| mykey | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
+-------+-------------------------------------------------+
4. Add security group rules
Các lệnh này được sử dụng để tạo các luật trong nhóm bảo mật (security group) của OpenStack.
- Lệnh
openstack security group rule create --proto icmp default
được sử dụng để tạo một luật cho phép giao thức ICMP (Internet Control Message Protocol), cho phép các gói tin kiểm tra kết nối hoạt động giữa các máy tính trong mạng. Đây là một giao thức quan trọng cho việc kiểm tra và chẩn đoán sự cố trong mạng.
$ openstack security group rule create --proto icmp default
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| created_at | 2017-03-30T00:46:43Z |
| description | |
| direction | ingress |
| ether_type | IPv4 |
| id | 1946be19-54ab-4056-90fb-4ba606f19e66 |
| name | None |
| port_range_max | None |
| port_range_min | None |
| project_id | 3f714c72aed7442681cbfa895f4a68d3 |
| protocol | icmp |
| remote_group_id | None |
| remote_ip_prefix | 0.0.0.0/0 |
| revision_number | 1 |
| security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
| updated_at | 2017-03-30T00:46:43Z |
+-------------------+--------------------------------------+
Lệnh openstack security group rule create --proto tcp --dst-port 22 default
được sử dụng để tạo một luật cho phép kết nối đến cổng 22 trên các máy tính trong nhóm bảo mật. Cổng này thường được sử dụng để truy cập vào các máy chủ từ xa bằng cách sử dụng giao thức SSH (Secure Shell), vì vậy luật này cho phép các kết nối SSH đến các máy tính trong nhóm bảo mật.
$ openstack security group rule create --proto tcp --dst-port 22 default
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| created_at | 2017-03-30T00:43:35Z |
| description | |
| direction | ingress |
| ether_type | IPv4 |
| id | 42bc2388-ae1a-4208-919b-10cf0f92bc1c |
| name | None |
| port_range_max | 22 |
| port_range_min | 22 |
| project_id | 3f714c72aed7442681cbfa895f4a68d3 |
| protocol | tcp |
| remote_group_id | None |
| remote_ip_prefix | 0.0.0.0/0 |
| revision_number | 1 |
| security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
| updated_at | 2017-03-30T00:43:35Z |
+-------------------+--------------------------------------+
$ . demo-openrc
$ openstack flavor list
+----+---------+-----+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+---------+-----+------+-----------+-------+-----------+
| 0 | m1.nano | 64 | 1 | 0 | 1 | True |
+----+---------+-----+------+-----------+-------+-----------+
$ openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 390eb5f7-8d49-41ec-95b7-68c0d5d54b34 | cirros | active |
+--------------------------------------+--------+--------+
$ openstack network list
+--------------------------------------+--------------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+--------------+--------------------------------------+
| 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c |
| b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider | 310911f6-acf0-4a47-824e-3032916582ff |
+--------------------------------------+--------------+--------------------------------------+
$ openstack security group list
+--------------------------------------+---------+------------------------+----------------------------------+
| ID | Name | Description | Project |
+--------------------------------------+---------+------------------------+----------------------------------+
| dd2b614c-3dad-48ed-958b-b155a3b38515 | default | Default security group | a516b957032844328896baa01e0f906c |
+--------------------------------------+---------+------------------------+----------------------------------+
$ openstack server create --flavor m1.nano --image cirros \
--nic net-id=PROVIDER_NET_ID --security-group default \
--key-name mykey provider-instance
+-----------------------------+-----------------------------------------------+
| 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 | PwkfyQ42K72h |
| config_drive | |
| created | 2017-03-30T00:59:44Z |
| flavor | m1.nano (0) |
| hostId | |
| id | 36f3130e-cf1b-42f8-a80b-ebd63968940e |
| image | cirros (97e06b44-e9ed-4db4-ba67-6e9fc5d0a203) |
| key_name | mykey |
| name | provider-instance |
| progress | 0 |
| project_id | 3f714c72aed7442681cbfa895f4a68d3 |
| properties | |
| security_groups | name='default' |
| status | BUILD |
| updated | 2017-03-30T00:59:44Z |
| user_id | 1a421c69342348248c7696e3fd6d4366 |
| volumes_attached | |
+-----------------------------+-----------------------------------------------+
$ openstack server list
+--------------------------------------+-------------------+--------+------------------------+------------+
| ID | Name | Status | Networks | Image Name |
+--------------------------------------+-------------------+--------+------------------------+------------+
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance | ACTIVE | provider=203.0.113.103 | cirros |
+--------------------------------------+-------------------+--------+------------------------+------------+
$ openstack console url show provider-instance
+-------+---------------------------------------------------------------------------------+
| Field | Value |
+-------+---------------------------------------------------------------------------------+
| type | novnc |
| url | http://controller:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493 |
+-------+---------------------------------------------------------------------------------+
$ ping -c 4 203.0.113.1
PING 203.0.113.1 (203.0.113.1) 56(84) bytes of data.
64 bytes from 203.0.113.1: icmp_req=1 ttl=64 time=0.357 ms
64 bytes from 203.0.113.1: icmp_req=2 ttl=64 time=0.473 ms
64 bytes from 203.0.113.1: icmp_req=3 ttl=64 time=0.504 ms
64 bytes from 203.0.113.1: icmp_req=4 ttl=64 time=0.470 ms
--- 203.0.113.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms
$ ping -c 4 openstack.org
PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms
--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
$ ssh cirros@203.0.113.103
The authenticity of host '203.0.113.102 (203.0.113.102)' can't be established.
RSA key fingerprint is ed:05:e9:e7:52:a0:ff:83:68:94:c7:d1:f2:f8:e2:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.102' (RSA) to the list of known hosts.