透过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。

yahoo.png

被展示出来了。

总结

用这种方式,可以在一个地方管理每个资源。
还可以获取已注册的API信息。

apis.png

使用它可以方便地集中管理构成微服务的多个终端点。

广告
将在 10 秒后关闭
bannerAds