我对 Kong API Gateway 非常陌生,目前正在尝试使用 PostgreSQL 作为我的数据库容器运行 Kong 容器。
我怎样才能做到这一点?
您可以按照Kong 安装指南进行操作。它按预期对我有用。
第 1 步:启动 Postgres 容器
docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.5
第二步:迁移数据库
docker run --rm \
--link kong-database:kong-database \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up
第三步:启动Kong
docker run -d --name kong \
--link kong-database:kong-database \
-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" \
-e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
第四步:验证
curl -i http://localhost:8001/
1. 启动你的数据库:
$ docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.4
2.开工:
启动一个 Kong 容器并将其链接到您的数据库容器,使用 postgres 配置 KONG_DATABASE 环境变量。
$ docker run -d --name kong \
--link kong-database:kong-database \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 7946:7946 \
-p 7946:7946/udp \
kong
3.验证Kong是否正在运行:
$ curl http://127.0.0.1:8001
回答@StefanWalther 的问题,这是一个关于如何使其与 docker-compose 一起使用的示例:
version: "2.1"
services:
kong:
image: kong:latest
depends_on:
kong-database:
condition: service_healthy
healthcheck:
test:
- CMD
- nc
- -z
- localhost
- "8443"
retries: 10
links:
- kong-database:kong-database
command:
- "kong"
- "start"
- "--vv"
environment:
- KONG_DATABASE=cassandra
- KONG_CASSANDRA_CONTACT_POINTS=kong-database
- KONG_ADMIN_LISTEN=0.0.0.0:8001
- KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444
- KONG_NGINX_DAEMON=off
ports:
- "443:8443"
- "8001:8001"
restart: always
network_mode: "bridge"
kong-database:
image: cassandra:3
healthcheck:
test:
- "CMD-SHELL"
- "[ $$(nodetool statusgossip) = running ]"
volumes:
- ~/kong-database/cassandra:/var/lib/cassandra
expose:
- "9042"
restart: always
network_mode: "bridge"
此外,您可以添加 kongfig 以再次重新配置实例:
kong-configurer:
image: mashupmill/kongfig
depends_on:
kong:
condition: service_healthy
links:
- kong:kong
volumes:
- ~/config.yml:/config.yml:ro
command: --path /config.yml --host kong:8001
network_mode: "bridge"
您可以转储配置以在最后一个容器中使用:
kongfig dump --host localhost:8001 > ~/config.yml
关于 Kongfig 的更多信息,请点击此处。
干杯。
2020 年更新
docker network create my-net
docker run -d --name kong-database --network my-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_HOST_AUTH_METHOD=trust" -e "POSTGRES_DB=kong" postgres:alpine
docker run --rm \
--network my-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
kong:latest kong migrations bootstrap
docker run -d --name kong \
--network my-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=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" \
-e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
curl http://127.0.0.1:8001
你检查了以下回购吗?
这是我自己的 docker compose,它运行良好(来自 kong 在 github 上的 docker 项目,我使用了 kong-oidc,你可以选择你喜欢的任何版本)。
kong:
image: kong:1.3.0-alpine-oidc
container_name: kong
depends_on:
- kong-db
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
restart: on-failure
ports:
- "8000:8000" # Listener
- "8001:8001" # Admin API
- "8443:8443" # Listener (SSL)
- "8444:8444" # Admin API (SSL)
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_PORT: 5432
KONG_PG_DATABASE: api-gw
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_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
KONG_PLUGINS: bundled,oidc
KONG_LOG_LEVEL: debug
kong-migrations:
image: kong:1.3.0-alpine-oidc
command: kong migrations bootstrap
container_name: kong-migrations
depends_on:
- kong-db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: api-gw
KONG_PG_HOST: kong-db
KONG_PG_PASSWORD:
KONG_PG_USER: kong
links:
- kong-db:kong-db
restart: on-failure
kong-migrations-up:
image: kong:1.3.0-alpine-oidc
container_name: kong-migrations-up
command: kong migrations up && kong migrations finish
depends_on:
- kong-db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: api-gw
KONG_PG_HOST: kong-db
KONG_PG_PASSWORD:
KONG_PG_USER: kong
links:
- kong-db:kong-db
restart: on-failure