Dockerで検証用のKeycloakがサクッと立てられたのだけれど、これを実際に検証環境で稼働させるためには外部からhttpsでアクセスできるようホストやSSL環境の構成が必要。
SSLはロードバランサーに利用しているBIG-IPで処理しており、iRuleで振り分けを行っている。
Keycloakをロードバランサーの内側で稼働させるには、2つのことが必要なようだ。
##HTTPヘッダ X-Forwarded-Proto の挿入
一つはロードバランサーの内側がhttpになるのだが、httpsでの接続が中継されたものであることをHTTPヘッダで伝えること。
iRuleに追加するのは以下のような感じ。
# add header ssl request
if { [PROFILE::exists clientssl] == 1 } {
HTTP::header insert "X-Forwarded-Proto" "https"
}
http-listenerにproxy-address-forwardingを指定
ロードバランサーの内側ではhttpでの接続になるので、そのままだとレスポンスにhttpでリソースのUrlを返してしまったりする。proxy-address-forwardingを設定することで、中継されているリクエストであることを把握しhttpsでレスポンスするようになる。
standalone.xmlを見てみると、
<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>
proxy-address-forwardingは環境変数を見るようになっていたので、起動オプションに追加で行けそうだ。
docker-composeに書くと、こんな感じ。
version: "3"
services:
keycloak:
container_name: keycloak
image: jboss/keycloak
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- PROXY_ADDRESS_FORWARDING=true
ports:
- "80:8080"
restart: always
##参考URL