Superset Kubernetesへの導入
1715 ワード
最近、SupersetをKubernetesに配備し、WebサイトがHTTPSセキュリティ設定を構成する必要がある.Supersetの公式ドキュメントといくつかのコミュニティの討論を調べた後、Supersetを2ステップ構成する必要がある.
1.HTTPエージェントサービス構成
まずSupersetはK 8 S環境においてload balancerとX-Forwarded-For/X-Forwarded-Proto headersを併用ため、これらのheadersを取得および使用するために
If the load balancer is inserting X-Forwarded-For/X-Forwarded-Proto headers, you should set ENABLE_PROXY_FIX = True in the superset config file to extract and use the headers.
ソースコードを確認すると、
ProxyFixのソースコードの説明を見ると、
上のステップを設定すると、httpsのsupersetホームページを入力すると、いつも私のリクエストredirectをhttpのアドレスにして、正常に使用できないという問題が発生します.よく研究すると、supersetが起動するときにgunicornをWSDI HTTPサーバーとして使用することが分かった.したがってgunicornのパラメータも設定.
2.gunicorn forwarded-allow-ipsの設定
supersetがload balancer(nginxまたはELB)で実行する場合、gunicornにどのX-Forwarded-*headersが信頼できるかを教える必要がある.一連の信頼できるIPアドレスは、
forwarded-allow-ipsは*説明のすべてのIPアドレスを信頼するように設定、カンマで区切ることで指定したIPをリストすることもできる.
Reference: https://github.com/apache/incubator-superset/issues/978
1.HTTPエージェントサービス構成
まずSupersetはK 8 S環境においてload balancerとX-Forwarded-For/X-Forwarded-Proto headersを併用ため、これらのheadersを取得および使用するために
ENABLE_PROXY_FIX = True
を設定必要がある.If the load balancer is inserting X-Forwarded-For/X-Forwarded-Proto headers, you should set ENABLE_PROXY_FIX = True in the superset config file to extract and use the headers.
ソースコードを確認すると、
ENABLE_PROXY_FIX = True
は実際にProxyFix
ミドルウェアを追加しています.if app.config.get('ENABLE_PROXY_FIX'):
app.wsgi_app = ProxyFix(app.wsgi_app)
ProxyFixのソースコードの説明を見ると、
X-forworded
headersを抽出することによってREMOTE_ADDR
とHTTP_HOST
の2つの環境変数を設定ことで、アプリケーションがWSDI環境変数を直接得ることができることが明らかになった.上のステップを設定すると、httpsのsupersetホームページを入力すると、いつも私のリクエストredirectをhttpのアドレスにして、正常に使用できないという問題が発生します.よく研究すると、supersetが起動するときにgunicornをWSDI HTTPサーバーとして使用することが分かった.したがってgunicornのパラメータも設定.
2.gunicorn forwarded-allow-ipsの設定
supersetがload balancer(nginxまたはELB)で実行する場合、gunicornにどのX-Forwarded-*headersが信頼できるかを教える必要がある.一連の信頼できるIPアドレスは、
--forwarded-allow-ips
を設けることにより設定.forwarded-allow-ipsは*説明のすべてのIPアドレスを信頼するように設定、カンマで区切ることで指定したIPをリストすることもできる.
superset runserver
コマンドでは--forwarded-allow-ips
の指定がサポートされていないため、supersetの起動スクリプトを最後に追加します.gunicorn --workers 16 \
--timeout 60 \
--bind 0.0.0.0:8080 \
--limit-request-line 0 \
--limit-request-field_size 0 \
--forwarded-allow-ips="*" superset:app
Reference: https://github.com/apache/incubator-superset/issues/978