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
構成図
仮想化ソフト
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/
■ログインできることを確認する
ログインすると以下のような概要画面が表示される
■作成したネットワークがあることを確認する
[プロジェクト] - [ネットワーク] - [ネットワーク]を選択し、先ほどコマンドで作成したexternal_networkがあることを確認する
■作成したサブネットがあることを確認する
続いて、[external_network] - [サブネット]タブを選択し、先ほどコマンドで作成したpublic_subnetがあることを確認する
プロジェクトを作成する
■プロジェクト管理画面を開く
[ユーザー管理] - [プロジェクト] を選択する。servicesとadminがあることがわかる
■新規プロジェクトを作成する
[プロジェクトの作成] ボタンをクリックし、[名前]フィールドにtenant01を入力し、[プロジェクトの作成]ボタンをクリックする
■プロジェクトが作成されたことを確認する
tenant01プロジェクトが追加された
■クォータを設定画面を開く
上記画面のtenant01の右側にある[アクション] のドロップダウン矢印をクリックし、[クォータの変更]を選択し、クォータ設定画面を開く
■クォータを設定する
下記パラメータで設定し、[保存]ボタンをクリックする
◎コンピュート
・インスタンス:6
・仮想CPU:4
◎ボリューム
・ボリュームとスナップショットの合計サイズ (GiB):100
◎ネットワーク
・Floating IP:40
フレーバーを作成する
■フレーバ設定画面を開く
[管理] - [コンピュート] - [フレーバー]を選択し、フレーバー設定画面を開く
■新規フレーバー作成画面を開く
[フレーバーの作成]ボタンをクリックし、フレーバ作成画面を開く
■新規フレーバーを作成する
下記パラメータで設定し、[フレーバーの作成]ボタンをクリックする
・名前:sales01
・仮想CPU:1
・メモリー:1280
・ルートディスク:8
・スワップディスク:512
■フレーバーが作成されたことを確認する
sales01フレーバーが作成された
ユーザーを作成する
■ユーザー管理画面を開く
[ユーザー管理] - [ ユーザー]を選択し、ユーザー管理画面を開く
■新規ユーザー作成画面を開く
[ユーザーの作成] ボタンをクリックし、ユーザーの作成画面を開く
■新規ユーザーを作成する
下記パラメータで設定し、[ユーザーの作成]ボタンをクリックする
・ユーザー名:tenant01
・パスワード:password
・パスワード(確認):password
・主プロジェクト:tenant01
■ユーザーが作成されたことを確認する
tenant01ユーザーが作成された
■tenat01ユーザーでログインしなおす
右上の[admin]プルダウンから、[ログアウト]を選択し、ログイン画面でtenant01ユーザでログインしなおす
■クォータ設定を確認する
先ほど設定したクォータ設定が反映されていることを確認する
イメージを作成する
■イメージ管理画面を開く
[プロジェクト] - [コンピュート] - [イメージ]を選択し、イメージ管理画面を開く
■OSイメージをダウンロードする
下記URLから[Fedora 32 Cloud Base Images] - [Cloud Base image for Openstack] (gcow2)をダウンロードする
alt.fedoraproject.org
■イメージの作成画面を開く
[イメージの作成] ボタンをクリックし、イメージの作成画面を開く
■新規イメージを作成する
下記パラメータで設定し、[イメージの作成]ボタンをクリックする
・イメージ名:Fedora 32
・ファイル:ダウンロードイメージを参照
・形式:QCOW2
・最小メモリー:1024
■イメージが作成されたことを確認する
Fedora 32イメージが作成された
internal_networkを作成する
■ネットワーク管理画面を開く
[プロジェクト] - [ネットワーク] - [ネットワーク]を選択し、ネットワーク管理画面を開く
■ネットワークの作成画面を開く
[ネットワークの作成] ボタンをクリックし、ネットワークの作成画面を開く
■ネットワークを作成する
下記パラメータで設定し、[作成]ボタンをクリックする
◎ネットワーク
・ネットワーク名: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が作成された
ルーターを作成する
■ルーターが作成されたことを確認する
router01が作成された
■インターフェース管理画面を開く
上記画面のrouter01をクリックし、インターフェース管理を開く
■インターフェースの追加画面を開く
[インターフェースの追加] ボタンをクリックし、インターフェースの追加画面を開く
■インターフェースを追加する
下記パラメータで設定し、[送信]ボタンをクリックする
・サブネット:internal_network
■インターフェースが追加されたことを確認する
内部インターフェースが作成された。IPアドレスは自動で192.168.1.1が付与される。
セキュリティーグループを作成する
■ルールの追加画面を開く
[ルールの追加] ボタンをクリックし、ルールの作成画面を開く
■ICMPルールを追加する
下記パラメータで設定し、[追加]ボタンをクリックする
・ルール:カスタムICMPルール
■ルールが追加されたことを確認する
公開鍵を作成する
■キーペア管理画面を開く
[プロジェクト] - [コンピュート] - [キーペア]を選択し、キーペア管理画面を開く
■キーペアの作成画面を開く
[キーペアの作成] ボタンをクリックし、キーペアの作成画面を開く
■キーペアを作成する
下記パラメータで設定し、[キーペアの作成]ボタンをクリックする
・キーペア名:key01
・鍵種別:SSH鍵
■キーペアが作成されたことを確認する
key01が作成され、自動的にkey01.pemがダウンロードされる
Floating IPを確保する
■Floating IP管理画面を開く
[プロジェクト] - [ネットワーク] - [Floating IP]を選択し、Floating IP管理画面を開く
■Floating IPの確保画面を開く
[Floating IPの確保] ボタンをクリックし、Floating IPの確保画面を開き、何も入力せず、[IPの確保]ボタンをクリックする
■Floating IPが確保されたことを確認する
Floating IPが確保された
インスタンスを起動する
■インスタンスを起動する
下記パラメータで設定し、[インスタンスの起動]ボタンをクリックする
◎詳細
・インスタンス名:myvm01
◎ソース
利用可能の下にあるFedora 32の右側にある [↑]ボタンをクリック
◎フレーバー
利用可能の下にあるsales01の右側にある [↑]ボタンをクリック
◎ネットワーク
割り当て済みにinternal_networkがあることを確認
◎セキュリティーグループ
割り当て済みの下にあるdefaultの右側にある [↓]ボタンをクリック
利用可能の下にあるmysecurity01の右側にある [↑]ボタンをクリック
◎キーペア
割り当て済みにkey01があることを確認
■インスタンスが起動したことを確認する
myvm01が作成され、起動した。
起動したインスタンスにFloating IPを割り当て
■Floating IPの割り当ての管理画面を開く
上記画面のmyvm01の右側にある[アクション] のドロップダウン矢印をクリックし、[Floating IPの割り当て]を選択し、Floating IPの割り当ての管理画面を開く
■Floating IPを割り当てる
下記パラメータで設定し、[割り当て]ボタンをクリックする
・IPアドレス:Floating IPの確保で確保したIP
・IPを割り当てるポート:myvm01のIP
■Floating IPが割り当てられたことを確認する
myvm01にFloating IPが割り当てられた。
インスタンスへアクセスする
■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.