Google Kubernetes引擎Spring Boot应用程序无法连接到同一网络内的数据库

Google Kubernetes引擎Spring Boot应用程序无法连接到同一网络内的数据库,spring,spring-boot,kubernetes,google-kubernetes-engine,gke-networking,Spring,Spring Boot,Kubernetes,Google Kubernetes Engine,Gke Networking,我在美国中部地区的GKE部署了一个spring boot应用程序。有一个在计算引擎VM实例上运行的postgres数据库。两者都是“默认”专有网络的一部分。我可以通过它的主机名从一个GKE pod中ping这个数据库。但是,当spring boot应用程序启动并尝试使用属性文件中的相同主机名连接到数据库时,我收到连接超时错误,应用程序无法启动: spring.datasource.url=jdbc:postgresql://database01:5432/primary 我们从其他工作正常的VM

我在美国中部地区的GKE部署了一个spring boot应用程序。有一个在计算引擎VM实例上运行的postgres数据库。两者都是“默认”专有网络的一部分。我可以通过它的主机名从一个GKE pod中ping这个数据库。但是,当spring boot应用程序启动并尝试使用属性文件中的相同主机名连接到数据库时,我收到连接超时错误,应用程序无法启动:

spring.datasource.url=jdbc:postgresql://database01:5432/primary


我们从其他工作正常的VM实例到该数据库有类似的连接。Kafka也有类似的设置,应用程序也无法解析代理主机名。我缺少什么?

如果您的数据库作为外部数据库安装在GKE上,那么您需要创建“ExternalName”服务

在这种情况下,您需要知道外部PostgreSQL服务的“externalName”,即外部dns名称

否则,如果将PostgreSQL部署到Kubernetes群集,则需要创建PersistentVolumeClaim、StorageClass、PostgreSQL部署和PostgreSQL ClusterIP服务


请参阅此处的清单示例:

您是否尝试从部署spring boot应用程序的VM实例手动访问MySQL(通过运行MySQL命令)?如果您将PostgreSQL部署到kubernetes集群之外的“计算引擎VM实例”中,这将不起作用。您需要使用外部dns名称公开数据库(请参阅我的答案)。不幸的是,我不知道该如何在GKE上完成。我建议将PostgreSQL部署到Kubernetes集群,或者在GKE中创建PostgreSQL作为外部服务。
apiVersion: v1
kind: Service
metadata:
  name: postgresql
spec:
  type: ExternalName
  externalName: usermgmtdb.csw6ylddqss8.us-east-1.rds.amazonaws.com