1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kong Managerをホストネームでデプロイための設定

Posted at

NOTE: https://svenwal.de/blog/20210316_kong_manager_install/ より翻訳

TL;DR: Kong Managerが動作しない場合は、KONG_ADMIN_API_URIKONG_ADMIN_GUI_URLの設定を確認してください。

Kong Managerの紹介

2021年2月より、Kong Manager(長年Kong Enterpriseの機能でした)はKongの無料版の一部となりました。

私は長い間Kong Managerを使用しており、多くのユーザーが正しくセットアップするのを助けてきましたので、幾つの典型的な設定の問題を共有したいと思います。

Kong Managerは利用しやすい

Kong Managerはout of the boxでありすぐに使えます。ローカル マシンに Kong (Free または Enterprise) をインストールし、有効にすると、 http://localhost:8002でKong Managerをすぐアクセスできます。

image
image

壊れ方 (直し方)

実際のインストールでは、Kong Managerを適当なローカルマシンに置くのではなく、サーバーにインストールし、適切なDNSエントリを使ってアクセスする必要があります。そして、そうしている間、8002のようなポートを持つのではなく、異なるホストネームを使用したいのです。

image

それでは、KongはLoadBalancer/Ingress/...の後ろにインストールされ、Kong Managerをhttps://kong-manager.my-company.example.comのような素敵なホスト名でを公開していると仮定しましょう。これを開くと、Kongマネージャが表示されますが、デフォルトのワークスペースは消えていて、新しいワークスペースを作成するボタンもありません。では、何が起こったのでしょうか?

image

KongのすべてがAPIであり、Kong Managerのユーザーインターフェイス全体が、ローカルのブラウザで動作するブラウザベースのアプリケーションであリます。そして、設定を変更していない場合、デフォルトのAdmin-APIアドレス(http://localhost:8001)への呼び出しが開始されます。

KongはAdmin-APIの外部URLを知ることができないため、設定でそれを指定する必要があります。例えば、8001-Portをhttps://kong-admin.my-company.example.com のようにマッピングしたとすると、次のように設定する必要があります。

admin_api_uri = https://kong-admin.my-company.example.com

または(環境変数を使用している場合)

kong_admin_api_uri = https://kong-admin.my-company.example.com

これで、ブラウザはAdmin APIがどこにあるかを知り、呼び出しを開始するようになりました。しかし、実際に試してみると、やはりうまくアクセスできません。では、何が足りないのでしょうか?

私たちはKong ManagerとAdmin APIに異なるホスト名を作成しましたが、これはブラウザのCORS保護をトリガーします。https://kong-manager.my-company.example.com 上の JavaScript は https://kong-admin.my-company.example.com への呼び出しを試み、ブラウザはそれを拒否します(クロスオリジンのため)。そこで、第二段階として、Admin-API が正しい Allow-Origin-Header を送信しているかどうかを確認する必要があります。そのためには、Kong ManagerのURLがどのようなものであるかをKongに伝える必要があります。

admin_gui_url = https://kong-manager.my-company.example.com

または(環境変数を使用している場合)

KONG_ADMIN_GUI_URL = https://kong-manager.my-company.example.com

image

これで無事Workspaceにアクセスすることができました。

image

RBACとロギングを有効に

Kong Enterpriseを使用する場合、通常、RBACを使用してAdmin-APIとKong Managerを保護する必要があります。Basic-authに対しすべてをセットアップし、Kong-Admin-Token headerがadmin APIでうまく機能すると仮定してみましょう。しかし、ブラウザを開いてログインすると(ヒント:起動時にパスワードを設定した場合、標準のユーザ名はkong_adminです)、うまくいきません。

上記の例では、ログイン自体はうまくいきますが、作成されたセッションcookieが両方のドメインで有効ではありません(https://kong-manager.my-company.example.com でログインすると、cookieは UI でのみ有効で、Admin-API では有効ではありません)。

このcookieをブラウザがDNS名で受け入れるようにするためには、両方のDNSエントリで有効になるように設定する必要があります。

admin_gui_session_conf = {"cookie_domain": "my-company.example.com", "secret": "your-random-secret", "cookie_secure":false} 

または (環境変数を使っている場合)

KONG_ADMIN_GUI_SESSION_CONF = {"cookie_domain": "my-company.example.com", "secret": "your-random-secret", "cookie_secure": false}.

ここで重要なのは cookie_domain です。両方の URL が共通に持つサブドメインを設定する必要があります。この例では my-company.example.com が両方の URL で共有されています。

ヒント: この例では、Cookie_secureも追加しています。httpのみでKongを公開している場合に備えて、ここに追加しておきたいと思っただけです。

NOTE: 特定のドメイン、特にクラウドプロバイダーからのドメイン(例えば.amazonaws.com)は、ブラウザ内でcookieがブロックされています。cookieに問題がある場合は、StackOverflowのこの投稿を参照してください。

Developer Portalも

API ベースのユーザーインターフェースの主要な原則について多くを学んだので、Developer Portal(開発者ポータル)についても同じ原則(ウェブベースのユーザーインターフェースと API)を共有しています。そのため、これを動作させるために同様のことをしなければならないです。

portal_gui_protocol = https
portal_gui_host = kong-portal.my-company.example.com
portal_api_url = https://kong-portal-api.my-company.example.com
portal_session_conf = {"cookie_name":"portal_session","secret":"another-random-secret","cookie_secure":false,"cookie_domain":"my-company.example.com"} 

または (環境変数を使っている場合)

KONG_PORTAL_GUI_PROTOCOL = https
KONG_PORTAL_GUI_HOST = kong-portal.my-company.example.com
KONG_PORTAL_API_URL = https://kong-portal-api.my-company.example.com
KONG_PORTAL_SESSION_CONF = {"cookie_name":"portal_session","secret":"another-random-secret","cookie_secure":false,"cookie_domain":"my-company.example.com"} 

OpenID Connectを使用する場合、この設定は必要ありません。代わりに、OIDCプラグインのconfig.session_cookie_domainを確認してください(この例では、config.session_cookie_domain=my-company.example.comとなります)。

NOTE: 特定のドメイン、特にクラウドプロバイダーからのドメイン(例えば.amazonaws.com)は、ブラウザ内でcookieがブロックされています。cookieに問題がある場合は、StackOverflowのこの投稿を参照してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?