Java Spring Boot Unknown通过VPC对等连接到RDS时出现异常

Java Spring Boot Unknown通过VPC对等连接到RDS时出现异常,java,spring-boot,amazon-vpc,amazon-eks,Java,Spring Boot,Amazon Vpc,Amazon Eks,我在尝试将Spring Boot应用程序部署到AWS EKS中的K8s集群时遇到了未知后异常 情景: 我有一个AWS EKS群集在VPC(a)上运行,RDS在VPC(B)上运行 我已经在两个VPC之间创建了VPC对等连接,启用DNS解析并相应地配置路由表 我还创建了一个映射外部RDS端点的K8s服务 如果我尝试使用如下busybox从EKS群集连接到RDS实例: $ kubectl run -i --tty --rm debug --image=busybox --restart=Never

我在尝试将Spring Boot应用程序部署到AWS EKS中的K8s集群时遇到了未知后异常

情景:

  • 我有一个AWS EKS群集在VPC(a)上运行,RDS在VPC(B)上运行
  • 我已经在两个VPC之间创建了VPC对等连接,启用DNS解析并相应地配置路由表
  • 我还创建了一个映射外部RDS端点的K8s服务
如果我尝试使用如下busybox从EKS群集连接到RDS实例:

$ kubectl run -i --tty --rm debug --image=busybox --restart=Never -- sh
通过以下任一选项,它可以工作

/ # nc mysql-service 3306

/ # nc mysql-service.default.svc.cluster.local 3306

/ # nc xxxxxxx.xxxxxxx.us-east-1.rds.amazonaws.com 3306
但是,当我部署Spring Boot应用程序时,它不起作用

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:93)
at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:133)
at com.mysql.cj.core.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:149)
at com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:83)
at com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:144)
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:1676)
... 58 common frames omitted
Caused by: java.net.UnknownHostException: mysql-service
有什么建议吗


谢谢

我想出来了!整个VPC对等配置正在运行。K8s外部服务也在工作。问题出在我的Spring Boot应用程序中

我已使用导致错误的环境变量配置了数据源URL。出于某种原因,Spring无法解析配置了环境变量的主机

我刚从以下位置更改了spring配置:

spring:
    datasource:
        url: jdbc:mysql://${DB_HOST}:3306/db_name
致:


现在它工作了

我觉得很奇怪,就像你的问题一样,有一个错误是由:java.net.UnknownHostException:mysql服务隐含的env变量引起的。@sayboras,这正是我所想的。我刚刚做了另一个测试,错误依然存在。已解析env var,但它引发异常。如果我硬编码,错误就会消失。确实很奇怪。你使用的是哪个EKS版本?我正在尝试相同的版本,我面临相同的错误,我在yaml中添加了RDS作为外部服务。虽然基于busybox的验证在我从不同的nginx pod进行验证时并不适用于我,但它是有效的
spring:
    datasource:
        url: jdbc:mysql://mysql-service:3306/db_name