Spring Boot UnknownHostException при подключении к RDS через VP C пиринг - PullRequest
0 голосов
/ 28 февраля 2020

Я получаю UnknownHostException при попытке развернуть приложение Spring Boot в K8s Cluster в AWS EKS .

Сценарий:

  • У меня есть AWS EKS Cluster, работающий на VP C (A), и RDS работает на VP C (B).
  • Я создал пиринг-соединение VP C между двумя VPC, разрешив разрешение DNS и настроив таблицы маршрутизации соответствующим образом.
  • Я также создал службу K8s, отображающую внешнюю конечную точку RDS.

Если я попытаюсь подключиться к экземпляру RDS из EKS Cluster с помощью поля busybox, например:

$ 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

Есть предложения?

Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2020

Я понял это! Вся конфигурация пиринга VP C работает. Внешний сервис K8s также работает. Проблема была в моем приложении Spring Boot.

Я настроил URL источника данных с переменной среды, которая вызывала ошибку. По некоторым причинам Spring не разрешает хост, настроенный с помощью переменной среды.

Я только что изменил конфигурацию Spring с:

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

на:

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

и теперь это работает!

...