一、GUI(ダッシュボード)でのクラウドサーバー提供

admin ユーザーはクラウドのスーパー管理者です

admin はアイデンティティを管理します

image-20261004133254743

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

image-20261004133333694

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

image-20261004133444084

image-20261004133543426

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

image-20261004133840621

四、フレーバーの作成

image-20261004133940119

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

image-20261004180757779

image-20261004181355263

image-20261004181528225

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

テナントとしてログイン

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

image-20261004140319831

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

image-20261004140615180

image-20261004181925830

image-20261004140927338

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

image-20261004143700506

image-20261004182358026

image-20261004194243028

image-20261004183707764

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

image-20261004182721297

五、キーペアの作成

image-20261004182823825

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

image-20261004183111306

image-20261004183150078

image-20261004183251232

image-20261004194719509

七、テスト(ログイン・ホスト名・ネットワーク)

cloud-init がホスト名やパスワードなどのカスタム情報を初期化します

image-20261004201528038

例えば 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 にアクセスする。

image-20261004202716013

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

image-20261004210535149

二、コマンドラインでのクラウドサーバー提供

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. クラウドサーバーの削除
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. ボリュームの削除
1
2
[root@Controller ~(keystone_zlm)]# openstack volume list
[root@Controller ~(keystone_zlm)]# openstack volume delete data01
  1. ルーターの削除
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. セキュリティグループの削除
1
2
[root@Controller ~(keystone_zlm)]# openstack security group list
[root@Controller ~(keystone_zlm)]# openstack security group delete SG01
  1. ネットワークの削除
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. パブリックネットワークの削除
1
2
[root@Controller ~(keystone_admin)]# openstack network list
[root@Controller ~(keystone_admin)]# openstack network delete public
  1. イメージの削除
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. フレーバーの削除
1
2
[root@Controller ~(keystone_admin)]# openstack flavor list
[root@Controller ~(keystone_admin)]# openstack flavor delete m3.web
  1. テナントとユーザーの削除
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. プロジェクトとユーザーを作成し紐付け
 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. イメージのアップロード
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. フレーバーの作成
1
[root@Controller ~(keystone_admin)]# openstack flavor create --ram 1024 --disk 10  --public m3.web
  1. パブリックネットワークとサブネットの作成
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. ネットワークとサブネットの作成
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. ルーターの作成
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. セキュリティグループの作成
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
  1. フローティング IP の作成
1
[root@Controller ~(keystone_zlm)]# openstack floating ip  create  public
  1. キーペアの作成
1
[root@Controller ~(keystone_zlm)]# openstack key create key01 > key01.pem
  1. クラウドサーバーの作成
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