You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法连接Kubernetes Pod中的PostgreSQL数据库求助

PostgreSQL Helm部署密码认证失败排查

我通过Helm创建最小化PostgreSQL部署,设置管理员用户为postgres、普通用户为user,采用硬编码密码。Pod已正常创建,但无法访问数据库。

相关代码

Terraform代码

resource "helm_release" "postgres" {
  name       = "pg-${var.namespace}"
  namespace  = var.namespace
  chart      = "postgresql"
  repository = "https://charts.bitnami.com/bitnami"
  version    = "13.4.4"
  values = [templatefile("manifests/postgres-values.yaml", {
    fullnameOverride        = "pg-${var.namespace}"
    pg_spot                 = var.pg_spot
    pg_affinity             = var.pg_affinity
    pg_nodeSelector         = var.pg_nodeSelector
    pg_tolerations          = var.pg_tolerations
    db_pass                 = "postgres"
  })]

  set_sensitive {
    name  = "db_pass"
    value = "postgres"
  }
}

PostgreSQL Values配置(manifests/postgres-values.yaml)

fullnameOverride: ${fullnameOverride}
global:
  storageClass: managed-csi
  postgresql:
    auth:
      postgresPassword: "postgresadmin"
      username: "user"
      password: "postgres"
    service:
      ports:
        postgresql: 5432

primary:
  resources:
    limits:
      cpu: 100m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 256Mi
  persistence:
    enabled: true
    size: 1Gi
    labels:
      purpose: pg
  persistentVolumeClaimRetentionPolicy:
    enabled: true
    whenDeleted: Retain
  ${indent(2, pg_nodeSelector)}
  ${indent(2, pg_tolerations)}

architecture: standalone

问题现象

Helm Chart部署成功,Pod运行正常,但执行命令:

psql -h localhost -p 5432 -U postgres

输入密码postgresadmin时,报错:

psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "postgres"

解决思路

1. 修正Values配置层级(核心问题)

Bitnami PostgreSQL Chart的auth配置是根层级参数,你当前把它嵌套在global.postgresql下,Chart无法识别该配置,导致postgres用户使用的是默认随机密码,而非你设置的postgresadmin。

修改后的postgres-values.yaml应将auth提到根层级:

fullnameOverride: ${fullnameOverride}
global:
  storageClass: managed-csi
  postgresql:
    service:
      ports:
        postgresql: 5432

# 把auth移到根层级
auth:
  postgresPassword: "postgresadmin"
  username: "user"
  password: "postgres"

primary:
  resources:
    limits:
      cpu: 100m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 256Mi
  persistence:
    enabled: true
    size: 1Gi
    labels:
      purpose: pg
  persistentVolumeClaimRetentionPolicy:
    enabled: true
    whenDeleted: Retain
  ${indent(2, pg_nodeSelector)}
  ${indent(2, pg_tolerations)}

architecture: standalone

2. 清理旧数据并重新部署

由于启用了PersistentVolume,之前的数据库初始化数据已留存,修改配置后不会自动重置用户密码。需要:

  • 删除对应的PVC:
    kubectl delete pvc <postgres-pvc-name>
    
  • 重新执行Terraform部署:
    terraform apply
    

3. 验证连接前置条件

使用localhost连接前,需确保已完成端口转发:

kubectl port-forward svc/pg-${var.namespace} 5432:5432 -n ${var.namespace}

4. 检查Pod内用户状态(可选)

若问题仍存在,可进入Pod直接验证用户信息:

  • 进入Pod:
    kubectl exec -it <postgres-pod-name> -n ${var.namespace} -- bash
    
  • 本地登录PostgreSQL(Pod内采用peer认证无需密码):
    psql -U postgres
    
  • 查询用户列表:
    SELECT usename FROM pg_user;
    

内容的提问来源于stack exchange,提问作者Marwen Taallah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:03:12