前言:
本人因。。。。
介绍:
1.nginx是模块化设计的反向代理软件,C语言开发的
2.openresty是以nginx为核心的web开发平台,可以解析并执行lua脚本
3.kong是一个openresty应用,就是一个api -gateway
4.openresty与lua的联系类似于jvm和java的联系;但是openresty是基于nginx,主要用于web、api 之类的应用
个人理解:
kong 以 nginx 为核心主要实现反向代理和流量控制
通过nginx模块也可以实现反向代理和流量控制,但是过于繁杂,最重要的是需要人为的去更改代理和流量的规则,而kong则会动态的调整代理和流量的规则;
开发人员写一个接口想让外部访问,自动去找kong注册kong就会生成相应的规则,大大降低了运维的繁杂工作
一、部署kong
有两种部署方式,本文采用都基于postgresql数据库(可更换),本文只列举一种(”生产“)
1.创建docker网络
docker network create kong-net
2.运行postgresql数据库
docker-run:
docker run -d --name=kong-database --network=kong-net -p 5432:5432 -e POSTGRES_USER="kong" -e POSTGRES_DB="kong" -e "POSTGRES_HOST_AUTH_METHOD=trust" --restart always postgres:9.6
docker-compose:
version: "3"
service:
postgresql:
container_name: kong-database
image: postgres:9.6
ports:
- 5432:5432
environment:
POSTGRES_USER: "kong"
POSTGRES_DB: "kong"
restart: always
networks:
- kong-net
3.初始化数据库
docker-run:
docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" kong:latest kong migrations bootstrap
docker-compose:
version: "3"
service:
postgresql-init:
image: kong:latest
networks:
- kong-net
environment:
KONG_DATABASE: "postgres"
KONG_PG_HOST: "kong-database"
KONG_CASSANDRA_CONTACT_POINTS: "kong-database"
command: [kong,migrations,bootstrap]
4.运行kong
注:管理端口8001
docker-run:
docker run -d --name=kong --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -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" -p 8000:8000 -p 8443:8443 -p 8444:8444 -p 8001:8001 --restart always kong:latest
docker-compose:
version: "3"
service:
kong:
container_name: kong
networks:
- kong-net
environment:
KONG_DATABASE: "postgres"
KONG_PG_HOST: "kong-database"
KONG_CASSANDRA_CONTACT_POINTS: "kong-database"
KONG_PROXY_ACCESS_LOG: "/dev/stdout"
KONG_ADMIN_ACCESS_LOG: "/dev/stdout"
KONG_PROXY_ERROR_LOG: "/dev/stderr"
KONG_ADMIN_ERROR_LOG: "/dev/stderr"
KONG_ADMIN_LISTEN: "0.0.0.0:8001,0.0.0.0:8444 ssl"
ports:
- 8000:8000
- 8443:8443
- 8444:8444
- 8001:8001
restart: always
image: kong:latest
5.部署konga
---创建konga库
docker-run:
docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgresql://kong:@数据库IP地址:端口/konga
---运行konga
docker-run :
docker run -d -p 1337:1337 --network kong-net -e "TOKEN_SECRET=P@ssw0rd" -e "DB_ADAPTER=postgres" -e "DB_URL=postgresql://kong:@kong-database:5432/konga" -e "NODE_ENV=production" --name=konga pantsel/konga
docker-compose:
version: "3"
service:
konga:
image: pantsel/konga
container_name: konga
ports:
- 1337:1337
networks:
- kong-net
environment:
TOKEN_SECRET: "P@ssw0rd"
DB_ADAPTER:"postgres"
DB_URL: "postgresql://kong:@kong-database:5432/konga"
NODE_ENV: "production"
resoures:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.5'
memory: 200M
访问konga:
ip+port
创建管理账号
登录
添加被管理的kong
扩展:
部署psotgresql管理界面
docker run -d -p 8009:80 --name=pgadmin --network=kong-net --link kong-database:kong-database -e "PGADMIN_DEFAULT_EMAIL=admin@1000phone.cn" -e "PGADMIN_DEFAULT_PASSWORD=p@ssw0rd" --restart always -d dpage/pgadmin4