【问题标题】:Spring Boot UnknownHostException while connecting to RDS throgh VPC peering通过 VPC 对等连接到 RDS 时出现 Spring Boot UnknownHostException
【发布时间】:2020-02-27 22:16:26
【问题描述】:

我在尝试将 Spring Boot 应用程序部署到 AWS EKS 中的 K8s 集群 时遇到 UnknownHostException >.

场景:

  • 我有一个在 VPC (A) 上运行的 AWS EKS 集群,而 RDS 在 VPC (B) 上运行。
  • 我已经在两个 VPC 之间创建了 VPC 对等连接,启用了 DNS 解析并相应地配置了路由表。
  • 我还创建了一个映射外部 RDS 端点的 K8s 服务。

如果我尝试使用这样的忙盒从 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

有什么建议吗?

谢谢!

【问题讨论】:

  • 我正在尝试同样的方法,但我遇到了同样的错误,我在 yaml 中添加了 RDS 作为外部服务。虽然当我从不同的 nginx pod 执行相同操作时,基于busybox 的验证对我不起作用

标签: java spring-boot amazon-vpc amazon-eks


【解决方案1】:

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

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

我刚刚更改了弹簧配置:

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

到:

spring:
    datasource:
        url: jdbc:mysql://mysql-service:3306/db_name

现在它可以工作了!

【讨论】:

  • 这对我来说似乎很奇怪,就像你的问题一样,有错误原因:java.net.UnknownHostException:mysql-service 隐含的环境变量得到了解决。
  • @sayboras,这正是我的想法。我刚刚做了另一个测试,错误仍然存​​在。 env var 已解决,但会引发异常。如果我对其进行硬编码,错误就会消失。确实很奇怪。
  • 您使用的是哪个 EKS 版本?
猜你喜欢
  • 2023-01-18
  • 2021-05-04
  • 2021-04-19
  • 2021-03-01
  • 1970-01-01
  • 2021-07-25
  • 2014-05-09
  • 2018-10-25
  • 2021-08-16
相关资源
最近更新 更多