Postgresql Can';t通过Spring Boot将Docker Desktop Kubernetes(Windows)服务连接到本地Postgres db

Postgresql Can';t通过Spring Boot将Docker Desktop Kubernetes(Windows)服务连接到本地Postgres db,postgresql,spring-boot,docker,kubernetes,Postgresql,Spring Boot,Docker,Kubernetes,我无法将Kubernetes通过Docker Desktop(Windows)管理的固定化Spring引导API连接到Postgres的本地实例。错误如下: org.postgresql.util.psqleexception:到postgres db svc.default.svc.cluster.local的连接被拒绝。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接。 在尝试连接到本地数据库之前,一切正常(外部客户端可以通过入口连接到POD,POD可以相互通信,等等) 我想我的

我无法将Kubernetes通过Docker Desktop(Windows)管理的固定化Spring引导API连接到Postgres的本地实例。错误如下:

org.postgresql.util.psqleexception:到postgres db svc.default.svc.cluster.local的连接被拒绝。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接。
在尝试连接到本地数据库之前,一切正常(外部客户端可以通过入口连接到POD,POD可以相互通信,等等)

我想我的配置不在这里

ConfigMap

apiVersion:v1 种类:配置地图 元数据: creationTimestamp:2017-12-27T18:38:34Z 名称:测试docker配置 名称空间:默认值 资源版本:“810136” uid:352c4572-eb35-11e7-887b-42010a8002b8 数据: spring_数据源_平台:postgres spring_数据源_url:jdbc:postgresql://postgres-db-svc.default.svc.cluster.local/sandbox spring\u数据源\u用户名:postgres spring\u数据源\u密码:password spring\u jpa\u properties\u hibernate\u方言:org.hibernate.dialogue.PostgreSqlDialogue 服务

种类:服务
版本:v1
元数据:
名称:postgres db svc
规格:
类型:ExternalName
外部名称:kubernetes.docker.internal
端口:
-港口:5432
在我的主机文件中,“kubernetes.docker.internal”映射到127.0.0.1

部署

apiVersion:apps/v1 种类:部署 元数据: 姓名:测试人员 规格: 选择器: 火柴标签: 应用程序:测试仪 模板: 元数据: 标签: 应用程序:测试仪 规格: 容器: -姓名:测试人员 imagePullPolicy:如果不存在 图:测试spring启动 资源: 限制: 内存:“128Mi” cpu:“500米” 端口: -集装箱港口:8080 环境: -名称:SPRING_数据源_平台 价值来源: configMapKeyRef: 名称:测试docker配置 关键词:spring_数据源_平台 -名称:SPRING\u数据源\u URL 价值来源: configMapKeyRef: 名称:测试docker配置 关键字:spring\u数据源\u url -名称:SPRING\u数据源\u用户名 价值来源: configMapKeyRef: 名称:测试docker配置 关键字:spring\u数据源\u用户名 -名称:SPRING\u数据源\u密码 价值来源: configMapKeyRef: 名称:测试docker配置 密钥:spring\u数据源\u密码 -名称:SPRING\u JPA\u PROPERTIES\u HIBERNATE\u方言 价值来源: configMapKeyRef: 名称:测试docker配置 关键词:spring\u jpa\u properties\u hibernate\u方言 Spring启动应用程序。属性

spring.datasource.platform=${spring\u datasource\u platform:postgres}
spring.datasource.url=${spring\u datasource\u url:jdbc:postgresql://localhost:5432/sandbox}
spring.datasource.username=${spring\u datasource\u username:postgres}
spring.datasource.password=${spring\u datasource\u password:password}
spring.jpa.properties.hibernate.dialogue=${spring\u jpa\u properties\u hibernate\u dialogue:org.hibernate.dialogue.postgresqldialdialogue}

Kubernetes with Docker在同一个Docker VM中运行,因此我假设您所引用的
/etc/hosts
文件就是Windows计算机上的文件

我还假设您使用如下内容运行Postgres exposing
5432

Added by Docker Desktop
10.xx.xx.xx host.docker.internal
docker run——命名一些postgres-e postgres\u PASSWORD=mysecretpassword-d-p 5432:5432 postgres
首先,
127.0.0.1
不起作用,因为docker只是在虚拟机运行时公开IP地址上的端口

其次,Kubernetes将无法找到
Kubernetes.docker.internal
,因为POD用于解析,它不知道该域

我建议你这样做:

  • 不要使用
    kubernetes.docker.internal
    ,因为docker已经将其用于自己的目的。使用类似于mypostgres.local的

  • 获取docker虚拟机的IP地址。运行ping docker.local
    或在'C:\Windows\System32\drivers\etc\hosts下查找类似的内容:

    Added by Docker Desktop
    10.xx.xx.xx host.docker.internal
    
    或者查看
    ipconfig/all
    的输出,从docker desktop VM中查找IP

  • 在podSpec中使用,以便在pod中实际修改
    /etc/hosts
    文件

    apiVersion:apps/v1 种类:部署 元数据: 姓名:测试人员 规格: 选择器: 火柴标签: 应用程序:测试仪 模板: 元数据: 标签: 应用程序:测试仪 规格: 主机别名: -ip:“10.xx.xx.xx”#您的虚拟机的ip 主机名: -“mypostgres.local” 容器: -姓名:测试人员 imagePullPolicy:如果不存在 图:测试spring启动 资源: 限制: 内存:“128Mi” cpu:“500米”
  • 不要使用
    ExternalName
    服务,因为这些服务只适用于CoreDNS。如果您想让
    ExternalName
    服务工作,您必须修改配置,使其对
    mypostgres.local


注意:另一个选择是只在Kubernetes中运行Postgresql,并使用常规服务公开它。

不确定这些其他操作的连接情况,但我还必须在pg_hba.conf中添加“host all 0.0.0/0 md5”,并将部署中的内存增加到300Mi。