Kong Admin API GUIのKongaを試す
はじめに
Kongの諸々の管理する場合、Admin APIを使うのが1つの手かと思うのですが、いかんせんヒューマンフレンドリーでは無いと言うような課題を感じることがあります。
Technology RadarでKongaというKongのAdmin API GUIを見つけたのでちょっと試して見ようかと思います。
ローカルで動かしてみて(Dockerで動かす想定)、GUIからためせそうな機能をひと通り見てみるぐらいをやってみようかと思います。Dockerなどの設定値はとりあえず動かすことを目的として設定しています。本番などで利用する際は値を適切なものに変えてください。SSLを使ってなかったりするのでセキュリティ的に問題が起こることがありえます。
そもそもKongに付いては過去にまとめてるのでよかったらこちら(※情報がちょっと古いかも知れませんが、基本はおそらくそこまで変わってないと思います) も見てみてください。
Kongaとは
前述していますが、KongaはKongを管理するためのGUIです。
GitHubによると以下のような機能を提供しているようです。
- すべてのAdmin APIオブジェクトの管理
- Consumer設定のリモートデータソースからのインポート(Database, files, APIsなど)
- Kongの複数ノードの管理
- スナップショット機能を使ったKong Nodeのバックアップとリストア、マイグレート機能
- ノードのヘルスチェック、モニター機能
- Email、Slackの通知機能
- 複数ユーザの管理
- データベースとの連携機能(MySQL, postgresSQL, MongoDB)
GitHubによるとKongaは公式のアプリではないようです。
動かしてみる
環境
動作環境は以下の通り
$ uname -srvmpio Linux 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal $ docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.41 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:45:33 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.12 API version: 1.41 (minimum version 1.12) Go version: go1.16.12 Git commit: 459d0df Built: Mon Dec 13 11:43:42 2021 OS/Arch: linux/amd64 Experimental: true containerd: Version: 1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2 docker-init: Version: 0.19.0 GitCommit: de40ad0
諸々動かしてみる
Kongの起動
先ずはKongを動かしてみます。前述していますが、今回、KongとKongaはDokcerで動かそうと思います。また、DB Lessモードで動かそうと思います。Kongの動かし方は以前書いたブログをそのままやりますので深くは触れません。
まず、以下のようなKongの設定ファイルを用意します。
kong.yml
_format_version: "1.1" services: - name: my-service url: https://example.com plugins: - name: key-auth routes: - name: my-route paths: - / consumers: - username: my-user keyauth_credentials: - key: my-key
次にKongをDockerで起動します。
docker run -d --name kong \ --network=host \ -v "/$PATH_TO_WORK_DIR/kong.yml:/usr/local/kong/declarative/kong.yml" \ -e "KONG_DATABASE=off" \ -e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml" \ -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \ kong:2.7.1-alpine $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 495804f277d4 kong:2.7.1-alpine "/docker-entrypoint.…" 2 seconds ago Up 1 second (health: starting) kong
Kongaの起動
こちらもDockerを使います。
基本的にはGitHubのREADMEを参考にしながら動かしています。
docker run -d --network=host \ --name konga \ -e "TOKEN_SECRET=$RANDOM_STRINGS" \ -e "NO_AUTH=true" \ pantsel/konga:0.14.9
設定の環境変数は最小限にしています。 上記のものと他に環境変数は以下のようなものがあります。 ここでは主要なものをまとめますSSLに関するものもあったりするので全量はこちらをご確認ください。
環境変数名 | 説明 | デフォルト値 |
---|---|---|
HOST | kongaにバインドするホスト名 | '0.0.0.0' |
PORT | kongaにバインドするポート番号 | 1337 |
NODE_ENV | ノードの環境。production or development |
development |
KONGA_HOOK_TIMEOUT | Kongaがタスクをスタートアップする際のタイムアウト値(ms) | 60000ms |
DB_ADAPTER | Kongaが使うDBの種類。mongo 、mysql 、postgres 。設定されていない場合はローカルディスクのDBが利用される |
- |
DB_URI | DBのフルURIの設定。DB_ADAPTERによって変わる | - |
DB_HOST | DB_URIが設定されていない場合。DBのホスト名を設定する | localhost |
DB_PORT | DB_URIが設定されていない場合。DBのポート番号 | - |
DB_USER | DB_URIが設定されていない場合。DBのユーザ名 | - |
DB_PASSWORD | DB_URIが設定されていない場合。DBのパスワード | |
DB_PG_SCHEMA | Postgresを利用している場合のスキーマ | public |
KONGA_LOG_LEVEL | Kongaのログレベル。silly 、debug 、info 、warn 、error |
development : debug 、production : warn |
TOKEN_SECRET | KongaがJWTをサインする際に利用される文字列。ランダムな文字列を設定する | - |
NO_AUTH | Kongaの認証を行うか否か。true or false |
false |
BASE_URL | Kongaの相対パス | - |
KONGA_SEED_USER_DATA_SOURCE_FILE | 初回起動時のデフォルトユーザ設定。詳細はこちらを確認ください | - |
KONGA_SEED_KONG_NODE_DATA_SOURCE_FILE | KongのAdminAPIに | |
KONGA_SEED_KONG_NODE_DATA_SOURCE_FILE | 初回起動時に複数のKongノードにつなぎたい場合のAdmin APIの設定。詳細はこちらをご確認ください | - |
今回はなるべく複雑度を下げるため、NO_AUTH
をtrue
にしてTOKEN_SECRET
だけ設定しています。
Kongaにアクセスして初回設定を行う
今回は、Dockerのネットワーク設定をホストにしていてかつデフォルトで起動しているのでhttp://localhost:1337/にブラウザーからアクセスすることで以下のようなKongaの画面を確認できます。
まずは、Kong Admin APIの設定を行う必要があるみたいですね。
以下の設定値を設定してします。
- Name: konga-demo
- Kong Admin URL: http://localhost:8001
設定が正しく完了すると下のようなダッシュボードが開きます。
起動したKongaで何ができそうかざっくり見ていく
Kongaが立ち上がったところで、GUIからどういったことができそうか簡単に見ていきます。
先ずは先程の設定後に表示されたダッシュボードですが、こちらではノードの情報やKongに来ているリクエストの数等を確認することができます。
次にInfo
タブではより詳細なノードの情報を確認することができそうです。
SERVICE
タブではKongのService Entityの管理ができそうです。
同様にROUTES
タブではRoutes Entityの管理、CONSUMERS
タブではConsumer Entityの管理が行えます。
PLUGINS
タブではPluginの追加や削除が行えるようです。
ざっとみ、プラグインはKong Plugin Hubからいい感じに取得してきてくれてそうですね。
ざっくりとはこんな感じでしょうか、今回はとりあえず動かすことができたのでスナップショットなどは一旦触らずにおきます。