一、GUI(ダッシュボード)でのクラウドサーバー提供#
admin ユーザーはクラウドのスーパー管理者です
admin はアイデンティティを管理します

一、テナント(プロジェクト)の作成

二、ユーザー作成とプロジェクト紐付け


三、イメージのアップロード:管理者がアップロードしたイメージはパブリック(全テナントが利用可能)に設定でき、一般ユーザーがアップロードしたイメージはプライベートでテナント内でのみ共有されます。

四、フレーバーの作成

五、外部ネットワークの作成



L3 Agent が配置されたノードがネットワークノードとなります

テナントとしてログイン
一、テナント身份でログイン

二、プライベートネットワークとサブネット(VPC)の作成



三、ルーター作成と外部ネットワーク・プライベートネットワークの接続




四、セキュリティグループとルールの作成

五、キーペアの作成

六、クラウドサーバー提供と浮動 IP の紐付け




七、テスト(ログイン・ホスト名・ネットワーク)
cloud-init がホスト名やパスワードなどのカスタム情報を初期化します

例えば 20GB のディスクを占有し、快適に動作させるために 4GB のメモリを必要とする大きなイメージを作成したとします。しかしテナントはそれを知らないため、サーバー提供時に 10GB ディスク・2GB メモリのフレーバーを選んで失敗し、原因も分かりません。そこでイメージ登録時に「最小ディスク 20GB・最小メモリ 4GB」を指定しておけば、後にフレーバーを選ぶ際にその条件を満たさないフレーバーは選択できず、条件を満たすものだけを選べるようになります。
以下は OpenStack Nova において新たに追加されたコンピュートノードを所属する Cell データベースに発見・マッピングするために使う重要なコマンドです。Cells v2 アーキテクチャでは、各コンピュートノードはこの登録ステップを経る必要があり、さもないとスケジューラがその上にインスタンスを配置できず、API にもそのホストが表示されません。
1
|
[root@Controller ~(keystone_admin)]# nova-manage cell_v2 discover_hosts --verbose
|
クラウドサーバーはルーター経由でインターネットに出られます。浮动 IP を設定する意味は、外部にサービスを公開することです(Web サーバーは SNAT で外に出られますが、リモートユーザーはそのサービスに入ってこられません)。以下は OpenStack が裏で使っている iptables ルールを確認する方法です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
[root@Controller ~(keystone_admin)]# ip netns
qrouter-aa6470e8-9c0e-4a50-9be6-71566d0c3903 (id: 1)
qdhcp-a82a6d9e-26ec-497f-8f71-68d8395386ad (id: 0)
[root@Controller ~(keystone_admin)]# ip netns exec qrouter-aa6470e8-9c0e-4a50-9be6-71566d0c3903 ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
33: qg-d9305000-ef: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether fa:16:3e:18:37:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.106/24 brd 192.168.10.255 scope global qg-d9305000-ef
valid_lft forever preferred_lft forever
inet 192.168.10.182/32 brd 192.168.10.182 scope global qg-d9305000-ef
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe18:3769/64 scope link
valid_lft forever preferred_lft forever
34: qr-eb02e78e-a3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether fa:16:3e:18:b8:5f brd ff:ff:ff:ff:ff:ff
inet 192.168.20.254/24 brd 192.168.20.255 scope global qr-eb02e78e-a3
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe18:b85f/64 scope link
valid_lft forever preferred_lft forever
[root@Controller ~(keystone_admin)]# ip netns exec qrouter-aa6470e8-9c0e-4a50-9be6-71566d0c3903 iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
neutron-l3-agent-PREROUTING all -- 0.0.0.0/0 0.0.0.0/0
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
neutron-l3-agent-POSTROUTING all -- 0.0.0.0/0 0.0.0.0/0
neutron-postrouting-bottom all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
neutron-l3-agent-OUTPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain neutron-l3-agent-OUTPUT (1 references)
target prot opt source destination
DNAT all -- 0.0.0.0/0 192.168.10.182 to:192.168.20.197
Chain neutron-l3-agent-POSTROUTING (1 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ! ctstate DNAT
Chain neutron-l3-agent-PREROUTING (1 references)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 169.254.169.254 tcp dpt:80 redir ports 9697
DNAT all -- 0.0.0.0/0 192.168.10.182 to:192.168.20.197
Chain neutron-l3-agent-float-snat (1 references)
target prot opt source destination
SNAT all -- 192.168.20.197 0.0.0.0/0 to:192.168.10.182 random-fully
Chain neutron-l3-agent-snat (1 references)
target prot opt source destination
neutron-l3-agent-float-snat all -- 0.0.0.0/0 0.0.0.0/0
SNAT all -- 0.0.0.0/0 0.0.0.0/0 to:192.168.10.106 random-fully
SNAT all -- 0.0.0.0/0 0.0.0.0/0 mark match ! 0x2/0xffff ctstate DNAT to:192.168.10.106 random-fully
Chain neutron-postrouting-bottom (1 references)
target prot opt source destination
neutron-l3-agent-snat all -- 0.0.0.0/0 0.0.0.0/0 /* Perform source NAT on outgoing traffic. */
|
実験課題:インターネットにアクセスできるクラウドサーバーを作成し、yum リポジトリを Alibaba Cloud に向け、httpd パッケージをインストールしてサービスを起動し、外部ホストから Web ページ http://192.168.10.182 にアクセスする。

Compute ホストは本質的に KVM ハイパーバイザーです。OpenStack がクラウドサーバーを提供する際、スケジューラがいずれかの Compute ホストに分散配置します。

二、コマンドラインでのクラウドサーバー提供#
1
|
[root@Controller ~(keystone_admin)]# cp keystonerc_admin keystonerc_zlm
|
要件一:コマンドラインで全リソースを削除
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@Controller ~(keystone_zlm)]# cat keystonerc_zlm
unset OS_SERVICE_TOKEN
export OS_USERNAME=zlm
export OS_PASSWORD='000000'
export OS_REGION_NAME=RegionOne
export OS_AUTH_URL=http://192.168.100.10:5000/v3
export PS1='[\u@\h \W(keystone_zlm)]\$ '
export OS_PROJECT_NAME=LMandMY_HOME
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
[root@Controller ~(keystone_zlm)]# source keystonerc_zlm
|
- クラウドサーバーの削除
1
2
3
4
5
6
7
|
[root@Controller ~(keystone_zlm)]# openstack server list
+--------------------------------------+------+--------+--------------------------------------+------------------+--------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+------+--------+--------------------------------------+------------------+--------+
| 44f0fa66-94ed-44ac-a9ae-0a3a13c1faba | web | ACTIVE | VPC01=192.168.20.197, 192.168.10.182 | CentOS 8.4 64bit | m3.web |
+--------------------------------------+------+--------+--------------------------------------+------------------+--------+
[root@Controller ~(keystone_zlm)]# openstack server delete 44f0fa66-94ed-44ac-a9ae-0a3a13c1faba
|
- ボリュームの削除
1
2
|
[root@Controller ~(keystone_zlm)]# openstack volume list
[root@Controller ~(keystone_zlm)]# openstack volume delete data01
|
- ルーターの削除
1
2
3
4
5
|
[root@Controller ~(keystone_zlm)]# openstack router list
[root@Controller ~(keystone_zlm)]# openstack router show router01
[root@Controller ~(keystone_zlm)]# openstack subnet list
[root@Controller ~(keystone_zlm)]# openstack router remove subnet router01 subnet01
[root@Controller ~(keystone_zlm)]# openstack router delete router01
|
- セキュリティグループの削除
1
2
|
[root@Controller ~(keystone_zlm)]# openstack security group list
[root@Controller ~(keystone_zlm)]# openstack security group delete SG01
|
- ネットワークの削除
1
2
|
[root@Controller ~(keystone_zlm)]# openstack network list
[root@Controller ~(keystone_zlm)]# openstack network delete VPC01
|
admin 身份に切り替えて、パブリックネットワーク・イメージ・フレーバー・テナント・ユーザーなどを削除します。
1
|
[root@Controller ~(keystone_zlm)]# source keystonerc_admin
|
- パブリックネットワークの削除
1
2
|
[root@Controller ~(keystone_admin)]# openstack network list
[root@Controller ~(keystone_admin)]# openstack network delete public
|
- イメージの削除
1
2
3
4
|
[root@Controller ~(keystone_admin)]# openstack image list
[root@Controller ~(keystone_admin)]# openstack image delete e3336d90-e673-4b1b-82ec-69b70fd6402c
[root@Controller ~(keystone_admin)]# openstack image delete cec813dd-8141-4a99-8883-805ac6e3ec17
[root@Controller ~(keystone_admin)]# openstack image delete c6ffe7db-ccb0-4df4-8715-e8ce0fd5dc7d
|
- フレーバーの削除
1
2
|
[root@Controller ~(keystone_admin)]# openstack flavor list
[root@Controller ~(keystone_admin)]# openstack flavor delete m3.web
|
- テナントとユーザーの削除
1
2
3
4
|
[root@Controller ~(keystone_admin)]# openstack project list
[root@Controller ~(keystone_admin)]# openstack project delete LMandMY_HOME
[root@Controller ~(keystone_admin)]# openstack user list
[root@Controller ~(keystone_admin)]# openstack user delete zlm
|
要件二:コマンドラインで全リソースを作成—サーバー提供・浮动 IP 追加・サーバーアクセス・ネットワーク作成
1
|
[root@Controller ~(keystone_admin)]# source keystonerc_admin
|
- プロジェクトとユーザーを作成し紐付け
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@Controller ~(keystone_admin)]# openstack project create LMandMY_HOME
[root@Controller ~(keystone_admin)]# openstack user create --project LMandMY_HOME --project-domain Default --password-prompt zlm
[root@Controller ~(keystone_admin)]# openstack role list
+----------------------------------+------------------+
| ID | Name |
+----------------------------------+------------------+
| 0adc17230a5a434195d5995863280b3d | heat_stack_owner |
| 2e5abdde67bb4f23bbf15454616af53e | ResellerAdmin |
| 46d49fecd6f4411bbd72d0b9f575bcae | admin |
| 5f5bf78c40b143bbb2df74fc855ea204 | reader |
| 84ebb81407f644b18e1a529e0c317f16 | member |
| b83f4c27c83445489554e988fb9af5a1 | heat_stack_user |
| b8f8cd45891240bfa0f80e93f0e37ab9 | _member_ |
| ebc22a15458c4712bf0dd4f4de09e0bf | SwiftOperator |
+----------------------------------+------------------+
[root@Controller ~(keystone_admin)]# openstack role add --user zlm --project LMandMY_HOME b8f8cd45891240bfa0f80e93f0e37ab9
|
- イメージのアップロード
1
|
[root@Controller ~(keystone_admin)]# openstack image create --file /data/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
|
- フレーバーの作成
1
|
[root@Controller ~(keystone_admin)]# openstack flavor create --ram 1024 --disk 10 --public m3.web
|
- パブリックネットワークとサブネットの作成
1
|
[root@Controller ~(keystone_admin)]# openstack network create --external --share --provider-network-type flat --provider-physical-network extnet --project LMandMY_HOME public
|
サブネットの作成
1
|
[root@Controller ~(keystone_admin)]# openstack subnet create --no-dhcp --subnet-range 192.168.10.0/24 --allocation-pool start=192.168.10.100,end=192.168.10.200 --gateway 192.168.10.1 --network public publicsub01
|
テナント身份に切り替え
1
|
[root@Controller ~(keystone_admin)]# source keystonerc_zlm
|
- ネットワークとサブネットの作成
1
|
[root@Controller ~(keystone_zlm)]# openstack network create VPC01
|
サブネットの作成
1
|
[root@Controller ~(keystone_zlm)]# openstack subnet create --network VPC01 --subnet-range 192.168.20.0/24 --dhcp --gateway 192.168.20.254 --dns-nameserver 114.114.114.114 subnet01
|
- ルーターの作成
1
2
3
|
[root@Controller ~(keystone_zlm)]# openstack router create router01
[root@Controller ~(keystone_zlm)]# openstack router add subnet router01 subnet01
[root@Controller ~(keystone_zlm)]# openstack router set --external-gateway public router01
|
- セキュリティグループの作成
1
|
[root@Controller ~(keystone_zlm)]# openstack security group create SG01
|
ICMP プロトコルを許可
1
|
[root@Controller ~(keystone_zlm)]# openstack security group rule create --ingress --protocol icmp --remote-ip 0.0.0.0/0 SG01
|
SSH サービスを許可
1
|
[root@Controller ~(keystone_zlm)]# openstack security group rule create --ingress --protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0 SG01
|
ポート 80 を許可
1
|
[root@Controller ~(keystone_zlm)]# openstack security group rule create --ingress --protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0 SG01
|
- フローティング IP の作成
1
|
[root@Controller ~(keystone_zlm)]# openstack floating ip create public
|
- キーペアの作成
1
|
[root@Controller ~(keystone_zlm)]# openstack key create key01 > key01.pem
|
- クラウドサーバーの作成
1
2
3
4
5
6
7
8
|
[root@Controller ~(keystone_zlm)]# openstack network list
+--------------------------------------+--------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+--------+--------------------------------------+
| a82a6d9e-26ec-497f-8f71-68d8395386ad | VPC01 | 40bd75e0-3d22-4e7b-8659-8a6c0a44e3aa |
| d99ba601-05e3-4f1f-88b8-f0587c6a5f6e | public | 5d39db23-8359-4e33-bde7-0f9ac6a0f7c7 |
+--------------------------------------+--------+--------------------------------------+
[root@Controller ~(keystone_zlm)]# openstack server create --image cirros --security-group SG01 --key-name key01 --flavor m3.web --nic net-id=a82a6d9e-26ec-497f-8f71-68d8395386ad web
|
浮动 IP をクラウドサーバーに紐付け
1
2
|
[root@Controller ~(keystone_zlm)]# openstack port list
[root@Controller ~(keystone_zlm)]# openstack floating ip set --port=46ba21d5-6f14-4693-a215-5a6fc8781adf 192.168.10.182
|
クラウドサーバーへのアクセス
1
2
|
[root@Controller ~(keystone_zlm)]# chmod 400 key01.pem
[root@Controller ~(keystone_zlm)]# ssh -i key01.pem cirros@192.168.10.182
|
外部ネットワークの NIC が通信できない場合
1
|
[root@Controller ~(keystone_zlm)]# ifup br-ex ; ifup ens224
|