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

如何让Kubernetes Pod访问WLS2本地PostgreSQL(14)数据库?

解决Docker Desktop Kubernetes Pod访问WLS2 PostgreSQL的问题

核心问题根源

Pod内的127.0.0.1指向Pod自身,而非WLS2宿主;WLS2的回环地址无法被K8s集群网络直接访问,且PostgreSQL默认仅允许本地回环连接。

分步解决方案

  1. 获取WLS2宿主的实际内网IP
    在WLS2终端执行以下命令,拿到WLS2的内网IP(通常是192.168.x.x或172.x.x.x):

    hostname -I
    # 或者
    ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1
    
  2. 修改PostgreSQL配置,允许外部访问

    • 编辑pg_hba.conf(通常路径为/var/lib/postgresql/14/main/pg_hba.conf),添加K8s Pod网段的访问规则:
      # 替换为你的K8s Pod网段(Docker Desktop K8s默认多为10.1.0.0/16)
      host all all 10.1.0.0/16 md5
      
    • 编辑postgresql.conf,修改监听地址为所有IP:
      listen_addresses = '*'
      
    • 重启PostgreSQL服务:
      sudo systemctl restart postgresql@14-main
      
  3. 配置Windows主机防火墙,放行5432端口
    WLS2的网络依赖Windows主机转发,需在Windows防火墙中添加入站规则,允许TCP 5432端口的连接。

  4. 在K8s中创建ExternalIP服务(推荐)
    创建指向WLS2 IP的Service,让Pod通过服务名访问数据库:

    apiVersion: v1
    kind: Service
    metadata:
      name: postgres-wls
    spec:
      ports:
        - port: 5432
          targetPort: 5432
      externalIPs:
        - <你的WLS2内网IP>
    

    之后Pod可通过postgres-wls:5432连接数据库。

  5. 测试连通性
    在任意K8s Pod中执行以下命令,验证网络和数据库是否可达:

    # 测试网络连通
    ping <WLS2内网IP>
    # 测试端口开放
    telnet <WLS2内网IP> 5432
    # 测试数据库连接
    psql -h <WLS2内网IP> -U <用户名> -d <数据库名>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:42:41