透过Kong的错误使用方式,简略地传达Kong是什么
首先
我创建了微服务,但是随着端点和新服务的增加,管理变得繁琐。
-
- 新しいドメインを増やしたり
- ドキュメントがバラバラになったり
当我想要做点什么的时候,我了解到了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
创建适用于孔的环境
让我们进入启动的docker-machine,并创建所需的容器。
我们可以使用cassandra和postgrel来保存kong的信息,但这次我们将使用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的内部还是外部,都可以向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的私有IP地址添加到hosts文件中。
$ echo "$(echo $(docker-machine ip bookmark)) bookmark" | \
sudo tee -a /etc/hosts
$ cat /etc/hosts
...<略>
192.168.99.101 bookmark
用浏览器打开书签或者 Qiita。
我打开了Qiita的首页。
我试试在另一个接口上注册的Yahoo。
被展示出来了。
总结
用这种方式,可以在一个地方管理每个资源。
还可以获取已注册的API信息。
使用它可以方便地集中管理构成微服务的多个终端点。