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

如何在Kubernetes YAML文件中配置PostgreSQL连接串

在Kubernetes中为PostgreSQL集群配置连接串URL

在部署包含3个实例的PostgreSQL集群时,你可以通过Secret(优先选择,因为连接串包含敏感密码)或ConfigMap来管理连接串URL,下面是几种实用的实现方式:

1. 用Secret存储完整连接串

因为你的连接串包含用户名、密码这类敏感信息,用Secret是最安全的做法。

首先创建Secret的YAML文件(注意连接串需要Base64编码):

apiVersion: v1
kind: Secret
metadata:
  name: pg-connection-secret
type: Opaque
data:
  # 执行命令生成编码值:echo -n "postgresql://bigdata:bigdata@dbhost1:5432,dbhost2:5432/bigdata?target_session_attrs=primary" | base64
  PG_CONNECTION_STRING: cG9zdGdyZXNxbDovL2JpZ2RhdGE6YmlnZGF0YUBkYmhostDE6NTQzMixkYmhostjI6NTQzMi9iaWdkYXRhP3RhcmdldF9zZXNzaW9uX2F0dHJzPXByaW1hcnk=

然后在你的应用Deployment(或StatefulSet)中引用这个Secret作为环境变量:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app-container
        image: your-app-image:latest
        env:
        - name: PG_CONN_STR
          valueFrom:
            secretKeyRef:
              name: pg-connection-secret
              key: PG_CONNECTION_STRING
        # 其他容器配置(端口、资源限制等)...

2. 拆分敏感与非敏感信息(更易维护)

如果需要单独管理用户名、密码和集群地址,可以把敏感信息放到Secret,非敏感部分放到ConfigMap,再在容器中拼接成完整连接串。

第一步:创建ConfigMap存储非敏感信息

apiVersion: v1
kind: ConfigMap
metadata:
  name: pg-config
data:
  PG_HOSTS: "dbhost1:5432,dbhost2:5432"
  PG_DB_NAME: "bigdata"
  PG_PARAMS: "target_session_attrs=primary"

第二步:创建Secret存储敏感信息

apiVersion: v1
kind: Secret
metadata:
  name: pg-credentials
type: Opaque
data:
  PG_USER: YmlnZGF0YQ==  # echo -n "bigdata" | base64
  PG_PASSWORD: YmlnZGF0YQ==  # echo -n "bigdata" | base64

第三步:在Deployment中组合环境变量

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app-container
        image: your-app-image:latest
        env:
        # 从ConfigMap加载非敏感配置
        - name: PG_HOSTS
          valueFrom:
            configMapKeyRef:
              name: pg-config
              key: PG_HOSTS
        - name: PG_DB_NAME
          valueFrom:
            configMapKeyRef:
              name: pg-config
              key: PG_DB_NAME
        - name: PG_PARAMS
          valueFrom:
            configMapKeyRef:
              name: pg-config
              key: PG_PARAMS
        # 从Secret加载敏感信息
        - name: PG_USER
          valueFrom:
            secretKeyRef:
              name: pg-credentials
              key: PG_USER
        - name: PG_PASSWORD
          valueFrom:
            secretKeyRef:
              name: pg-credentials
              key: PG_PASSWORD
        # 拼接成完整连接串(多数应用支持这种变量引用方式)
        - name: PG_CONN_STR
          value: "postgresql://$(PG_USER):$(PG_PASSWORD)@$(PG_HOSTS)/$(PG_DB_NAME)?$(PG_PARAMS)"
        # 其他容器配置...

注意事项

  • 如果你用StatefulSet部署PostgreSQL集群,Pod主机名通常是固定格式(比如postgres-0.postgres-service、postgres-1.postgres-service),可以把连接串里的dbhost1、dbhost2替换成对应的Pod域名或集群服务名。
  • Secret的data字段必须用Base64编码,你可以用echo -n "内容" | base64生成编码值;如果不想手动编码,也可以用stringData字段直接写明文,K8s会自动帮你编码。
  • 如果应用不支持环境变量插值($(VAR_NAME)),可以在容器启动脚本中手动拼接连接串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:24