[英]Spring Boot UnknownHostException while connecting to RDS throgh VPC peering
我在嘗試將Spring Boot應用程序部署到AWS EKS 中的K8s 集群時遇到UnknownHostException 。
設想:
如果我嘗試使用像這樣的 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.