如何让Kubernetes Pod访问WLS2本地PostgreSQL(14)数据库?
解决Docker Desktop Kubernetes Pod访问WLS2 PostgreSQL的问题
核心问题根源
Pod内的127.0.0.1指向Pod自身,而非WLS2宿主;WLS2的回环地址无法被K8s集群网络直接访问,且PostgreSQL默认仅允许本地回环连接。
分步解决方案
获取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修改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
- 编辑
配置Windows主机防火墙,放行5432端口
WLS2的网络依赖Windows主机转发,需在Windows防火墙中添加入站规则,允许TCP 5432端口的连接。在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连接数据库。测试连通性
在任意K8s Pod中执行以下命令,验证网络和数据库是否可达:# 测试网络连通 ping <WLS2内网IP> # 测试端口开放 telnet <WLS2内网IP> 5432 # 测试数据库连接 psql -h <WLS2内网IP> -U <用户名> -d <数据库名>
内容的提问来源于stack exchange,提问作者simouser
相关产品推荐
相关产品推荐

