手记

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=kong12       - POSTGRES_DB=kong13     volumes:14       - "/var/lib/containers/kong/data:/var/lib/postgresql/data"15   kong:16     image: kong:0.9.917     container_name: kong-core18     environment:19       - KONG_DATABASE=postgres20       - KONG_PG_HOST=kong-database21     restart: always22     ports:23       - "20801:8000"24       - "20802:8443"25       - "8001:8001"26       - "7946:7946"27       - "7946:7946/udp"28     links:29       - kong-database30     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-dashboard37     container_name: kong-ui38     restart: always39     links:40       - kong-core41     ports:42       - "8080:8080"


原文出处


0人推荐
随时随地看视频
慕课网APP