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 のようにマッピングしたとすると、次のように設定する必要があります。

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

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

1
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に伝える必要があります。

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

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

1
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エントリで有効になるように設定する必要があります。

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

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

1
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)を共有しています。そのため、これを動作させるために同様のことをしなければならないです。

1
2
3
4
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"} 

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

1
2
3
4
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のこの投稿を参照してください。