仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

MicroStackで構築したOpenStack環境を外部クライアントからアクセスするには

MicroStackで構築したOpenStack環境を外部クライアントからアクセスする場合、最近のバージョンのMicroStackはOpenStackのエンドポイントをHTTPSで張るため、次のようなSSLエラーが発生してしまいます。

% openstack image list
Failed to discover available identity versions when contacting https://172.17.28.71:5000/v3/. Attempting to parse version from URL.
SSL exception connecting to https://172.17.28.65:5000/v3/auth/tokens: HTTPSConnectionPool(host='172.17.28.65', port=5000): Max retries exceeded with url: /v3/auth/tokens (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1131)')))

MicroStackのノード上でコマンドを実行する場合は特にここは意識する必要はありません。あくまで、別のクライアントからCLIでアクセスする時などに問題になる件です。

回避方法は、admin-openrc.shの末尾などにexport OS_CACERT行を追加して証明書を設定してしまう方法です。 ブラウザーでOpenStack Dashboardを開いてAPI Accessのページを開きます。

IdentityのService Endpoint URLを開きます。

オンプレの環境だとおそらく証明書エラーがブラウザーに表示されますが、画面の「証明書を確認」リンクをクリックすると証明書の詳細ページが表示されますので、中程のダウンロードから「PEM証明書」をダウンロードしてください。あとはこれを適切なパスに置いて、admin-openrc.shの末尾にexport OS_CACERT行を追加して証明書を設定してしまえば終わりです。

後はその画面からダウンロードした証明書をadmin-openrc.shの末尾に追加するだけで対応可能です。

(例)

% vi admin-openrc.sh 
...
export OS_CACERT=./bay15-gen9-maas.pem

編集済みのopenrcを再読込した後は、SSLエラーが発生すること無くコマンドが実行できるようになります。

% source admin-openrc.sh 
% openstack image list
+--------------------------------------+----------------------+--------+
| ID                                   | Name                 | Status |
+--------------------------------------+----------------------+--------+
| 36a43e92-ce59-449e-85b8-fd16aba36d6c | centos7.9-2003-qcow2 | active |
| 66fbb4bb-af8b-44b3-8d87-daabdd47cd02 | cirros               | active |
| 9181d038-4ed2-45f3-86e4-af2d0dc6c655 | ubuntu-bionic        | active |
+--------------------------------------+----------------------+--------+

そういえばJujuで構築したOpenStackでもそんな対応をしたことがありましたね。

tech.virtualtech.jp