如何用kong/ingress Helm Chart部署带数据库的Kong?需哪些配置?
TL;DR
如何通过kong/ingress Helm Chart部署带数据库的Kong(Kong DB-backed)?需要设置哪些配置参数?
详细说明
我想要试用Oauth2插件,根据文档说明,该插件需要数据库支持:
此插件需要数据库才能有效运行,无法在无数据库(DB-less)或混合模式下工作。
查阅Kong Ingress Controller文档的部署部分可知,可通过kong/ingress Helm Chart同时部署无数据库和带数据库的Kong:
Kong推荐使用kong/ingress Helm Chart部署Kong Ingress Controller。该Chart支持无数据库和带数据库两种部署方式。
但我不清楚需要配置哪些参数来部署数据库Pod。
我的尝试
配置文件values.yaml内容如下:
deployment: test: enabled: false controller: proxy: nameOverride: "{{ .Release.Name }}-gateway-proxy" enabled: true deployment: kong: enabled: false ingressController: enabled: true gatewayDiscovery: enabled: false generateAdminApiService: false podAnnotations: kuma.io/gateway: enabled # This port must match your Kong admin API port. 8444 is the default. # If you set gateway.admin.tls.containerPort, change these annotations # to use that value. traffic.kuma.io/exclude-outbound-ports: "8444" traffic.sidecar.istio.io/excludeOutboundPorts: "8444" gateway: enabled: true deployment: kong: enabled: true admin: enabled: true type: ClusterIP clusterIP: None ingressController: enabled: false env: role: traditional database: "postgres"
执行部署命令:
helm install kong kong/ingress -n kong --create-namespace --values .\test-standard-values.yaml
等待Pod运行就绪时,查看Pod状态:
$ kubectl get pods -n kong kong-controller-549fcc4d84-d5l2f 0/1 Running 0 45s kong-gateway-5fd66b7498-jh4q6 0/1 Init:1/2 0 45s kong-gateway-init-migrations-259c6 0/1 CrashLoopBackOff 2 (21s ago) 45s
未发现PostgreSQL数据库Pod,且kong-gateway-init Pod持续崩溃重启,日志信息如下:
Error: [PostgreSQL error] failed to retrieve PostgreSQL server_version_num: connection refused
求助
能否提供启用数据库支持所需的values.yaml配置参数示例?或指出我操作中的错误?
你的配置缺少了启用内置PostgreSQL的关键参数,kong/ingress Helm Chart默认不会自动部署数据库,需要显式开启相关配置。以下是修正后的values.yaml核心配置:
# 启用内置PostgreSQL数据库 postgresql: enabled: true auth: database: kong username: kong password: kongpass # 可自定义密码 postgresPassword: postgrespass # PostgreSQL超级用户密码 deployment: test: enabled: false controller: proxy: nameOverride: "{{ .Release.Name }}-gateway-proxy" enabled: true deployment: kong: enabled: false ingressController: enabled: true gatewayDiscovery: enabled: false generateAdminApiService: false podAnnotations: kuma.io/gateway: enabled traffic.kuma.io/exclude-outbound-ports: "8444" traffic.sidecar.istio.io/excludeOutboundPorts: "8444" gateway: enabled: true deployment: kong: enabled: true admin: enabled: true type: ClusterIP clusterIP: None ingressController: enabled: false env: role: traditional database: "postgres" # 自动注入内置PostgreSQL的连接信息,无需手动指定 # 如果使用外部数据库,需手动设置database_host、database_user等参数
关键修正点:
- 添加
postgresql.enabled: true:开启Chart内置的PostgreSQL实例部署,这是你之前缺失的核心配置,所以没有出现数据库Pod。 - 配置PostgreSQL的认证信息:
auth下的参数用于设置Kong使用的数据库、用户名和密码,以及PostgreSQL超级用户密码。 - Kong的
env.database已设置为postgres,这部分是正确的,开启内置PostgreSQL后,Chart会自动将连接信息注入到Kong的环境变量中,无需手动填写database_host等参数。
部署验证:
重新部署后,你会看到新增的PostgreSQL Pod,初始化迁移Pod也能正常完成:
kubectl get pods -n kong # 预期输出包含:kong-postgres-xxxx-xxxx(Running状态)
如果需要使用外部PostgreSQL而非内置实例,只需将postgresql.enabled设为false,并在gateway.env中添加以下参数:
gateway: env: database_host: "your-external-postgres-host" database_port: 5432 database_user: "kong-user" database_password: "kong-password" database_name: "kong"
内容的提问来源于stack exchange,提问作者mikyll98

