第4章 OpenStack でのフェデレーションの設定
4.1. IP アドレスと FQDN 設定の特定
以下のノードには、割り当てられた完全修飾ドメイン名(FQDN)が必要です。
- Dashboard (horizon)を実行しているホスト。
-
Identity サービス(keystone)を実行中のホスト。本書では
$FED_KEYSTONE_HOST
として参照されています。複数のホストが高可用性環境でサービスを実行するため、IP アドレスはホストアドレスではなく、サービスにバインドされる IP アドレスであることに注意してください。 - RH-SSO を実行するホスト。
- IdM を実行するホスト。
Red Hat OpenStack Platform director のデプロイメントでは DNS が設定されていないか、FQDN をノードに割り当てます。ただし、認証プロトコル(および TLS)には FQDN を使用する必要があります。したがって、オーバークラウドの外部パブリック IP アドレスを確認する必要があります。オーバークラウドの IP アドレスが必要な点に注意してください。これは、オーバークラウドの個別ノード(controller- 0、controller -1 など)に割り当てられる IP アドレスと同じです。
IP アドレスは個別のノードではなく高可用性クラスターに割り当てられるので、オーバークラウドの外部パブリック IP アドレスが必要です。Pacemaker と HAProxy は連携して、単一 IP アドレスの外観を提供します。この IP アドレスは、クラスター内の任意のノードの個別 IP アドレスとは全く異なります。そのため、OpenStack サービスの IP アドレスについて適切な方法は、サービスがどのノードで実行されているかを検討するのではありませんが、クラスターがそのサービスに対してアドバタイズする効果的な IP アドレスを考慮するのではなく(VIP など)、OpenStack サービスの IP アドレスについて適切な方法を検討することができます。
4.1.1. IP アドレスの取得
正しい IP アドレスを決定するには、DNS を使用する代わりに名前を割り当てる必要があります。これには 2 つの方法があります。
Red Hat OpenStack Platform director は、全 OpenStack サービスに共通のパブリック IP アドレスを 1 つ使用し、それらのサービスをポート番号で 1 つのパブリック IP アドレスで分離します。OpenStack クラスター内の 1 つのサービスのパブリック IP アドレスを把握している場合は、それらすべてを確認できます(サービスのポート番号も通知されません)。アンダークラウドの
~stack
ホームディレクトリーにあるovercloudrc
ファイルの Keystone URL を確認することができます。以下に例を示します。export OS_AUTH_URL=https://10.0.0.101:13000/v2.0
これにより、パブリックの keystone IP アドレスが
10.0.0.101
で、keystone がポート13000
で利用可能であることが分かります。拡張により、その他の OpenStack サービスはすべて、固有のポート番号を持つ10.0.0.101
の IP アドレスでも利用できます。ただし、IP アドレスとポート番号の情報を判断するためのより正確な方法は、各オーバークラウドノードにある HAProxy 設定ファイル(
/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
)を調べることです。haproxy.cfg
ファイルは、オーバークラウドの各コントローラーノード上の 同一 コピーです。これは、HAProxy に障害が発生した場合に、Pacemaker がクラスターに対して HAProxy を実行する責任を 1 つ割り当てるため、HAProxy の失敗 Pacemaker が別のオーバークラウドコントローラーを再割り当てしてしまうためです。どのコントローラーノードが 現在 HAProxy を実行しているかに関係なく、同じ動作状態でなければなりません。したがって、haproxy.cfg
ファイルは同一でなければなりません。-
haproxy.cfg
ファイルを検証するには、クラスターのコントローラーノードのいずれかに対して SSH を実行し、/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
を確認します。前述のように、どのコントローラーノードを選択しても問題ありません。 -
haproxy.cfg
ファイルはセクションに分割され、各セクションにはlisten
ステートメントで始まり、その後にサービス名が続きます。サービスセクションの直後にはbind
ステートメントです。これらは フロントエンド IP アドレスであり、一部がパブリックで、その他はクラスターの内部になります。サーバー
の行は、サービスが実際に実行されている バック IP アドレスです。クラスター内の各コントローラーノードに 1 つのサーバー
行が必要です。 セクションの複数の
バインド
エントリーからサービスのパブリック IP アドレスとポートを確認するには、以下を実行します。Red Hat OpenStack Platform director は、最初の
バインド
エントリーとしてパブリック IP アドレスを配置します。さらに、パブリック IP アドレスは TLS をサポートする必要があるため、バインド
エントリーにはssl
キーワードがあります。IP アドレスは、overstackrc
ファイルにあるOS_AUTH_URL
に設定された IP アドレスにも一致する必要があります。たとえば、haproxy.cfg
のkeystone_public
セクションの例を以下に示します。listen keystone_public bind 10.0.0.101:13000 transparent ssl crt /etc/pki/tls/private/overcloud_endpoint.pem bind 172.17.1.19:5000 transparent mode http http-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Proto http if !{ ssl_fc } option forwardfor redirect scheme https code 301 if { hdr(host) -i 10.0.0.101 } !{ ssl_fc } rsprep ^Location:\ http://(.*) Location:\ https://\1 server controller-0.internalapi.localdomain 172.17.1.13:5000 check fall 5 inter 2000 rise 2 cookie controller-0.internalapi.localdomain server controller-1.internalapi.localdomain 172.17.1.22:5000 check fall 5 inter 2000 rise 2 cookie controller-1.internalapi.localdomain
-
最初の
bind
行にはssl
キーワードがあり、IP アドレスはoverstackrc
ファイルにあるOS_AUTH_URL
と一致します。これにより、keystone がポート13000
の IP アドレス10.0.0.101
で公開されているようにすることができます。 -
2 つ目の
bind
行はクラスターの内部であり、クラスターで実行されている他の OpenStack サービスで使用されます(TLS は公開されないため、TLS を使用しないことに注意してください)。 -
モード http
設定は、使用中のプロトコルがHTTP
であることを示しています。これにより、HAProxy は他のタスクにおいて HTTP ヘッダーを検査できます。 X-Forwarded-Proto
行:http-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
これらの設定には特別な注意が必要であり、「ホスト変数の設定とホスト名」 で詳細を説明します。HTTP ヘッダー
X-Forwarded-Proto
がバックエンドサーバーによって設定され、表示されることを保証します。多くの場合、バックエンドサーバーはクライアントがHTTPS
を使用しているかどうかを知っておく必要があります。ただし、HAProxy は TLS を終了するため、バックエンドサーバーは TLS 以外として接続を確認できます。X-Forwarded-Proto
HTTP ヘッダーは、バックエンドサーバーが、要求が到達したプロトコルではなく、クライアントが実際に使用されたプロトコルを特定できるようにするメカニズムです。クライアントがプロトコルがHTTPS
である悪意のある偽装を可能にするため、クライアントはX-Forwarded-Proto
HTTP ヘッダーを送信できないことが 必須です。X-Forwarded-Proto
HTTP ヘッダーはクライアントから受信時にプロキシーによって削除できます。または、プロキシーは強制的に設定するため、クライアントによる悪意のある使用を軽減することができます。このため、X-Forwarded-Proto
は常にhttps
またはhttp
のいずれかに設定されます。HTTP ヘッダー X-Forwarded-For は、クライアントを追跡するために使用されます。これにより、バックエンドサーバーはプロキシーとして表示されるのではなく、要求側のクライアントを識別できます。このオプションにより
、HTTP ヘッダーの X-Forwarded-For
が要求に挿入されます。option forwardfor
転送された proto、direct、ServerName などの詳細は、「ホスト変数の設定とホスト名」 を参照してください。
以下の行では、パブリック IP アドレスで HTTPS のみが使用されていることを確認します。
redirect scheme https code 301 if { hdr(host) -i 10.0.0.101 } !{ ssl_fc }
この設定は、公開 IP アドレス(例:
10.0.0.101
)で要求を受信し、HTTPS ではなかったかどうかを特定し、301 リダイレクト
を実行し、スキームを HTTPS に設定します。HTTP サーバー(Apache など)はリダイレクト目的で自己参照 URL を生成することがよくあります。このリダイレクト場所は正しいプロトコルを指定する必要がありますが、サーバーが TLS ターミネーターの背後にある場合は、リダイレクト URL は HTTPS ではなく HTTP である必要があります。この行は、HTTP スキームを使用する応答に Location ヘッダーが表示されるかどうかを特定し、HTTPS スキームを使用するように書き換えます。
rsprep ^Location:\ http://(.*) Location:\ https://\1
-
4.1.2. ホスト変数の設定とホスト名
使用する IP アドレスとポートを確認する必要があります。以下の例では、IP アドレスは 10.0.0.101
で、ポートは 13000
です。
この値は
overcloudrc
で確認することができます。export OS_AUTH_URL=https://10.0.0.101:13000/v2.0
また、
haproxy.cfg
ファイルのkeystone_public
セクションで、以下を実行します。bind 10.0.0.101:13000 transparent ssl crt /etc/pki/tls/private/overcloud_endpoint.pem
また、IP アドレスに FQDN を指定する必要があります。この例では、
overcloud.localdomain
を使用します。DNS が使用されていないため、IP アドレスは/etc/hosts
ファイルに配置する必要があります。10.0.0.101 overcloud.localdomain # FQDN of the external VIP
注記Red Hat OpenStack Platform director にはオーバークラウドノードの ホスト ファイルがすでに設定されているはずですが、参加する外部ホストにホストエントリーを追加する必要があります。
$FED_KEYSTONE_HOST
および$FED_KEYSTONE_HTTPS_PORT
はfed_variables
ファイルで設定する必要があります。上記の例の値の使用:FED_KEYSTONE_HOST="overcloud.localdomain" FED_KEYSTONE_HTTPS_PORT=13000
Mellon は keystone をホストする Apache サーバーで実行しているため、Mellon host:port
および keystone host:port
の値は一致します。
コントローラーノードのいずれ かでホスト名
を実行する場合は、controller-0.localdomain
が使用される可能性がありますが、これはパブリック名ではなく 内部クラスター 名であることに注意してください。代わりに、パブリック IP アドレス を使用する必要があります。