ばじる

ふと書いてみようかなと気になった話題について

OpenStack構築

やりたいこと

自宅のノートPCでOpenStack環境を作ってみたい!
ということで、OpenStack環境でインスタンスへアクセスできるようになるところまでを記事にしてみました。

目次

環境説明

・PC:ノートPC (CPU:AMD Ryzen 4800H,メモリ:16GB)
・仮想化ソフト:VirtualBox 6.1.12
・仮想ホスト:CentOS 7.8 (vCPU:2,メモリ:6GB,HDD:80GB,NIC:1)
・OpenStackソフト:RDO Packstack

構成図

f:id:arctrish:20200810050340p:plain

仮想化ソフト

VirtualBoxにて下記内容の新規仮想ホストを作成する
・vCPU:3
・メモリ:6GB
・HDD:80GB
NIC:1
 ブリッジアダプター(プロミスキャスモード:すべて許可)

仮想ホスト

CentOSダウンロード

下記サイトでCentOS7.8(CentOS-7-x86_64-DVD-2003.iso)をダウンロードする
 https://www.centos.org/download/

CentOSインストール

最小構成でインストールし、以下を設定する
・ホストネーム:openstack
NIC設定:enp0s3
 IPアドレス:192.168.11.50/24
 GWアドレス:192.168.11.1
 DNSアドレス:192.168.11.1
 自動的に接続:チェックする
・OSインストールが終わったら、TeratermなどでSSHログインする

IPv6を無効化する

[root@openstack ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf

NetworkManagerを無効化する

[root@openstack ~]# systemctl stop NetworkManager
[root@openstack ~]# systemctl disable NetworkManager

SELINUXを無効化する

[root@openstack ~]# sed -i -e "s/^SELINUX=enforcing$/SELINUX=disabled/g" /etc/selinux/config

firewalldを無効化する

[root@openstack ~]# systemctl stop firewalld
[root@openstack ~]# systemctl disable firewalld

一度再起動する

[root@openstack ~]# reboot

リポジトリをインストールする

うちの環境では下記コマンドでダウンロードするとタイムアウトしてしまったので、ブラウザでファイルをダウンロードして、直接インストールした。

[root@openstack ~]# yum install -y https://www.rdoproject.org/repos/rdo-release.rpm

ロケールを英語に変更する

[root@openstack ~]# echo "LANG=en_US.utf-8" >> /etc/environment
[root@openstack ~]# echo "LC_ALL=en_US.utf-8" >> /etc/environment

CentOSを最新版にアップデートする

[root@openstack ~]# yum update -y

Packstackをインストールする

[root@openstack ~]# yum install -y openstack-packstack

OpenStackを自動構築する

インストール完了まで20分ほどかかる

[root@openstack ~]# packstack --allinone --provision-demo=n --default-password=password --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:enp0s3 --os-neutron-ml2-type-drivers=vxlan,flat

<オプションの説明>
--allinone:All in one環境をインストール
--provision-demo=n:デモ環境をインストールしない
--default-password=password:パスワードをpasswordにする
--os-neutron-ovs-bridge-mappings=extnet:br-ex:ovs-bridgeでexnetとbr-exをマッピングする
--os-neutron-ovs-bridge-interfaces=br-ex:enp0s3:ovs-bridge(br-ex)のインターフェースをenp0s3とする
--os-neutron-ml2-type-drivers=vxlan,flat:ML2 プラグインでvxlanとflatドライバーを有効にする

ブリッジ設定を追加する

[root@openstack ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# vi ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.11.50
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
DNS1=192.168.11.1
ONBOOT=yes

NIC設定を変更する

[root@openstack network-scripts]# vi ifcfg-enp0s3
DEVICE=enp0s3
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes

一度再起動する

[root@openstack ~]# reboot

external_networkを作成する

[root@openstack ~]# . keystonerc_admin
[root@openstack ~(keystone_admin)]# neutron net-create external_network --provider:network_type flat --provider:physical_network extnet  --router:external
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2020-08-09T17:39:16Z                 |
| description               |                                      |
| id                        | d8075ea9-19ca-4240-b31e-a08f37047287 |
| ipv4_address_scope        |                                      |
| ipv6_address_scope        |                                      |
| is_default                | False                                |
| mtu                       | 1500                                 |
| name                      | external_network                     |
| port_security_enabled     | True                                 |
| project_id                | df719ad4521642cdb2afc62a8b41751f     |
| provider:network_type     | flat                                 |
| provider:physical_network | extnet                               |
| provider:segmentation_id  |                                      |
| qos_policy_id             |                                      |
| revision_number           | 1                                    |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | df719ad4521642cdb2afc62a8b41751f     |
| updated_at                | 2020-08-09T17:39:17Z                 |
+---------------------------+--------------------------------------+

<オプションの説明>
--provider:network_type flat:プロバイダーネットワークタイプをflatにする
--provider:physical_network extnet:プロバイダー物理ネットワークをextnetとする
--router:external:外部ネットワークに接続する

external_networkにpublic_subnetを作成する

[[root@openstack ~(keystone_admin)]# neutron subnet-create --name public_subnet --enable_dhcp=False --allocation-pool=start=192.168.11.60,end=192.168.11.99 \
> --gateway=192.168.11.1 external_network 192.168.11.0/24
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Created a new subnet:
+-------------------+----------------------------------------------------+
| Field             | Value                                              |
+-------------------+----------------------------------------------------+
| allocation_pools  | {"start": "192.168.11.60", "end": "192.168.11.99"} |
| cidr              | 192.168.11.0/24                                    |
| created_at        | 2020-08-09T17:41:43Z                               |
| description       |                                                    |
| dns_nameservers   |                                                    |
| enable_dhcp       | False                                              |
| gateway_ip        | 192.168.11.1                                       |
| host_routes       |                                                    |
| id                | e7c2a895-1dfe-4a73-a8b9-90e6c26aff95               |
| ip_version        | 4                                                  |
| ipv6_address_mode |                                                    |
| ipv6_ra_mode      |                                                    |
| name              | public_subnet                                      |
| network_id        | d8075ea9-19ca-4240-b31e-a08f37047287               |
| project_id        | df719ad4521642cdb2afc62a8b41751f                   |
| revision_number   | 0                                                  |
| service_types     |                                                    |
| subnetpool_id     |                                                    |
| tags              |                                                    |
| tenant_id         | df719ad4521642cdb2afc62a8b41751f                   |
| updated_at        | 2020-08-09T17:41:43Z                               |
+-------------------+----------------------------------------------------+

<オプションの説明>
--name public_subnet:名前をpublic_subnetにする
--enable_dhcp=False:dhcpを無効にする
--allocation-pool=start=192.168.11.60,end=192.168.11.99:IPアドレスの範囲を192.168.11.60~99にする
--gateway=192.168.11.1 external_network 192.168.11.0/24:192.168.11.1をGWに設定し、external_networkに192.168.11.0/24のサブネットを作る

openstack

初期設定確認

■ブラウザからopenstack GUIにログインする

admin/passowrd
http://192.168.11.50/dashboard/
f:id:arctrish:20200803020505p:plain

■ログインできることを確認する

ログインすると以下のような概要画面が表示される
f:id:arctrish:20200803020635p:plain

■作成したネットワークがあることを確認する

[プロジェクト] - [ネットワーク] - [ネットワーク]を選択し、先ほどコマンドで作成したexternal_networkがあることを確認する
f:id:arctrish:20200803020954p:plain

■作成したサブネットがあることを確認する

続いて、[external_network] - [サブネット]タブを選択し、先ほどコマンドで作成したpublic_subnetがあることを確認する
f:id:arctrish:20200804230505p:plain

■ネットワークトポロジーを確認する

[プロジェクト] - [ネットワーク] - [ネットワークトポロジー]を選択し、ネットワーク設定を図で確認する
f:id:arctrish:20200804230906p:plain

プロジェクトを作成する

■プロジェクト管理画面を開く

[ユーザー管理] - [プロジェクト] を選択する。servicesとadminがあることがわかる
f:id:arctrish:20200804233121p:plain

■新規プロジェクトを作成する

[プロジェクトの作成] ボタンをクリックし、[名前]フィールドにtenant01を入力し、[プロジェクトの作成]ボタンをクリックする
f:id:arctrish:20200804233504p:plain

■プロジェクトが作成されたことを確認する

tenant01プロジェクトが追加された
f:id:arctrish:20200804233612p:plain

■クォータを設定画面を開く

上記画面のtenant01の右側にある[アクション] のドロップダウン矢印をクリックし、[クォータの変更]を選択し、クォータ設定画面を開く
f:id:arctrish:20200804234513p:plain

■クォータを設定する

下記パラメータで設定し、[保存]ボタンをクリックする
◎コンピュート
インスタンス:6
・仮想CPU:4
◎ボリューム
・ボリュームとスナップショットの合計サイズ (GiB):100
◎ネットワーク
・Floating IP:40

フレーバーを作成する

■フレーバ設定画面を開く

[管理] - [コンピュート] - [フレーバー]を選択し、フレーバー設定画面を開く
f:id:arctrish:20200804235323p:plain

■新規フレーバー作成画面を開く

[フレーバーの作成]ボタンをクリックし、フレーバ作成画面を開く
f:id:arctrish:20200804235605p:plain

■新規フレーバーを作成する

下記パラメータで設定し、[フレーバーの作成]ボタンをクリックする
・名前:sales01
・仮想CPU:1
・メモリー:1280
・ルートディスク:8
スワップディスク:512

■フレーバーが作成されたことを確認する

sales01フレーバーが作成された
f:id:arctrish:20200805000010p:plain

ユーザーを作成する

■ユーザー管理画面を開く

[ユーザー管理] - [ ユーザー]を選択し、ユーザー管理画面を開く
f:id:arctrish:20200805000406p:plain

■新規ユーザー作成画面を開く

[ユーザーの作成] ボタンをクリックし、ユーザーの作成画面を開く
f:id:arctrish:20200805000704p:plain

■新規ユーザーを作成する

下記パラメータで設定し、[ユーザーの作成]ボタンをクリックする
・ユーザー名:tenant01
・パスワード:password
・パスワード(確認):password
・主プロジェクト:tenant01

■ユーザーが作成されたことを確認する

tenant01ユーザーが作成された
f:id:arctrish:20200805001102p:plain

■tenat01ユーザーでログインしなおす

右上の[admin]プルダウンから、[ログアウト]を選択し、ログイン画面でtenant01ユーザでログインしなおす

■クォータ設定を確認する

先ほど設定したクォータ設定が反映されていることを確認する
f:id:arctrish:20200805001441p:plain

イメージを作成する

■イメージ管理画面を開く

[プロジェクト] - [コンピュート] - [イメージ]を選択し、イメージ管理画面を開く
f:id:arctrish:20200805001830p:plain

■OSイメージをダウンロードする

下記URLから[Fedora 32 Cloud Base Images] - [Cloud Base image for Openstack] (gcow2)をダウンロードする
alt.fedoraproject.org

■イメージの作成画面を開く

[イメージの作成] ボタンをクリックし、イメージの作成画面を開く
f:id:arctrish:20200805002314p:plain

■新規イメージを作成する

下記パラメータで設定し、[イメージの作成]ボタンをクリックする
・イメージ名:Fedora 32
・ファイル:ダウンロードイメージを参照
・形式:QCOW2
・最小メモリー:1024

■イメージが作成されたことを確認する

Fedora 32イメージが作成された
f:id:arctrish:20200805003114p:plain

internal_networkを作成する

■ネットワーク管理画面を開く

[プロジェクト] - [ネットワーク] - [ネットワーク]を選択し、ネットワーク管理画面を開く
f:id:arctrish:20200810041234p:plain

■ネットワークの作成画面を開く

[ネットワークの作成] ボタンをクリックし、ネットワークの作成画面を開く
f:id:arctrish:20200805015933p:plain

■ネットワークを作成する

下記パラメータで設定し、[作成]ボタンをクリックする
◎ネットワーク
・ネットワーク名:internal_network
◎サブネット
・サブネット名:private_subnet
・ネットワークアドレス:192.168.1.0/24
ゲートウェイIP:192.168.1.1
◎サブネットの詳細
・IP アドレス割り当てプール:192.168.1.2,192.168.1.254
DNS サーバー:8.8.8.8

■ネットワークが作成されたことを確認する

internal_networkが作成された
f:id:arctrish:20200810041519p:plain

ルーターを作成する

ルーター管理画面を開く

[プロジェクト] - [ネットワーク] - [ルーター]を選択し、ルーター管理画面を開く
f:id:arctrish:20200805005145p:plain

ルーターの作成画面を開く

[ルーターの作成] ボタンをクリックし、ルーターの作成画面を開く
f:id:arctrish:20200805005450p:plain

■新規ルーターを作成する

下記パラメータで設定し、[ルーターの作成]ボタンをクリックする
ルーター名:router01
・外部ネットワーク:external_network

ルーターが作成されたことを確認する

router01が作成された
f:id:arctrish:20200805005722p:plain

■インターフェース管理画面を開く

上記画面のrouter01をクリックし、インターフェース管理を開く
f:id:arctrish:20200810041744p:plain

■インターフェースの追加画面を開く

[インターフェースの追加] ボタンをクリックし、インターフェースの追加画面を開く
f:id:arctrish:20200805010400p:plain

■インターフェースを追加する

下記パラメータで設定し、[送信]ボタンをクリックする
・サブネット:internal_network

■インターフェースが追加されたことを確認する

内部インターフェースが作成された。IPアドレスは自動で192.168.1.1が付与される。
f:id:arctrish:20200810041906p:plain

■ネットワークトポロジーを確認する

[プロジェクト] - [ネットワーク] - [ネットワークトポロジー]を選択し、[標準]ボタンをクリックし、ネットワーク設定を図で確認する。
f:id:arctrish:20200810041957p:plain

セキュリティーグループを作成する

■セキュリティーグループ管理画面を開く

[プロジェクト] - [ネットワーク] - [セキュリティーグループ]を選択し、セキュリティーグループ管理画面を開く
f:id:arctrish:20200805012247p:plain

■セキュリティーグループの作成画面を開く

[セキュリティーグループの作成] ボタンをクリックし、セキュリティーグループの作成画面を開く
f:id:arctrish:20200805013854p:plain

■セキュリティーグループを作成する

下記パラメータで設定し、[セキュリティーグループの作成]ボタンをクリックする
・名前:mysecurity01
セキュリティーグループのルール管理画面が開く
f:id:arctrish:20200805012514p:plain

■ルールの追加画面を開く

[ルールの追加] ボタンをクリックし、ルールの作成画面を開く
f:id:arctrish:20200805012736p:plain

■ICMPルールを追加する

下記パラメータで設定し、[追加]ボタンをクリックする
・ルール:カスタムICMPルール

SSHルールを追加する

同様に[ルールの追加] ボタンをクリックしルールの作成画面を開き、下記パラメータで設定し、[追加]ボタンをクリックする
・ルール:SSH

■ルールが追加されたことを確認する

f:id:arctrish:20200805013121p:plain

公開鍵を作成する

■キーペア管理画面を開く

[プロジェクト] - [コンピュート] - [キーペア]を選択し、キーペア管理画面を開く
f:id:arctrish:20200805013410p:plain

■キーペアの作成画面を開く

[キーペアの作成] ボタンをクリックし、キーペアの作成画面を開く
f:id:arctrish:20200805014005p:plain

■キーペアを作成する

下記パラメータで設定し、[キーペアの作成]ボタンをクリックする
・キーペア名:key01
・鍵種別:SSH

■キーペアが作成されたことを確認する

key01が作成され、自動的にkey01.pemがダウンロードされる
f:id:arctrish:20200805014148p:plain

Floating IPを確保する

■Floating IP管理画面を開く

[プロジェクト] - [ネットワーク] - [Floating IP]を選択し、Floating IP管理画面を開く
f:id:arctrish:20200805014455p:plain

■Floating IPの確保画面を開く

[Floating IPの確保] ボタンをクリックし、Floating IPの確保画面を開き、何も入力せず、[IPの確保]ボタンをクリックする
f:id:arctrish:20200805014606p:plain

■Floating IPが確保されたことを確認する

Floating IPが確保された
f:id:arctrish:20200810044403p:plain

インスタンスを起動する

インスタンス管理画面を開く

[プロジェクト] - [コンピュート] - [インスタンス]を選択し、インスタンス管理画面を開く
f:id:arctrish:20200805015304p:plain

インスタンスの起動画面を開く

[インスタンスの起動] ボタンをクリックし、インスタンスの起動画面を開く
f:id:arctrish:20200805015336p:plain

インスタンスを起動する

下記パラメータで設定し、[インスタンスの起動]ボタンをクリックする
◎詳細
インスタンス名:myvm01
◎ソース
利用可能の下にあるFedora 32の右側にある [↑]ボタンをクリック
◎フレーバー
利用可能の下にあるsales01の右側にある [↑]ボタンをクリック
◎ネットワーク
割り当て済みにinternal_networkがあることを確認
◎セキュリティーグループ
割り当て済みの下にあるdefaultの右側にある [↓]ボタンをクリック
利用可能の下にあるmysecurity01の右側にある [↑]ボタンをクリック
◎キーペア
割り当て済みにkey01があることを確認

インスタンスが起動したことを確認する

myvm01が作成され、起動した。
f:id:arctrish:20200810045038p:plain

起動したインスタンスにFloating IPを割り当て

■Floating IPの割り当ての管理画面を開く

上記画面のmyvm01の右側にある[アクション] のドロップダウン矢印をクリックし、[Floating IPの割り当て]を選択し、Floating IPの割り当ての管理画面を開く
f:id:arctrish:20200810045132p:plain

■Floating IPを割り当てる

下記パラメータで設定し、[割り当て]ボタンをクリックする
IPアドレス:Floating IPの確保で確保したIP
・IPを割り当てるポート:myvm01のIP

■Floating IPが割り当てられたことを確認する

myvm01にFloating IPが割り当てられた。
f:id:arctrish:20200810045231p:plain

インスタンスへアクセスする

■openstackサーバーからインスタンスのFloating IP宛てに疎通確認する
[root@openstack ~]# ping 192.168.11.79
PING 192.168.11.79 (192.168.11.79) 56(84) bytes of data.
64 bytes from 192.168.11.79: icmp_seq=1 ttl=63 time=6.74 ms
64 bytes from 192.168.11.79: icmp_seq=2 ttl=63 time=19.4 ms
64 bytes from 192.168.11.79: icmp_seq=3 ttl=63 time=0.606 ms
64 bytes from 192.168.11.79: icmp_seq=4 ttl=63 time=0.735 ms
■SCPでダウンロードしたキーペアをopenstackサーバーへアップロードする
[root@openstack ~]# ls key01.pem
key01.pem
■key01.pemファイルのパーミッションを変更する
[root@openstack ~]# chmod 600 key01.pem
■key01.pemファイルを使ってインスタンスへアクセスする
[root@openstack ~]# ssh -i key01.pem fedora@192.168.11.79
The authenticity of host '192.168.11.79 (192.168.11.79)' can't be established.
ECDSA key fingerprint is SHA256:dOHbiLx7VFSWgm2mTD+bDCELGcpzdRpcGwayiqToSkc.
ECDSA key fingerprint is MD5:19:83:f9:6e:fb:a5:41:40:a8:d2:eb:13:a7:25:ad:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.79' (ECDSA) to the list of known hosts.
■ホスト名、IPアドレスを確認する
[fedora@myvm01 ~]$ hostname
myvm01.novalocal
[fedora@myvm01 ~]$ ip -4 a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.107/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0

やっとインスタンスにアクセス出来るようになった!