docker部署:
一、创建容器网络,保证KONG的各个组件在一个网络环境下:
docker network create kong-net
二、kong需要依赖数据库来存储各种配置信息,官方建议使用postgre,下面先用docker来启一个postgre实例:
docker run --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=123456" \
-v /home/kong/data/postgres:/var/lib/postgresql/data \
postgres:9.5
三、为KONG初始化数据库
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:1.5 kong migrations bootstrap
四、接下来启动KONG
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-v /home/kong/data/log/kong:/var/log \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:1.5
-
8001/8444端口用于监听对kong admin的操作; - 8000/8443端口用于监听客户端请求。
五、启动kong admin UI(可选)
docker run -d --name kong-admin-ui -p 8899:80 pocketdigi/kong-admin-ui:0.5.2
docker ps查看一下:
至此,kong服务已经成功启动。接下来我们用restful api创建一个服务和路由:
六、创建服务和路由
- 创建服务
curl -i -X POST http://localhost:8001/services \
--data name=baidu_service \
--data host='www.baidu.com'
创建了一个名为baidu_service的服务。
- 为服务创建路由
curl -i -X POST http://localhost:8001/services/baidu_service/routes \
--data 'paths[]=/my-baidu' \
--data 'name=baidu'
为baidu_service这个服务创建了一个路由,路径为my-baidu。
七、测试
访问http://localhost:8000/my-baidu,kong就会把请求转发到真正的服务上。
当然也可以通过访问我们部署的kong admin ui来查看管理kong后台:http://localhost:8899/,效果如下:
docker-compose部署:
版本一:
version: "3"
networks:
project-net:
driver: bridge
services:
# 为kong创建数据库 postgres
kong-database:
container_name: kong-database
image: postgres:9.5
restart: always
networks:
- project-net
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: 123456
TZ: Asia/Shanghai
ports:
- "5432:5432"
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 5s
timeout: 5s
retries: 5
# 为kong数据库初始化
kong-migration:
container_name: kong-migration
image: kong:1.5
command: "kong migrations bootstrap"
networks:
- project-net
restart: on-failure
environment:
KONG_PG_HOST: kong-database
KONG_DATABASE: postgres
KONG_PG_USER: kong
KONG_PG_PASSWORD: 123456
KONG_CASSANDRA_CONTACT_POINTS: kong-database
links:
- kong-database
depends_on:
- kong-database
# 启动kong
kong:
container_name: kong
image: kong:1.5
restart: always
networks:
- project-net
environment:
KONG_PG_HOST: kong-database
KONG_DATABASE: postgres
KONG_PG_PASSWORD: 123456
KONG_CASSANDRA_CONTACT_POINTS: kong-database
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
KONG_ADMIN_LISTEN: 0.0.0.0:8001,0.0.0.0:8444 ssl
TZ: Asia/Shanghai
depends_on:
- kong-migration
- kong-database
healthcheck:
test: ["CMD", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
- "8444:8444"
# kong UI
kong-admin-ui:
container_name: kong-admin-ui
image: pocketdigi/kong-admin-ui:0.5.2
networks:
- project-net
restart: always
ports:
- "8899:80"
depends_on:
- kong-database
- kong-migration
- kong
版本二(cmdb项目中实际使用的):
version: '3'
volumes:
kong_data: { }
services:
kong-database:
container_name: kong-database
image: postgres:9.6
restart: always
hostname: kong-database
ports:
- "5432:5432"
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
volumes:
- kong_data:/var/lib/postgresql/data
kong:
container_name: kong
# image: tyhub.touch4.me/ops/tyops-kong-with-go-plugin:0.0.3
image: kong:2.5.0-alpine
restart: always
hostname: kong
ports:
- "8000:8000"
- "8001:8001"
depends_on:
- kong-database
environment:
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_CASSANDRA_CONTACT_POINTS: kong-database
# KONG_PLUGINS: bundled,go-hello
# KONG_PLUGINSERVER_NAMES: go-hello
# KONG_PLUGINSERVER_GO_HELLO_QUERY_CMD: go-hello -dump
konga:
container_name: kong-dashboard
image: pantsel/konga
restart: always
hostname: konga
ports:
- "1337:1337"
environment:
NODE_ENV: development
TOKEN_SECRET: 123456
kong-migration:
image: kong:2.5.0-alpine
command: "kong migrations bootstrap"
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_HOST=kong-database
links:
- kong-database #连接的是kong-database服务的
depends_on:
- kong-database #依赖于kong-database服务
konga启动后,需要配置kong-admin url,注意不要使用127.0.0.1或localhost,需要使用你机器的真正ip地址或docker-compose中配置的kong的hostname即kong。
简单配置一下就可以使用了。