K8s集群生产环境Kong路由配置集成实操
技术栈:Kong Gateway v3.5.x + Kubernetes v1.32.13 + Rocky Linux 8.6 + PostgreSQL 15 + Kong Ingress Controller 2.12
操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案
K8s集群生产环境Kong路由配置集成实操
操作环境
Kong Gateway v3.5.x,已部署在 kong 命名空间
K8s 集群 v1.32.13,Rocky Linux 8.6
PostgreSQL 15 作为配置存储(或DBless模式)
Kong Ingress Controller (KIC) v2.12.x 已安装
Konga Dashboard 已部署用于Web管理
后端微服务部署在 default 命名空间
kubectl v1.32.13,Kong Admin API 已配置
对接原理
Kong Gateway 是开源 API 网关,基于 OpenResty(Nginx + LuaJIT),支持插件扩展、负载均衡、限流、认证。两种部署模式:DB模式(PostgreSQL/Cassandra存储配置,支持多节点)和 DBless 模式(配置通过声明式YAML加载,适合K8s)。核心概念:Service(后端服务抽象)、Route(路由规则,关联Service)、Consumer(消费者)、Plugin(插件,全局/服务/路由/消费者级别)、Upstream(上游负载均衡)、Target(上游节点)。Kong Ingress Controller 监听 K8s Ingress/HTTPRoute/KongPlugin/KongConsumer 等 CRD,自动配置 Kong 路由和插件。流量处理:客户端 -> Kong -> 路由匹配 -> 插件链 -> Service -> Upstream负载均衡 -> 后端Pod。Kong 企业版提供更多高级插件(Vitals、Dev Portal、RBAC),开源版已覆盖常用网关功能。高可用:Kong 多副本无状态,PostgreSQL 主从或外部托管,K8s Service 前置负载均衡。
详细步骤
1. 配置Service与Route
# Admin API创建Service curl -i -X POST http://localhost:8001/services/ \ --data name=myapp-service \ --data url='http://myapp.default.svc.cluster.local:8080' # 创建Route curl -i -X POST http://localhost:8001/services/myapp-service/routes \ --data 'paths[]=/api' \ --data 'methods[]=GET' \ --data 'methods[]=POST' \ --data 'hosts[]=api.example.com' # 查看 curl http://localhost:8001/services curl http://localhost:8001/routes # 通过Ingress(KIC) cat > kong-ingress.yaml << 'EOF' apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-ingress namespace: default annotations: konghq.com/strip-path: "true" spec: ingressClassName: kong rules: - host: api.example.com http: paths: - path: /api pathType: Prefix backend: service: name: myapp port: number: 8080 EOF kubectl apply -f kong-ingress.yaml # HTTPRoute(Gateway API) cat > kong-httproute.yaml << 'EOF' apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: myapp-route spec: parentRefs: - name: kong hostnames: - api.example.com rules: - matches: - path: type: PathPrefix value: /api backendRefs: - name: myapp port: 8080 EOF # 测试 curl -v -H "Host: api.example.com" http://kong-proxy/api/test
验证流程
# 1. 验证Kong运行 kubectl get pods -n kong # 2. 验证路由 curl -v -H "Host: api.example.com" http://kong-proxy/api/test # 3. 验证插件 # 限流:超过限制返回429 # 认证:无key返回401,有key返回200 # 4. 验证负载均衡 for i in {1..20}; do curl -s http://kong-proxy/api/version; done | sort | uniq -c # 5. 验证健康检查 curl http://localhost:8001/upstreams/<name>/health # 6. 验证灰度 curl -H "x-canary: true" http://kong-proxy/api/version # 7. 查看监控 curl http://localhost:8001/metrics | grep kong排错方案
路由404:检查Route的paths/methods/hosts是否匹配请求,Service是否关联Route,strip-path配置,KIC是否同步配置,Kong日志查看路由匹配
上游502:检查Service host是否正确,Upstream target是否健康,后端Pod是否Running,端口是否正确,网络策略,DNS解析
插件不生效:检查插件是否绑定到正确的Service/Route/Consumer,插件配置参数,插件是否启用,插件优先级,Kong错误日志
认证失败:检查Consumer是否创建,凭证是否正确,请求header名称,JWT算法/密钥/过期时间,插件配置key_names
DBless配置不更新:检查ConfigMap是否更新,Kong是否reload,declarative_config路径,KIC是否推送配置,Kong启动日志
KIC不同步:检查Ingress Class是否为kong,CRD是否安装,KIC日志,RBAC权限,Kong Admin API连通性,annotations格式
性能问题:增加Kong副本,调整nginx worker_processes/worker_connections,启用缓存,上游keepalive,分析access_log耗时,升级实例规格
HTTPS错误:检查证书Secret,Kong TLS配置,SNI匹配,证书链完整,私钥匹配,强