如何在K8s集群中通过Service域名连接Postgres Pod并保留指定端口
配置步骤
1. 配置Postgres对应的K8s Service
你需要先保证Postgres的Service端口配置符合要求,以下是参考配置示例:
apiVersion: v1 kind: Service metadata: name: postgis-db # 自定义Service名称,后续域名会用到这个名称 namespace: default # 替换成你Postgres实际部署的命名空间 spec: type: ClusterIP # 集群内访问用ClusterIP即可,若需要外部同时访问可改为NodePort/LoadBalancer ports: - port: 6006 # 集群内访问的端口,直接保留你要求的6006即可 targetPort: 5432 # 替换成Postgres容器实际监听的端口,默认值为5432 # 如果你需要外部也能通过6006访问,且Service类型为NodePort,可补充以下配置 # nodePort: 6006 # 注意需提前调整kube-apiserver的--service-node-port-range参数包含6006,K8s默认端口范围为30000-32767 selector: app: postgres # 替换成你Postgres Pod对应的标签,确保Service能正确匹配到后端Pod
2. 修改Postgres连接地址
将原来连接地址中的IP替换为K8s Service的内部域名即可,域名通用格式为[Service名称].[命名空间].svc.cluster.local。
示例:如果你上述Service名称为postgis-db,部署在default命名空间,替换后的连接地址为:
postgis://postgres:postgres@postgis-db.default.svc.cluster.local:6006/orderrs
注意事项
- 只有和Postgres Service处于同一K8s集群内的微服务,才能解析到该内部域名
- 若微服务和Postgres部署在同一个命名空间,可简化域名直接使用Service名称,例如
postgis://postgres:postgres@postgis-db:6006/orderrs - 部署后可在微服务所在Pod中执行
nslookup postgis-db.default.svc.cluster.local验证域名是否能正常解析
内容的提问来源于stack exchange,提问作者Denn
相关产品推荐
相关产品推荐

