LoginSignup
3
2

More than 5 years have passed since last update.

tyk で API Gateway を作ってみた【パート1: コンポーネント起動編】

Last updated at Posted at 2018-05-19

tykでAPI Gatewayを作りました。
本ページではDockerを用いたtykコンポーネントの起動手順を紹介します。

実装環境

$ sw_vers

ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G1314

参考文献

ほとんどの内容がtykのオフィシャルページに掲載されています。
ページが英語なので、ここでは日本語で紹介します。
また、補足説明を追加しました。

前提条件

  1. dockerがインストールされている
  2. gitがインストールされている
  3. python 2.7がインストールされている
$ docker version

Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

手順

  1. Tyk Gatewayの起動
  2. Tyk Dashboardの起動
  3. Tyk Pumpの起動

1. Tyk Gatewayの起動

redisコンテナの取得

$ docker pull redis

Tyk Gatewayコンテナの取得

$ docker pull tykio/tyk-gateway

redisの起動

$ docker run -d --name tyk_redis redis

tyk_gatewayの起動

$ docker run --name tyk_gateway -p 8080:8080 --link tyk_redis:redis -v $(pwd)/apps:/opt/tyk-gateway/apps tykio/tyk-gateway

time="May 19 08:32:57" level=error msg="No gRPC URL is set!" 
2018/05/19 08:32:57 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: No gRPC URL is set!"; Reconnecting to { <nil>}
time="May 19 08:32:57" level=info msg="PIDFile location set to: /var/run/tyk-gateway.pid" 
time="May 19 08:32:57" level=info msg="Initialising Tyk REST API Endpoints" 
time="May 19 08:32:57" level=info msg="Starting Poller" 
time="May 19 08:32:57" level=info msg="Redis connection pools are ready after number of retires" currRetry=0 
time="May 19 08:32:57" level=info msg="Redis connection pools are ready" 
time="May 19 08:32:57" level=info msg="--> Standard listener (http)" port=":8080" 
time="May 19 08:32:57" level=info msg="Setting up Server" 
time="May 19 08:32:57" level=info msg="Gateway started (v2.6.1)" 
time="May 19 08:32:57" level=info msg="Initialising distributed rate limiter" 
time="May 19 08:32:57" level=info msg="--> Listening on address: (open interface)" 
time="May 19 08:32:57" level=info msg="--> Listening on port: 8080" 
time="May 19 08:32:57" level=info msg="--> PID: 9" 
time="May 19 08:32:57" level=info msg="Loading policies" 
time="May 19 08:32:57" level=info msg="Policies found (1 total):" 
time="May 19 08:32:57" level=info msg=" - default" 
time="May 19 08:32:57" level=info msg="Starting gateway rate limiter notifications..." 
time="May 19 08:32:57" level=info msg="Loading API Specification from /opt/tyk-gateway/apps/app_sample.json" 
time="May 19 08:32:57" level=info msg="Detected 1 APIs" 
time="May 19 08:32:57" level=info msg="Preparing new router" 
time="May 19 08:32:57" level=info msg="Initialising Tyk REST API Endpoints" 
time="May 19 08:32:57" level=info msg="Loading API configurations." 
time="May 19 08:32:57" level=info msg="Tracking hostname" api_name="Tyk Test API" domain="(no host)" 
time="May 19 08:32:57" level=info msg="Loading API" api_name="Tyk Test API" 
time="May 19 08:32:57" level=warning msg="The Health Checker is deprecated and we do no longer recommend its use." 
time="May 19 08:32:57" level=info msg="Checking security policy: Token" api_name="Tyk Test API" 
time="May 19 08:32:57" level=info msg="Processed and listening on: /tyk-api-test/{rest:.*}" 
time="May 19 08:32:57" level=info msg="Loading uptime tests..." 
time="May 19 08:32:57" level=info msg="Initialised API Definitions" 
time="May 19 08:32:57" level=info msg="API reload complete" 
time="May 19 08:32:58" level=error msg="No gRPC URL is set!" 
2018/05/19 08:32:58 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: No gRPC URL is set!"; Reconnecting to { <nil>}
time="May 19 08:33:00" level=error msg="No gRPC URL is set!" 
2018/05/19 08:33:00 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: No gRPC URL is set!"; Reconnecting to { <nil>}
time="May 19 08:33:03" level=error msg="No gRPC URL is set!" 
2018/05/19 08:33:03 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: No gRPC URL is set!"; Reconnecting to { <nil>}

※エラーメッセージは無視して良い。
※※"/apps"はAPIのjsonファイルの格納用です。

動作確認

$ curl -L http://localhost:8080//tyk-api-test/get

{
    "error": "Authorization field missing"
}

2. Tyk Dashboardの起動

MongoDBコンテナの取得

$ docker pull mongo

Using default tag: latest
latest: Pulling from library/mongo
4d0d76e05f3c: Already exists 
2da2ecd7fdbd: Pull complete 
c3a86da34d0f: Pull complete 
e2b1f447e420: Pull complete 
c9e820834b36: Pull complete 
ffa34fa64bf4: Pull complete 
63127ea58ee0: Pull complete 
ccb46836c598: Pull complete 
7b0abf374ec4: Pull complete 
0e8b13c8fd38: Pull complete 
Digest: sha256:c6d2b2f8c054210db26b492bab81ffab171ee54eb58925fa98fabb4faca3a9cb
Status: Downloaded newer image for mongo:latest

MongoDBコンテナの起動

$ docker run --name tyk_mongo -d mongo

hostsファイルの編集

$ vi /etc/hosts

下記をhostsファイルにコピペ

127.0.0.1 dashboard.tyk.docker

Tyk Dashboardの起動

$ docker run -d --name tyk_dashboard -p 3000:3000 --link tyk_redis:redis --link tyk_mongo:mongo --link tyk_gateway:tyk_gateway tykio/tyk-dashboard

Unable to find image 'tykio/tyk-dashboard:latest' locally
latest: Pulling from tykio/tyk-dashboard
b0568b191983: Already exists 
2ae2471d369e: Pull complete 
63c9c80af39f: Pull complete 
f65dd2df80ff: Pull complete 
Digest: sha256:880f5f7dc4dd74bfbbd5699bdd3c16c051bdceb2e84c02f1eb6a7cf12bed74dd
Status: Downloaded newer image for tykio/tyk-dashboard:latest
docker: Error response from daemon: could not get container for tyk_gateway: No such container: tyk_gateway.
See 'docker run --help'. ```

起動確認。ブラウザからダッシュボードにアクセス

$ open http://dashboard.tyk.docker:3000/ 

スクリーンショット 2018-05-19 18.01.09.png

tyk-dashbord の git を取得

$ git clone https://github.com/TykTechnologies/tyk-dashboard-docker.git

Cloning into 'tyk-dashboard-docker'...
remote: Counting objects: 211, done.
remote: Total 211 (delta 0), reused 0 (delta 0), pack-reused 211
Receiving objects: 100% (211/211), 30.05 KiB | 119.00 KiB/s, done.
Resolving deltas: 100% (118/118), done.

bootstrap の実行

$ cd tyk-dashboard-docker/
$ ./bootstrap.sh dashboard.tyk.docker

Creating Organisation
ORGID: 5b01186bcd4a35000169be3c
Adding new user
USER AUTH: c2c7fe9ff4024be14536afce7c976d3c
NEW ID: 5b01186b1f6c8556b28b47d8
Setting password

DONE
====
Login at http://dashboard.tyk.docker:3000/
User: bfkzo935wx@default.com
Pass: test123

注意:python 3.0 以降では動作しません。
bootstrap.sh 内の "RANDOM_USER", "PASS" 変数でユーザ名、パスワードを指定できます。

3. Tyk Pump containerの起動

Tyk Pumpコンテナの取得

$ docker pull tykio/tyk-pump-docker-pub

Using default tag: latest
latest: Pulling from tykio/tyk-pump-docker-pub
b0568b191983: Already exists 
99f635d1dd79: Pull complete 
93b85fd833fa: Pull complete 
50ba1616afbf: Pull complete 
Digest: sha256:95e6e13d6289fd9c16e49d2d3f686162f554776aa7f1675ca51e2252b940364b
Status: Downloaded newer image for tykio/tyk-pump-docker-pub:latest

Tyk Pumpの起動

$ docker run -d --name tyk_pump --link tyk_redis:redis --link tyk_mongo:mongo tykio/tyk-pump-docker-pub
3
2
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
3
2