我想使用 Kong 作为 API 网关。我正在使用 Kong 图像。
这是我的撰写文件:
services:
api_gateway:
container_name: api_gateway
image: kong
volumes:
- ./:/app
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong_postgresql
- KONG_PG_PORT=5432
- KONG_PG_USER=kong
- KONG_PG_DB=kong
- KONG_PG_PASSWORD=password
- 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
- KONG_DECLARATIVE_CONFIG=/app/kong.yml
ports:
- 8000:8000
- 8443:8443
- 8001:8001
- 8444:8444
command: bash -c "while !</dev/tcp/kong_postgresql/5432; do sleep 10; done; kong migrations bootstrap && kong start"
restart: always
kong_postgresql:
image: postgres
container_name: kong_postgresql
restart: always
expose:
- 5432
environment:
POSTGRES_USER: kong
POSTGRES_PASSWORD: password
POSTGRES_DB: kong
ports:
- 5432:5432
这是我的 kong.yml:
_format_version: "3.0"
_transform: true
services:
- name: customer_service
url: http://customer:81/
- name: auth_service
url: http://auth:84/
routes:
- name: basket-requests
service: basket_service
paths:
- /basket
- name: auth-requests
service: auth_service
paths:
- /auth
plugins:
- name: jwt
service: basket_service
enabled: true
config:
uri_param_names:
- jwt
key_claim_name: kid
maximum_expiration: 100
claims_to_verify:
- exp
数据库和Kong启动成功。但是当我在 http://localhost:8001/services 发出请求时,它返回一个空数组。为什么会这样? Kong 不支持使用数据库的声明式配置吗?我想从我的 kong.yml 文件加载我的实体到 postgresql。
我试过设置KONG_DATABASE=off然后就OK了。如果在 http://localhost:8001/services 发出请求,它会返回 kong.yml 文件中的服务。
如果要同时使用声明式配置文件和数据库,可以使用kong config db_import 命令将文件中的配置导入到数据库中。
试试这个:
docker exec -it api_gateway bash
kong config db_import /app/kong.yml
在这里你可以找到一些关于
db_import
命令的重要说明:https://docs.konghq.com/deck/latest/faqs/