簡體   English   中英

連接到 RDS 通過 VPC 對等時 Spring Boot UnknownHostException

[英]Spring Boot UnknownHostException while connecting to RDS throgh VPC peering

我在嘗試將Spring Boot應用程序部署到AWS EKS 中K8s 集群時遇到UnknownHostException

設想:

  • 我有一個在 VPC (A) 上運行的 AWS EKS 集群,而 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:
    datasource:
        url: jdbc:mysql://${DB_HOST}:3306/db_name

到:

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

現在它起作用了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM