API閘道器Kong系列(二)部署
部署環境:
[OS]
centos 6.8(如果是centos6.5,請自行先升級到6.8,否則不支援docker)
[Docker]
Client version: 1.7.1
Client API version: 1.19
推薦使用Docker engine 1.9以上版本,支援docker-compose
[Kong]
Version: 0.9.9
由於眾所周知的原因,國內連結dockerhub以及github都有不同程度的問題,建議用daocloud.io的docker映象加速服務提高image pull的速度
部署過程
1.部署資料庫
kong支援2類資料庫 cassandra 和 postgres,這邊應用場景不大,所以使用postgres
使用命令:
sudo docker run -d \
--name kong-database \
--restart=always \
-p 5432:5432 \
-e POSTGRES_USER=kong \
-e POSTGRES_DB=kong \
-v /var/lib/containers/kong/data:/var/lib/postgresql/data \
postgres
完成後容器自動啟動
P.S:注意最後 volume的對映,將容器內資料庫對映到了本地/var/lib/containers/kong/data下做持久化用,如果遷移的時候不要忘記了挪資料
2.部署kong服務
sudo docker run -d \
--name kong-core \
--restart=always \
-p 8001:8001 \
-p 20802:8443 \
-p 20801:8000 \
-p 7946:7946 \
-p 7946:7946/udp \
--link kong-database:kong-database \
-e KONG_DATABASE=postgres \
-e KONG_PG_HOST=kong-database \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-v /usr/local/container/kong/kong.conf:/usr/local/kong/kong.conf:ro \
-v /usr/local/container/kong/nginx-kong.conf/:/usr/local/kong/nginx-kong.conf:ro \
kong
配置SSL:
這裡使用letsencrypt的免費證書,如何生成,見另一篇文章
sudo vi /usr/local/container/kong/kong.conf
1.修改ssl_cert_key為你的私鑰pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/privkey.pem)
2.修改ssl_cert為你的證書 pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/fullchain.pem)
sudo vi /usr/local/container/kong/nginx-kong.conf
1.修改 ssl_certificate_key 為你的私鑰pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/privkey.pem)
2.修改 ssl_certificate 為你的證書 pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/fullchain.pem)
完成後進入容器:
sudo docker exec -it kong-core /bin/bash
重新載入配置
kong reload
退出容器
exit
P.S:
1.這裡先將時區修正下,如果不對的話 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime (否則會由於服務端/客戶端時間不一致影響之後的 hmac-sha1外掛的驗證)
2.kong.conf以及nginx-kong.conf是為了之後配置ssl使用,掛載為readOnly,初次啟動的時候先根據kong預設的,建立起這2個檔案,否則如果不生成檔案就啟動會發生問題,也可以第一次run的時候先不要載入為ro,讓它自動生成,然後rm掉這個容器,重新掛載為ro再啟動一下,那本地就會先自動生成了。最後對這兩個檔案chomd 700。
3.部署kong-dashboard
為方便通過ui增改外掛,裝一個方便的外掛ui
sudo docker run -d \
--name kong-ui \
--restart=always \
--link kong-core:kong-core \
-p 8080:8080 \
pgbi/kong-dashboard
啟動後Kong node URL,輸入上面 link過的kong-core(這裡就是"kong-core")名稱(我之前嘗試用ip什麼都不太正常)
備註 docker-compose.yml
1 version: "2"
2
3 services:
4 kong-database:
5 image: postgres
6 container_name: kong-database
7 restart: always
8 ports:
9 - "5432:5432"
10 environment:
11 - POSTGRES_USER=kong
12 - POSTGRES_DB=kong
13 volumes:
14 - "/var/lib/containers/kong/data:/var/lib/postgresql/data"
15 kong:
16 image: kong:0.9.9
17 container_name: kong-core
18 environment:
19 - KONG_DATABASE=postgres
20 - KONG_PG_HOST=kong-database
21 restart: always
22 ports:
23 - "20801:8000"
24 - "20802:8443"
25 - "8001:8001"
26 - "7946:7946"
27 - "7946:7946/udp"
28 links:
29 - kong-database
30 volumes:
31 - "/etc/localtime:/etc/localtime:ro"
32 - "/etc/letsencrypt:/etc/letsencrypt:ro"
33 - "/usr/local/container/kong/kong.conf:/usr/local/kong/kong.conf:ro"
34 - "/usr/local/container/kong/nginx-kong.conf/:/usr/local/kong/nginx-kong.conf:ro"
35 kong-ui:
36 image: pgbi/kong-dashboard
37 container_name: kong-ui
38 restart: always
39 links:
40 - kong-core
41 ports:
42 - "8080:8080"