NOTE: https://svenwal.de/blog/20210316_kong_manager_install/ より翻訳
TL;DR: Kong Managerが動作しない場合は、KONG_ADMIN_API_URI
とKONG_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をすぐアクセスできます。
壊れ方 (直し方)
実際のインストールでは、Kong Managerを適当なローカルマシンに置くのではなく、サーバーにインストールし、適切なDNSエントリを使ってアクセスする必要があります。そして、そうしている間、8002のようなポートを持つのではなく、異なるホストネームを使用したいのです。
それでは、KongはLoadBalancer/Ingress/…の後ろにインストールされ、Kong Managerをhttps://kong-manager.my-company.example.com
のような素敵なホスト名でを公開していると仮定しましょう。これを開くと、Kongマネージャが表示されますが、デフォルトのワークスペースは消えていて、新しいワークスペースを作成するボタンもありません。では、何が起こったのでしょうか?
KongのすべてがAPIであり、Kong Managerのユーザーインターフェイス全体が、ローカルのブラウザで動作するブラウザベースのアプリケーションであリます。そして、設定を変更していない場合、デフォルトのAdmin-APIアドレス(http://localhost:8001)への呼び出しが開始されます。
KongはAdmin-APIの外部URLを知ることができないため、設定でそれを指定する必要があります。例えば、8001-Portを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に伝える必要があります。
|
|
または(環境変数を使用している場合)
|
|
これで無事Workspaceにアクセスすることができました。
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エントリで有効になるように設定する必要があります。
|
|
または (環境変数を使っている場合)
|
|
ここで重要なのは cookie_domain
です。両方の URL が共通に持つサブドメインを設定する必要があります。この例では my-company.example.com
が両方の URL で共有されています。
ヒント: この例では、Cookie_secureも追加しています。httpのみでKongを公開している場合に備えて、ここに追加しておきたいと思っただけです。
NOTE: 特定のドメイン、特にクラウドプロバイダーからのドメイン(例えば
.amazonaws.com
)は、ブラウザ内でcookieがブロックされています。cookieに問題がある場合は、StackOverflowのこの投稿を参照してください。
Developer Portalも
API ベースのユーザーインターフェースの主要な原則について多くを学んだので、Developer Portal(開発者ポータル)についても同じ原則(ウェブベースのユーザーインターフェースと API)を共有しています。そのため、これを動作させるために同様のことをしなければならないです。
|
|
または (環境変数を使っている場合)
|
|
OpenID Connectを使用する場合、この設定は必要ありません。代わりに、OIDCプラグインのconfig.session_cookie_domainを確認してください(この例では、config.session_cookie_domain=my-company.example.comとなります)。
NOTE: 特定のドメイン、特にクラウドプロバイダーからのドメイン(例えば
.amazonaws.com
)は、ブラウザ内でcookieがブロックされています。cookieに問題がある場合は、StackOverflowのこの投稿を参照してください。