Kongとは
Microsoftの設計パターンではゲートウェイ集約という形で公開されているメソッドです。
ゲートウェイを使用して、複数の個々の要求を 1 つの要求に集約します。 このパターンは、クライアントが操作を実行するために、さまざまなバックエンド システムに複数の呼び出しを行う必要がある場合に便利です。
一般的にマイクロサービスアーキテクチャでサービスを作ってしまうと、アプリケーションとサーバー間の接続が複数生まれます。そうすると、接続情報の管理や、エラーハンドリングが煩雑になってきます。そこで、間にリバースプロキシ的なものを挟んで、アプリケーションからは1つに見えるようにすることが考えられます。これがゲートウェイ集約です。
今回は、Kongというものを使いましたが、SentinelやGlooなんかも有名です。
使用するイメージ
kong
https://hub.docker.com/_/kong
konga
https://hub.docker.com/r/pantsel/konga/
kongaは何か。というとkong用のWebUIです。kongは商用版ではWebUIがありますが、OSS版ではありません。そのため、kongaというOSSを使って、WebUIをサーブしています。
DockerCompose
version: '2.1'
services:
kong:
image: kong
ports:
- 0.0.0.0:8000:8000
- 8443:8443
- 8001:8001
- 8444:8444
environment:
- "KONG_PROXY_ACCESS_LOG=/dev/stdout"
- "KONG_ADMIN_ACCESS_LOG=/dev/stdout"
- "KONG_PROXY_ERROR_LOG=/dev/stderr"
- "KONG_ADMIN_ERROR_LOG=/dev/stderr"
- "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl"
- "KONG_DATABASE=postgres"
- "KONG_PG_HOST=kong-db"
- "KONG_PG_USER=kong"
- "KONG_PG_PASSWORD=kong"
- "KONG_CASSANDRA_CONTACT_POINTS=kong-db"
depends_on:
- "kong-migrate"
restart: "on-failure:3"
kong-migrate:
image: kong
depends_on:
- "kong-db"
environment:
KONG_DATABASE: "postgres"
KONG_PG_HOST: "kong-db"
KONG_PG_USER: "kong"
KONG_PG_PASSWORD: "kong"
KONG_CASSANDRA_CONTACT_POINTS: "kong-db"
command: "kong migrations bootstrap"
restart: "on-failure:3"
kong-db:
image: "postgres:9.6"
environment:
POSTGRES_USER: "kong"
POSTGRES_PASSWORD: "kong"
POSTGRES_DB: "kong"
volumes:
- ./kong_data:/var/lib/postgresql/data
konga:
image: pantsel/konga
ports:
- 1337:1337
environment:
- "DB_ADAPTER=postgres"
- "DB_HOST=konga-db"
- "DB_USER=konga"
- "DB_PASSWORD=konga"
restart: "on-failure:3"
depends_on:
- konga-db
konga-db:
image: "postgres:9.6"
environment:
POSTGRES_USER: "konga"
POSTGRES_PASSWORD: "konga"
POSTGRES_DB: "konga"
volumes:
- ./konga_data:/var/lib/postgresql/data
設定とポイント
左のCONNECTIONSのペインから選択して、CONNECTIONを作ります。
その時、Kong Admin Urlにhttp://kong:8001/
と入力します。
ローカルでの簡単検証のためなので、SSLはなし。ドメインはlocalhostではなく、kong
です。