第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
export OS_AUTH_URL=https://10.0.0.101:13000/v2.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、パブリックの 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セクションの例を以下に示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
最初の
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-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Proto http if !{ ssl_fc }Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定には特別な注意が必要であり、「ホスト変数の設定とホスト名」 で詳細を説明します。HTTP ヘッダー
X-Forwarded-Protoがバックエンドサーバーによって設定され、表示されることを保証します。多くの場合、バックエンドサーバーはクライアントがHTTPSを使用しているかどうかを知っておく必要があります。ただし、HAProxy は TLS を終了するため、バックエンドサーバーは TLS 以外として接続を確認できます。X-Forwarded-ProtoHTTP ヘッダーは、バックエンドサーバーが、要求が到達したプロトコルではなく、クライアントが実際に使用されたプロトコルを特定できるようにするメカニズムです。クライアントがプロトコルがHTTPSである悪意のある偽装を可能にするため、クライアントはX-Forwarded-ProtoHTTP ヘッダーを送信できないことが 必須です。X-Forwarded-ProtoHTTP ヘッダーはクライアントから受信時にプロキシーによって削除できます。または、プロキシーは強制的に設定するため、クライアントによる悪意のある使用を軽減することができます。このため、X-Forwarded-Protoは常にhttpsまたはhttpのいずれかに設定されます。HTTP ヘッダー X-Forwarded-For は、クライアントを追跡するために使用されます。これにより、バックエンドサーバーはプロキシーとして表示されるのではなく、要求側のクライアントを識別できます。このオプションにより
、HTTP ヘッダーの X-Forwarded-Forが要求に挿入されます。option forwardfor
option forwardforCopy to Clipboard Copied! Toggle word wrap Toggle overflow 転送された proto、direct、ServerName などの詳細は、「ホスト変数の設定とホスト名」 を参照してください。
以下の行では、パブリック IP アドレスで HTTPS のみが使用されていることを確認します。
redirect scheme https code 301 if { hdr(host) -i 10.0.0.101 } !{ ssl_fc }redirect scheme https code 301 if { hdr(host) -i 10.0.0.101 } !{ ssl_fc }Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定は、公開 IP アドレス(例:
10.0.0.101)で要求を受信し、HTTPS ではなかったかどうかを特定し、301 リダイレクトを実行し、スキームを HTTPS に設定します。HTTP サーバー(Apache など)はリダイレクト目的で自己参照 URL を生成することがよくあります。このリダイレクト場所は正しいプロトコルを指定する必要がありますが、サーバーが TLS ターミネーターの背後にある場合は、リダイレクト URL は HTTPS ではなく HTTP である必要があります。この行は、HTTP スキームを使用する応答に Location ヘッダーが表示されるかどうかを特定し、HTTPS スキームを使用するように書き換えます。
rsprep ^Location:\ http://(.*) Location:\ https://\1
rsprep ^Location:\ http://(.*) Location:\ https://\1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
4.1.2. ホスト変数の設定とホスト名 リンクのコピーリンクがクリップボードにコピーされました!
使用する IP アドレスとポートを確認する必要があります。以下の例では、IP アドレスは 10.0.0.101 で、ポートは 13000 です。
この値は
overcloudrcで確認することができます。export OS_AUTH_URL=https://10.0.0.101:13000/v2.0
export OS_AUTH_URL=https://10.0.0.101:13000/v2.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow また、
haproxy.cfgファイルのkeystone_publicセクションで、以下を実行します。bind 10.0.0.101:13000 transparent ssl crt /etc/pki/tls/private/overcloud_endpoint.pem
bind 10.0.0.101:13000 transparent ssl crt /etc/pki/tls/private/overcloud_endpoint.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow また、IP アドレスに FQDN を指定する必要があります。この例では、
overcloud.localdomainを使用します。DNS が使用されていないため、IP アドレスは/etc/hostsファイルに配置する必要があります。10.0.0.101 overcloud.localdomain # FQDN of the external VIP
10.0.0.101 overcloud.localdomain # FQDN of the external VIPCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Red Hat OpenStack Platform director にはオーバークラウドノードの ホスト ファイルがすでに設定されているはずですが、参加する外部ホストにホストエントリーを追加する必要があります。
$FED_KEYSTONE_HOSTおよび$FED_KEYSTONE_HTTPS_PORTはfed_variablesファイルで設定する必要があります。上記の例の値の使用:FED_KEYSTONE_HOST="overcloud.localdomain" FED_KEYSTONE_HTTPS_PORT=13000
FED_KEYSTONE_HOST="overcloud.localdomain" FED_KEYSTONE_HTTPS_PORT=13000Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Mellon は keystone をホストする Apache サーバーで実行しているため、Mellon host:port および keystone host:port の値は一致します。
コントローラーノードのいずれ かでホスト名 を実行する場合は、controller-0.localdomain が使用される可能性がありますが、これはパブリック名ではなく 内部クラスター 名であることに注意してください。代わりに、パブリック IP アドレス を使用する必要があります。