LoginSignup
24
19

More than 3 years have passed since last update.

Kongの間違えた使い方を通して、Kongとは何かをざっくり伝える

Last updated at Posted at 2016-07-29

はじめに

マイクロサービスを作ったのだが、エンドポイントや、
新しいサービスが増えるごとに管理が煩雑になってしまう。

  • 新しいドメインを増やしたり
  • ドキュメントがバラバラになったり

なんとかしたい、というときに、Kongを知った。

Kongとは、APIゲートウェイをお手軽に実装できるもののようだ。

今回はそのKongの間違った使い方をして、何ができるのかを分かるようにする。

インストール方法

Dockerのイメージから作るのが手っ取り早い。
もちろんDocker以外にもインストール方法はある

docker-machineを利用しよう

ポート80が空いているほうが、あとあと面白いので、新しいdocker-machineを作る。
virtualboxを利用しているのであれば、以下の通り。
AWSを利用したいのであれば、この記事を参考にdocker-machineをつくる。

$ docker-machine create --driver virtualbox bookmark
Running pre-create checks...
(bookmark) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(bookmark) Latest release for github.com/boot2docker/boot2docker is v1.12.0
(bookmark) Downloading /Users/amachi/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.0/boot2docker.iso...
...<略>
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env bookmark

kong用の環境をつくる

では立ち上げたdocker-machineに入って、必要なコンテナを作ろう。
kongに入る情報を保存するために、cassandraとpostgrelが利用できるが、今回はcassandraを利用する。

$ docker-machine ssh bookmark
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.12.0, build HEAD : e030bab - Fri Jul 29 00:29:14 UTC 2016
Docker version 1.12.0, build 8eab29e
docker@bookmark:~$ docker run -d --name kong-database \
              -p 9042:9042 \
              cassandra:2.2

docker@bookmark:~$ docker run -d --name kong \
              --link kong-database:kong-database \
              -e "DATABASE=cassandra" \
              -p 80:8000 \
              -p 8443:8443 \
              -p 8001:8001 \
              -p 7946:7946 \
              -p 7946:7946/udp \
              --security-opt seccomp:unconfined \
              mashape/kong

起動の確認

cassandraなどの起動がすべて終わった後でないと動かないので注意。
以下のコマンドですぐにレスポンスが返ってこなくても、少し待ってみたほうがいい。

$ curl http://$(docker-machine ip bookmark):8001/apis
{"data":[],"total":0} # ← これが帰ってくれば成功

kongにendpointを追加

docker-machine内からでも、docker-machine外からでもいいのだが、
kongサーバにAPIの情報を送る。詳しいパラメータの情報は後述する。

今回はdocker-machine内からkongサーバに登録するようにした。

docker@bookmark:~$ curl -i -X POST \
>   --url http://localhost:8001/apis/ \
>   --data 'name=yahoo' \
>   --data 'upstream_url=http://www.yahoo.co.jp/' \
>   --data 'strip_request_path=true' \
>   --data 'request_path=/yahoo' --data 'request_host=www.yahoo.co.jp'
HTTP/1.1 201 Created
Date: Fri, 29 Jul 2016 10:01:23 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.8.3

{"upstream_url":"http:\/\/www.yahoo.co.jp\/","strip_request_path":true,"request_path":"\/yahoo","id":"e980e20b-1e32-4ebf-8f78-ec0d7a17b42f","created_at":1469786483000,"preserve_host":false,"name":"yahoo","request_host":"www.yahoo.co.jp"}
docker@bookmark:~$ curl -i -X POST \
>   --url http://localhost:8001/apis/ \
>   --data 'name=qiita' \
>   --data 'upstream_url=http://qiita.com/' \
>   --data 'strip_request_path=true' \
>   --data 'request_path=/qiita' --data 'request_host=qiita.com'
HTTP/1.1 201 Created
Date: Fri, 29 Jul 2016 10:02:08 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.8.3

{"upstream_url":"http:\/\/qiita.com\/","strip_request_path":true,"request_path":"\/qiita","id":"840de9fd-ae43-4b2c-84ac-e1f2fcb584b0","created_at":1469786528000,"preserve_host":false,"name":"qiita","request_host":"qiita.com"}

コマンドのみ抜き出し

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=yahoo' \
  --data 'upstream_url=http://www.yahoo.co.jp/' \
  --data 'strip_request_path=true' \
  --data 'request_path=/yahoo' --data 'request_host=www.yahoo.co.jp'

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=qiita' \
  --data 'upstream_url=http://qiita.com/' \
  --data 'strip_request_path=true' \
  --data 'request_path=/qiita' --data 'request_host=qiita.com'

hostsにdocker-machineを追加

今回作成したdocker-machineのPrivateIPアドレスをhostsに追加する。

$ echo "$(echo $(docker-machine ip bookmark))  bookmark" | \
  sudo tee -a /etc/hosts

$ cat /etc/hosts
...<略>
192.168.99.101  bookmark

ブラウザでbookmark/qiitaを開く

qiitaのトップページが開けた。
別のエンドポイントで登録したyahooも見てみる。

yahoo.png

表示されている。

まとめ

こんな感じで、それぞれのリソースを一箇所で管理できた。
そして、登録しているAPI情報を取ってくることもできる。

apis.png

マイクロサービスを構成する複数のエンドポイントを一元管理するために利用するのによさそう。

24
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
19