CloudStack 4.18をUbuntu 22.04 LTSにインストール: マネージメントサーバー

CloudStack

CloudStack パッケージインストール

apt パッケージを使ってインストールするので、鍵のインストールとsource.listにリポジトリを追加します。

$ wget -qO- http://download.cloudstack.org/release.asc | sudo tee /usr/share/keyrings/openstack-keyring.asc
$ sudo vi /etc/apt/sources.list.d/cloudstack.list

cloudstack.list に下記を追記します。

deb [arch=amd64 signed-by=/usr/share/keyrings/openstack-keyring.asc] http://download.cloudstack.org/ubuntu jammy 4.18

apt update してマネジメントサーバーとデータベースのパッケージをインストールします。

$ sudo apt update
$ sudo apt install cloudstack-management mysql-server

MySQLをセットアップ

mysqld.conf ファイルを開いて設定をおこないます。

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] 直下に下記を追加し、保存して閉じます。

server-id=1
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format='ROW'

次は cloudstack.cnf ファイルを新規作成します。

$ sudo vi /etc/mysql/conf.d/cloudstack.cnf

下記を設定して保存します。

[mysqld]

設定が終わったらMySQL再起動。

$ sudo systemctl restart mysql

接続確認

ここでブラウザからマネジメントサーバーにアクセスして接続確認をおこないます。
IPアドレスは読み替えてください。ポート番号は8080です。

http://192.168.1.16:8080/client
id/pw: admin / password

マネジメントサーバーをセットアップ

初期データ投入

cloudstack-setup-databases コマンドを使ってマネジメントサーバーのシードデータを投入します。

$ sudo cloudstack-setup-databases cloud:XXXXXXXXXXXXXXXXXXXXXXXX@localhost --deploy-as=root -i whale.ntlscd.priv

cloud:XXXXXXXXXXXXXXXXXXXXXXXX@localhost の部分はデータベースへの接続情報です。

ユーザ名: cloud
パスワード: XXXXXXXXXXXXXXXXXXXXXXXX
データベースサーバーのホスト名: localhost

になります。
ユーザはこのコマンドで作成されるため、事前にユーザを追加しておく必要はありません。

下のメッセージが表示されたら完了です。
データベースへの接続情報等は db.properties に設定されているので、変更する場合はこのファイルを確認します。(今回はそのまま使います)

CloudStack has successfully initialized database, you can check your database configuration in /etc/cloudstack/management/db.properties

マネジメントサーバーセットアップおよび起動

cloudstack-setup-management コマンドで設定と起動をおこないます。
基本的に自動で設定がおこなわれるので楽ですね。

$ sudo cloudstack-setup-management
$ sudo systemctl status cloudstack-management
$ sudo tail -f /var/log/cloudstack/management/management-server.log

次のメッセージが表示されたら設定・起動は完了です。(ファイアウォールの設定はまた別の投稿で紹介します)

Please ensure ports 8080, 8250, 8443, and 9090 are opened and not firewalled for the management server and not in use by other processes on this host.

cloudstack-setup-management が終わったら、systemctl statusで起動されているか確認します。
この時点で設定は完了してサーバーが起動していますが、初回起動時なので裏でいろいろ設定が走っています。
tail コマンドで表示するログにhealth check の表示が出るまで待ちます。(少し時間かかる)

Usageサーバーインストール

cloudstack-usage パッケージをインストールするのみです。

$ sudo apt install cloudstack-usage

管理画面へのHTTPS接続設定

マネジメントサーバーもSSL証明書の設定をおこなうことでHTTPS接続することもできますが、今回はNginxのリバースプロキシを設定して接続し、Nginx側でHTTPS接続できるように設定します。
最終的に、https://whale.local/ で接続したい。

ちなみに、ホスト名が whale なので、avahi-daemonがインストールされていれば mDNS のチカラで DNS の設定がなくてもwhale.localでアクセスできます。

まずは Nginx をインストール

$ sudo apt install nginx

オレオレCA・オレオレ証明書作成

インターネットから接続できる環境ではないため、Let’s Encryptは使えないのでオレオレ証明書を設定します。

$ sudo mkdir /etc/nginx/certificate
$ cd /etc/nginx

秘密鍵作成

$ sudo openssl genrsa -des3 -out /etc/nginx/certificate/server.key 2048

CSR作成

$ sudo openssl req -new -key /etc/nginx/certificate/server.key -out /etc/nginx/certificate/server.csr

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NautilusCODE
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:whale.local whale.ntlscd.priv
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

秘密鍵はパスフレーズを解除しておきます。再起動の度にパスフレーズ入力するのも面倒なので…

$ sudo cp -p /etc/nginx/certificate/server.key /etc/nginx/certificate/server.key.orig
$ sudo openssl rsa -in /etc/nginx/certificate/server.key -out /etc/nginx/certificate/server.key

SANで設定するFQDNを登録します。

$ sudo vi /etc/nginx/certificate/san.txt

ドメインは各環境に合わせて変更してください。

subjectAltName = DNS:whale.local, DNS:whale.ntlcd.priv

SSL証明書を発行します。
-daysオプションで有効期限を指定しますが、10年にしました。

$ sudo openssl req -new -x509 -days 3650 -key /etc/nginx/certificate/cloudstack.key -sha512 -out /etc/nginx/certificate/cloudstack.crt
$ sudo openssl x509 -req -days 3650 -in /etc/nginx/certificate/server.csr -signkey /etc/nginx/certificate/server.key -out /etc/nginx/certificate/cloudstack.crt -extfile /etc/nginx/certificate/san.txt

Nginxセットアップ

Webサーバーのバーチャルホスト設定をおこないます。
先ほど作成した秘密鍵、SSL証明を使います。

$ sudo vi /etc/nginx/sites-available/cloudstack

下記設定を登録

server {
  listen 443 ssl http2;
  server_name whale.local;

  access_log /var/log/nginx/whale.local_access.log;
  error_log /var/log/nginx/whale.local_error.log;

  ssl_certificate /etc/nginx/certificate/cloudstack.crt;
  ssl_certificate_key /etc/nginx/certificate/server.key;
  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout  10m;

  # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
  add_header Strict-Transport-Security max-age=15768000;

  location / {
    proxy_set_header Host                 $http_host;
    proxy_set_header X-Real-IP            $remote_addr;
    proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto    $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_pass http://localhost:8080;
  }
}

ufw でファイアウォールが443を通す設定をおこないます。

$ sudo ufw allow 443/tcp

バーチャルホストを有効化し、Nginxを再起動。

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/cloudstack .
$ sudo systemctl restart nginx

これで設定完了です。
https://whale.local/ にアクセスできればOKです。

参考情報


マネジメントサーバーのインストール・セットアップはこんな感じです。
まだまだ先は長く、ストレージ(NFS)、エージェントサーバー、ファイアウォールの設定が残っています。
そんで、Webインターフェイスからの設定もあるので、なかなか大変…