启用rds.force_ssl后Airbyte-temporal Pod无法连接RDS PostgreSQL
解决Airbyte Temporal Pod无法连接强制SSL的Amazon RDS PostgreSQL问题
问题根源
报错提示“无加密连接的pg_hba.conf条目”,本质是Temporal容器尝试以非SSL方式连接已强制SSL的RDS实例,被RDS的访问控制规则拒绝。即便配置了POSTGRES_TLS相关环境变量,Airbyte Helm Chart默认的Temporal配置可能未正确传递SSL参数到JDBC连接或容器启动参数。
具体解决步骤
1. 修正Temporal的数据库SSL配置
在Airbyte的Helm values.yaml中,针对Temporal的持久化配置,明确添加SSL相关JDBC参数:
temporal: server: config: persistence: sql: pluginName: "postgres" databaseName: "your-db-name" connectAddr: "your-rds-endpoint:5432" user: "your-db-user" password: "your-db-password" # 新增SSL配置 sqlPluginOptions: ssl: "true" sslmode: "verify-full" sslrootcert: "/etc/ssl/certs/rds-ca-2019-root.pem"
sslmode设为verify-full时会验证RDS证书的有效性,生产环境推荐使用;若仅需加密连接可改为require。
2. 挂载RDS CA证书到Temporal Pod
先创建包含RDS根CA证书的ConfigMap:
# 下载对应RDS CA证书后执行 kubectl create configmap rds-ca-cert --from-file=rds-ca-2019-root.pem=./rds-ca-2019-root.pem
再在Helm values.yaml中配置Temporal容器挂载该ConfigMap:
temporal: server: extraVolumes: - name: rds-ca configMap: name: rds-ca-cert extraVolumeMounts: - name: rds-ca mountPath: "/etc/ssl/certs" readOnly: true
3. 强制Temporal容器使用SSL连接
通过环境变量明确指定SSL配置,避免默认配置覆盖:
temporal: server: extraEnv: - name: POSTGRES_SSL value: "true" - name: POSTGRES_SSL_MODE value: "verify-full" - name: POSTGRES_SSL_ROOT_CERT value: "/etc/ssl/certs/rds-ca-2019-root.pem"
4. 验证连接有效性(调试用)
进入Temporal Pod,用psql测试SSL连接是否正常:
kubectl exec -it <airbyte-temporal-pod-name> -- bash # 安装psql apt-get update && apt-get install -y postgresql-client # 测试连接 psql "host=your-rds-endpoint port=5432 dbname=your-db-name user=your-db-user password=your-db-password sslmode=verify-full sslrootcert=/etc/ssl/certs/rds-ca-2019-root.pem"
若连接成功,说明证书和网络无问题,可重新部署Airbyte;若失败,检查RDS实例的force_ssl参数是否设为1,以及安全组是否允许EKS集群IP段访问5432端口。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

