Kong Admin API GUIのKongaを試す

はじめに

Kongの諸々の管理する場合、Admin APIを使うのが1つの手かと思うのですが、いかんせんヒューマンフレンドリーでは無いと言うような課題を感じることがあります。
Technology RadarKongaという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の種類。mongomysqlpostgres。設定されていない場合はローカルディスクの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のログレベル。sillydebuginfowarnerror 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_AUTHtrueにしてTOKEN_SECRETだけ設定しています。

Kongaにアクセスして初回設定を行う

今回は、Dockerのネットワーク設定をホストにしていてかつデフォルトで起動しているのでhttp://localhost:1337/ブラウザーからアクセスすることで以下のようなKongaの画面を確認できます。

f:id:yuya_hirooka:20220226133649p:plain

まずは、Kong Admin APIの設定を行う必要があるみたいですね。
以下の設定値を設定してします。

設定が正しく完了すると下のようなダッシュボードが開きます。

f:id:yuya_hirooka:20220226135011p:plain

起動したKongaで何ができそうかざっくり見ていく

Kongaが立ち上がったところで、GUIからどういったことができそうか簡単に見ていきます。
先ずは先程の設定後に表示されたダッシュボードですが、こちらではノードの情報やKongに来ているリクエストの数等を確認することができます。

f:id:yuya_hirooka:20220226135011p:plain

次にInfoタブではより詳細なノードの情報を確認することができそうです。

f:id:yuya_hirooka:20220226140053p:plain

SERVICEタブではKongのService Entityの管理ができそうです。
同様にROUTESタブではRoutes Entityの管理、CONSUMERSタブではConsumer Entityの管理が行えます。

f:id:yuya_hirooka:20220226140124p:plain

PLUGINSタブではPluginの追加や削除が行えるようです。

f:id:yuya_hirooka:20220226140541p:plain

ざっとみ、プラグインKong Plugin Hubからいい感じに取得してきてくれてそうですね。

f:id:yuya_hirooka:20220226140604p:plain

ざっくりとはこんな感じでしょうか、今回はとりあえず動かすことができたのでスナップショットなどは一旦触らずにおきます。