此前,网络架构上使用入口 Nginx + Kong,相关配置简单,可快速上手。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server { listen 443 ssl; ssl_certificate ……; ssl_certificate_key ……; server_name *.fangcha.net;
location / { proxy_read_timeout 300; proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port 443; proxy_set_header Host $host; } }
|
但伴随业务服务规模上升,存在以下不便
- 网关宿主机需要额外安装 Nginx
- Nginx 配置及证书文件需要存放在宿主机中,迁移不便
- 需配置的证书、网关机器较多时,Nginx 配置维护复杂度上升
在新增、调整网关机器时,额外的琐碎工作较多。
入口 Nginx 工作:
- 将 HTTP 流量强制重定向为 HTTPS
- 维护各域名 SSL 证书及 Nginx 配置
- 流量转发到 Kong
直接由 Kong 去接管入口 Nginx 的工作,是一个可行的方案
- 《Kong Route - 强制使用 HTTPS》,可以对 Kong Route 进行设置使其支持强制 HTTPS
- 《Kong Admin API - Certificates》,可以直接在 Kong 中配置 SSL 证书
- 将 80 端口映射到容器 8000 端口,443 端口映射到容器 8443 端口启动 Kong
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| docker run -d --restart=unless-stopped \ --name kong \ -p 80:8000 \ -p 443:8443 \ -p 8001:8001 \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=${KONG_PG_HOST}" \ -e "KONG_PG_DATABASE=kong" \ -e "KONG_PG_USER=${KONG_PG_USER}" \ -e "KONG_PG_PASSWORD=${KONG_PG_PASSWORD}" \ -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" \ kong/kong-gateway:3.0.0.0-alpine
|