2792 Words

OpenStack Ussuri マニュアルインストールその1―環境構築編

セキュリティ

OpenStack Docs: Security

  • OpenStack の各種サービスにはパスワードを設定する必要がある

  • 本番環境では強固なパスワードを使いましょう

    • データベース接続には@などの特殊文字が使えない可能性があるので注意

    • コマンドで生成するのもありだそうです

      openssl rand -hex 10
      
  • パスワード一覧

    Password nameDescription
    Database passwordMySQL データベースの root パスワード
    ADMIN_PASSadminユーザのパスワード
    CINDER_DBPASSブロックストレージサービスのデータベースパスワード
    CINDER_PASScinderユーザ(ブロックストレージサービスユーザ)のパスワード
    DASH_DBPASSダッシュボードのパスワード
    DEMO_PASSdemoユーザのパスワード
    GLANCE_DBPASSイメージサービスのデータベースパスワード
    GLANCE_PASSglanceユーザ(イメージサービスユーザ)のパスワード
    KEYSTONE_DBPASS認証サービスのデータベースパスワード
    METADATA_SECRETメタデータプロキシのためのシークレット
    NEUTRON_DBPASSネットワークサービスのデータベースパスワード
    NEUTRON_PASSneutronユーザ(ネットワークサービスユーザ)のパスワード
    NOVA_DBPASSコンピュートサービスのデータベースパスワード
    NOVA_PASSnovaユーザ(コンピュートサービスユーザ)のパスワード
    PLACEMENT_PASSplacementユーザ(リソース状況管理サービスユーザ)のパスワード
    RABBIT_PASSRabbitMQ のopenstackユーザのパスワード
    • 今後、インストール手順にこれらのパスワードを設定する箇所が大量に出てくる
    • インストール手順内でこれらの Password name の変数は正式なパスワードに書き換えてください

ネットワーク

OpenStack Docs: Host networking

インターフェースの設定

Controller Compute

  • プロバイダネットワークのインターフェースは IP を振らない設定をしておく

  • 管理ネットワークのインターフェースにはそれぞれのMANAGEMENT_IPを振る

  • Ubuntu 20.04 なので netplan する
    /etc/netplan/99-mynetwork.yamlなど作成(既にあるやつを上書きしてもよい)

    network:
        ethernets:
            PROVIDER_INTERFACE:
                dhcp4: no
                dhcp6: no
            MANAGEMENT_INTERFACE:
                dhcp4: no
                dhcp6: no
                addresses:
                    # ex) - 192.168.0.xxx/24
                    - MANAGEMENT_IP(CIDR)
                # ex) gateway4: 192.168.0.1
                gateway4: MANAGEMENT_GATEWAY_IP
                nameservers:
                    addresses:
                        # 好きなDNSサーバ
                        - 1.1.1.1
                        - 8.8.8.8
                    search: []
        version: 2
    

    #root user

    netplan apply
    

名前解決の設定

Controller Compute

  • 管理ネットワーク上で各ノードの名前解決ができない場合は/etc/hostsを設定する

    # controller
    192.168.0.11       controller
    
    # compute1
    192.168.0.12       compute1
    
    • コンピュートノードを追加しやすいようにcompute1と番号付けしておく

疎通確認

  • Controller

    $any user

    ping -c 4 docs.openstack.org
    ping -c 4 compute1
    
    • docs.openstack.org で外部疎通を、compute1 で内部疎通を確認している
  • Compute

    $any user

    ping -c 4 docs.openstack.org
    ping -c 4 controller
    
    • docs.openstack.org で外部疎通を、controller で内部疎通を確認している

NTP

OpenStack Docs: Network Time Protocol (NTP)

  • ノード間でサービスを適切に同期するためには NTP で時刻同期する必要がある
  • Chrony を使う

Chrony インストール

Controller Compute

#root user

apt install chrony

/etc/chrony/chrony.conf編集

  • Controller

    # ...
    
    # poolをコメントアウト
    #pool ntp.ubuntu.com        iburst maxsources 4
    #pool 0.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 1.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 2.ubuntu.pool.ntp.org iburst maxsources 2
    
    # NTPサーバを追加(好きなところでいいです)
    server ntp.nict.jp iburst
    server ntp1.jst.mfeed.ad.jp iburst
    server ntp2.jst.mfeed.ad.jp iburst
    
    # ...
    
    # 時刻同期を許可する範囲を追記
    # 管理ネットワークのサブネットに適宜変更する
    # ex) allow 192.168.0.0/24
    allow MANAGEMENT_SUBNET(CIDR)
    

    #root user

    systemctl restart chrony
    
  • Compute

    # ...
    
    # poolをコメントアウト
    #pool ntp.ubuntu.com        iburst maxsources 4
    #pool 0.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 1.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 2.ubuntu.pool.ntp.org iburst maxsources 2
    
    # controllerノードを同期先に選択
    server controller iburst
    

    #root user

    systemctl restart chrony
    

Chrony 動作確認

Controller Compute

#root user

chronyc sources
  • コントローラノードでは外部の NTP サーバとの同期状況が見える
  • コンピュートノードではコントローラノードとの同期状況が見える

OpenStack パッケージ

OpenStack Docs: OpenStack packages

Controller Compute

  • これを入れるとopenstackコマンドが使えるようになる
  • Ubuntu 20.04 ではデフォルトで Ussuri をインストールできるので、Ubuntu Cloud Archive のリポジトリを有効にする必要はない

#root user

apt update && apt dist-upgrade
apt install python3-openstackclient

SQL データベース

OpenStack Docs: SQL database

Controller

  • OpenStack の各種サービスの情報はコントローラノードの SQL データベースに格納される

MySQL インストール

#root user

apt install mariadb-server python3-pymysql
  • ドキュメントではpython-pymysqlと書いてあるがpython3-pymysqlに修正する

MySQL コンフィグ作成

  • /etc/mysql/mariadb.conf.d/99-openstack.cnfを作成する

    [mysqld]
    # ex) bind-address = 192.168.0.11
    bind-address = CONTROLLER_MANAGEMENT_IP
    
    default-storage-engine = innodb
    innodb_file_per_table = on
    max_connections = 4096
    collation-server = utf8_general_ci
    character-set-server = utf8
    

MySQL 再起動

#root user

systemctl restart mysql

データベース保護

#root user

mysql_secure_installation
  • 対話形式でいろいろ聞かれる
    • !Caution データベースの root パスワードを適切に設定する
    • 他にもいろいろ聞かれるが基本的に Yes でよいと思う

メッセージキュー

OpenStack Docs: Message queue

Controller

  • OpenStack のサービス間操作やステータス情報はコントローラノードのメッセージキューを通して調整される
  • メッセージキューとして RabbitMQ や Qpid、ZeroMQ が使えるらしいが RabbitMQ を使う

RabbitMQ インストール

#root user

apt install rabbitmq-server

RabbitMQ にopenstackユーザを作成する

#root user

rabbitmqctl add_user openstack RABBIT_PASS
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
  • !Caution RABBIT_PASSは適切なパスワードに書き換える
  • set_permissionsでは構成、書き込み、読み込みの順に正規表現で権限を付与しているらしい (rabbitmqctl(8) — RabbitMQ)

Memcached

OpenStack Docs: Memcached

Controller

  • Memcached はデータベースの問い合わせ結果を一時的にキャッシュしてくれる高性能な分散メモリキャッシュサーバらしい
  • OpenStack では認証トークンをキャッシュしてくれるらしい
  • コントローラノードで実行する

Memcached インストール

#root user

apt install memcached python3-memcache
  • ドキュメントではpython-memcacheと書いてあるがpython3-memcacheに修正する

/etc/memcached.conf編集

# ...

# ex) -l 192.168.0.11
-l CONTROLLER_MANAGEMENT_IP

# ...
  • Memcached がコントローラノードの管理ネットワークの IP アドレスを使用するように設定

Memcached 再起動

#root user

systemctl restart memcached

Etcd

OpenStack Docs: Etcd

Controller

  • Etcd は分散 KVS でクラスタ間のデータを共有する
  • コントローラノードで実行する

Etcd インストール

#root user

apt install etcd

/etc/default/etcd編集

ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://CONTROLLER_MANAGEMENT_IP:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://CONTROLLER_MANAGEMENT_IP:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://CONTROLLER_MANAGEMENT_IP:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://CONTROLLER_MANAGEMENT_IP:2379"
  • CONTROLLER_MANAGEMENT_IPは適宜書き換える(例では192.168.0.11に書き換える)
  • 管理ネットワークを通して他のノードからアクセスできるように設定

Etcd 有効化・再起動

#root user

systemctl enable etcd
systemctl restart etcd

おわり

以上で環境構築編終了です
お疲れ様でした

関連記事一覧