tjtjtjのメモ

自分のためのメモです

kong DBレスモードを試す

インストール docker DBレスモード

ここら辺から

docker ネットワーク作成

$ docker network create kong-net
0598ab6e41283c8cac2e0f860f1a961641705176d1e0699965547c96ec8cf1e2

docker ボリューム作成

$ docker volume create kong-vol
kong-vol
$ docker volume inspect kong-vol
[
    {
        "CreatedAt": "2019-09-17T19:59:14+09:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/kong-vol/_data",
        "Name": "kong-vol",
        "Options": {},
        "Scope": "local"
    }
]

作ったボリュームに設定ファイルを作成。

_format_version: "1.1"

services:
- name: my-service
  url: http://mockbin.org
  plugins:
  - name: key-auth
  routes:
  - name: my-route
    paths:
    - /

consumers:
- username: my-user
  keyauth_credentials:
  - key: my-key

mockbin.org は http://mockbin.org とか http://mockbin.org/bin/asdf とか http://mockbin.org/bin/create みると雰囲気がわかる?

DBレスモードでKongを起動

$ docker run --rm --name kong \
     --network=kong-net \
     -v "kong-vol:/usr/local/kong/declarative" \
     -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, 0.0.0.0:8444 ssl" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 8001:8001 \
     -p 8444:8444 \
     kong:latest

コングにサービスを問い合わせる。yamlの内容が得られた

$ curl -s http://localhost:8001/services | jq .
{
  "next": null,
  "data": [
    {
      "host": "mockbin.org",
      "created_at": 1568720431,
      "connect_timeout": 60000,
      "id": "0855b320-0dd2-547d-891d-601e9b38647f",
      "protocol": "http",
      "name": "my-service",
      "read_timeout": 60000,
      "port": 80,
      "path": null,
      "updated_at": 1568720431,
      "client_certificate": null,
      "tags": null,
      "write_timeout": 60000,
      "retries": 5
    }
  ]
}

コンシューマー

$ curl -s http://localhost:8001/consumers | jq .
{
  "next": null,
  "data": [
    {
      "custom_id": null,
      "created_at": 1568720431,
      "id": "4b1b701d-de2b-5588-9aa2-3b97061d9f52",
      "tags": null,
      "username": "my-user"
    }
  ]
}

コングを使ってみる

単に curl。Unauthorized と怒られた。

$ curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: mockbin.org'
HTTP/1.1 401 Unauthorized
Date: Tue, 17 Sep 2019 11:42:44 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Key realm="kong"
Content-Length: 41
Server: kong/1.3.0

apikey つけて curlhttp://mockbin.org したようだ。

$ curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: mockbin.org' \
  --header "apikey: my-key"
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 10695
Connection: keep-alive
Server: openresty/1.15.8.2
Date: Tue, 17 Sep 2019 11:47:19 GMT
Etag: W/"29c7-XG+PICJmz/J+UYWt5gkKqqAUXjc"
Vary: Accept-Encoding
Via: kong/1.3.0
X-Kong-Upstream-Status: 200
X-Kong-Upstream-Latency: 399
X-Kong-Proxy-Latency: 175
Kong-Cloud-Request-ID: 5330a546053d64dd589e553764367b44

<!DOCTYPE html><html><head><meta charset="utf-8"><title>Mockbin by Kong</title>....