概述
支持的安装方式https://konghq.com/install/
端口
端口 | 作用 |
---|---|
8000 | http网关 |
8443 | https网关 |
8001 | 管理api |
8444 | https的管理api |
- 8000:此端口是 Kong 用来监听来自客户端传入的 HTTP 请求,并将此请求转发到上游服务器;(Kong 根据配置的规则转发到真实的后台服务地址)
- 8443:此端口是 Kong 用来监听来自客户端传入的HTTPS请求的。它跟8000端口的功能类似,转发 HTTPS 请求的。可以通过修改配置文件来禁止它;
- 8001:Admin API,通过此端口,管理者可以对 Kong 的监听服务进行配置,插件设置、API 的增删改查、以及负载均衡等一系列的配置都是通过 8001 端口进行管理;
- 8444:通过此端口,管理者可以对 HTTPS 请求进行监控。
docker
个人开发试验推荐使用docker方式https://docs.konghq.com/install/docker/,安装文档 https://docs.konghq.com/install/docker/
创建网络
$ docker network create kong-net
955f176da787ab7b6e924680c8c165427c6e2d329519a97bdcbcbd4f104211a6
创建数据库postgres
$ docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
数据库初始化
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations bootstrap
启动
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-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 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
kong:latest
测试启动
curl -i http://localhost:8001/
docker-compose
只含有kong
kong的运行需要数据库的支持,目前官方支持postgresql和cassandra,安装官方的docker安装方式也比较啰嗦,本地调试推荐使用docker-compose方便快捷,个人使用的一个docker-compose模板板:https://gist.github.com/pantsel/73d949774bd8e917bfd3d9745d71febf和https://github.com/Kong/docker-kong/blob/master/compose/docker-compose.yml
version: "3.7"
volumes:
kong_data: {}
networks:
kong-net:
name: kong-net
services:
#######################################
# Postgres: The database used by Kong
#######################################
kong-database:
image: postgres:9.6
container_name: kong-postgres
restart: on-failure
networks:
- kong-net
volumes:
# - ./init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh
- kong_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: kong
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong}
POSTGRES_DB: kong
ports:
- "5432:5432"
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 30s
timeout: 30s
retries: 3
#######################################
# Kong database migration
#######################################
kong-migration:
image: ${KONG_DOCKER_TAG:-kong:latest}
command: kong migrations bootstrap
networks:
- kong-net
restart: on-failure
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
depends_on:
- kong-database
#######################################
# Kong: The API Gateway
#######################################
kong:
image: ${KONG_DOCKER_TAG:-kong:latest}
restart: on-failure
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
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
depends_on:
- kong-database
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
ports:
- "8000:8000"
- "8001:8001"
- "8443:8443"
- "8444:8444"
包含konga
konga是kong的第三方dashbord,kong 官方社区版只提供了admin api没有可视化UI配置界面,穷屌丝推荐第三方ui的是konga
访问地址是安装过程中定义的ip端口,默认:http://{your server’s public ip}:1337,首次打开需要注册管理员
version: "3.7"
volumes:
kong_data: {}
networks:
kong-net:
services:
#######################################
# Postgres: The database used by Kong
#######################################
kong-database:
image: postgres:9.6
container_name: kong-postgres
restart: on-failure
networks:
- kong-net
volumes:
- kong_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: kong
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong}
POSTGRES_DB: kong
ports:
- "5432:5432"
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 30s
timeout: 30s
retries: 3
#######################################
# Kong database migration
#######################################
kong-migration:
image: ${KONG_DOCKER_TAG:-kong:latest}
command: kong migrations bootstrap
networks:
- kong-net
restart: on-failure
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
depends_on:
- kong-database
#######################################
# Kong: The API Gateway
#######################################
kong:
image: ${KONG_DOCKER_TAG:-kong:latest}
restart: on-failure
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
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
depends_on:
- kong-database
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
ports:
- "8000:8000"
- "8001:8001"
- "8443:8443"
- "8444:8444"
#######################################
# Konga database prepare
#######################################
konga-prepare:
image: pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga"
networks:
- kong-net
restart: on-failure
depends_on:
- kong-database
#######################################
# Konga: Kong GUI
#######################################
konga:
image: pantsel/konga:latest
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_URI: postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga
NODE_ENV: production
depends_on:
- kong-database
ports:
- "1337:1337"
$ docker-compose up -d
出现下面内容表示安装完成了
Status: Downloaded newer image for kong:latest
Creating compose_db_1 ... done
Creating compose_kong-migrations-up_1 ... done
Creating compose_kong_1 ... done
Creating compose_kong-migrations_1 ... done
查看启动的服务
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3de856b6bb3 kong:latest "/docker-entrypoint.…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp compose_kong_1
4eedde7cd7fd postgres:9.5 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 5432/tcp compose_db_1
k8s
官方安装 https://docs.konghq.com/2.1.x/kong-for-kubernetes/install/
YAML manifests
To deploy Kong via kubectl
, use:
kubectl apply -f https://bit.ly/kong-ingress-dbless
如果使用数据库,我们建议在Kubernetes内部以内存中模式(也称为无db模式)运行Kong,因为所有配置都存储在Kubernetes控制平面中。这种设置简化了Kong的操作,因此无需担心数据库配置、备份、可用性、安全性等问题。如果您决定使用数据库,我们建议您在Kubernetes之外运行数据库。您可以使用Amazon的RDS之类的服务或云提供商提供的类似的托管Postgres服务来自动化数据库操作。
我们不建议在部署Kubernetes时使用与Cassandra一起使用的Kong,因为在Kubernetes中,Kong使用Cassandra所涵盖的特性是通过其他方式处理的。
konga配置
创建konga数据库,这个只需要首次启动konga的时候创建 只要不删除本地的volume 就不需要再次创建
$ docker run --rm --network=kong-net pantsel/konga:latest -c prepare -a postgres -u postgres://kong:kong@kong-database:5432/konga
开启konga服务
$ docker run -p 1337:1337 --network kong-net -e "DB_ADAPTER=postgres" -e "DB_URI=postgres://kong:kong@kong-database:5432/konga" -e "NODE_ENV=production" --name konga -d pantsel/konga
cenos
$ sudo yum update -y
$ sudo yum install -y wget
$ wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
$ export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1`
$ sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo
$ sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
$ sudo yum update -y
$ sudo yum install -y kong
日志
ong网关默认日志在/usr/local/kong/logs,主要有access.log,admin_access.log,error.log,access.log和nginx的access日志类似。
172.17.0.1 - - [10/Nov/2020:14:42:17 +0000] "GET /mock/request?key=hello-world HTTP/1.1" 200 1013 "-" "HTTPie/2.3.0"
172.17.0.1 - - [10/Nov/2020:15:39:24 +0000] "GET /mock/request?key=hello HTTP/1.1" 403 33 "-" "HTTPie/2.3.0"