Postgresql Can';t通过Spring Boot将Docker Desktop Kubernetes(Windows)服务连接到本地Postgres db
我无法将Kubernetes通过Docker Desktop(Windows)管理的固定化Spring引导API连接到Postgres的本地实例。错误如下: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可以相互通信,等等) 我想我的
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 exposing5432
:
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用于解析,它不知道该域
我建议你这样做:
- 不要使用
,因为docker已经将其用于自己的目的。使用类似于mypostgres.local的kubernetes.docker.internal
- 获取docker虚拟机的IP地址。运行ping docker.local
或在'C:\Windows\System32\drivers\etc\hosts下查找类似的内容:
或者查看Added by Docker Desktop 10.xx.xx.xx host.docker.internal
的输出,从docker desktop VM中查找IPipconfig/all
- 在podSpec中使用,以便在pod中实际修改
文件 apiVersion:apps/v1 种类:部署 元数据: 姓名:测试人员 规格: 选择器: 火柴标签: 应用程序:测试仪 模板: 元数据: 标签: 应用程序:测试仪 规格: 主机别名: -ip:“10.xx.xx.xx”#您的虚拟机的ip 主机名: -“mypostgres.local” 容器: -姓名:测试人员 imagePullPolicy:如果不存在 图:测试spring启动 资源: 限制: 内存:“128Mi” cpu:“500米”/etc/hosts
- 不要使用
服务,因为这些服务只适用于CoreDNS。如果您想让ExternalName
服务工作,您必须修改配置,使其对ExternalName
mypostgres.local
注意:另一个选择是只在Kubernetes中运行Postgresql,并使用常规服务公开它。不确定这些其他操作的连接情况,但我还必须在pg_hba.conf中添加“host all 0.0.0/0 md5”,并将部署中的内存增加到300Mi。