Docker化Kong并动态配置上游URL:Docker Compose YAML编写求助
完整Docker化Kong配置(含双上游服务示例)
我帮你完善了Docker Compose文件,不仅补全了Kong的基础配置,还添加了两个示例上游服务,方便你测试路由转发功能。以下是完整的配置内容:
version: "2" services: postgres: image: postgres:9.4 container_name: kong-database ports: - "5432:5432" environment: - POSTGRES_USER=kong - POSTGRES_DB=kong - POSTGRES_PASSWORD=kong # 添加密码增强安全性,可选但推荐 volumes: - kong-db-data:/var/lib/postgresql/data # 持久化数据库数据,避免容器重启丢失 kong: image: kong:0.12-alpine container_name: kong depends_on: - postgres ports: - "8000:8000" # HTTP代理端口,对外提供服务 - "8443:8443" # HTTPS代理端口 - "8001:8001" # Kong管理API端口,用于配置上游、路由等 - "8444:8444" # HTTPS管理API端口 environment: - KONG_DATABASE=postgres - KONG_PG_HOST=postgres # 使用服务名连接数据库,比容器名更可靠 - KONG_PG_USER=kong - KONG_PG_PASSWORD=kong # 和数据库密码保持一致 - KONG_PROXY_ACCESS_LOG=/dev/stdout - KONG_ADMIN_ACCESS_LOG=/dev/stdout - KONG_PROXY_ERROR_LOG=/dev/stderr - KONG_ADMIN_ERROR_LOG=/dev/stderr # 第一个上游服务示例:使用httpbin返回请求信息,方便测试 upstream-service-1: image: mendhak/httpbin container_name: upstream-service-1 ports: - "8081:80" # 第二个上游服务示例 upstream-service-2: image: mendhak/httpbin container_name: upstream-service-2 ports: - "8082:80" volumes: kong-db-data:
配置说明
- PostgreSQL服务:作为Kong的配置存储数据库,添加了密码和数据持久化卷,避免容器重启后数据丢失。
- Kong服务:配置了数据库连接信息,暴露了必要的代理和管理端口,同时将日志输出到控制台方便调试。
- 上游服务:用两个
mendhak/httpbin容器作为示例上游,你可以替换成自己的业务服务镜像。
部署和配置步骤
启动所有容器
docker-compose up -d初始化Kong数据库
容器启动后,需要先执行数据库迁移来初始化Kong的表结构:docker-compose exec kong kong migrations up配置Kong上游和路由
通过Kong的管理API(localhost:8001)来配置两个上游的转发规则:配置第一个上游(upstream-1)
# 创建上游 curl -X POST http://localhost:8001/upstreams --data "name=upstream-1" # 向上游添加目标(指向我们的upstream-service-1容器) curl -X POST http://localhost:8001/upstreams/upstream-1/targets --data "target=upstream-service-1:80" # 创建关联的服务 curl -X POST http://localhost:8001/services --data "name=service-1" --data "url=http://upstream-1" # 创建路由,匹配路径/service1的请求转发到service-1 curl -X POST http://localhost:8001/services/service-1/routes --data "paths[]=/service1"配置第二个上游(upstream-2)
# 创建上游 curl -X POST http://localhost:8001/upstreams --data "name=upstream-2" # 向上游添加目标 curl -X POST http://localhost:8001/upstreams/upstream-2/targets --data "target=upstream-service-2:80" # 创建关联的服务 curl -X POST http://localhost:8001/services --data "name=service-2" --data "url=http://upstream-2" # 创建路由,匹配路径/service2的请求转发到service-2 curl -X POST http://localhost:8001/services/service-2/routes --data "paths[]=/service2"
测试验证
配置完成后,你可以通过以下地址测试转发效果:
- 访问
http://localhost:8000/service1,会看到upstream-service-1返回的请求信息 - 访问
http://localhost:8000/service2,会看到upstream-service-2返回的请求信息
内容的提问来源于stack exchange,提问作者Rohan Razdan
相关产品推荐
相关产品推荐

