Как подключиться к конечной точке k8s mongodb из весенней загрузки - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть приложение весенней загрузки, которое развернуто в Kubernetes, и мне нужно подключиться к серверу mongodb, расположенному вне кластера. Согласно Kubernetes, указанному в https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-mapping-external-services, я создал службу Kubernetes и конечную точку для моего сервера mongodb. Теперь мое весеннее загрузочное приложение должно подключиться к этой конечной точке. Я попытался выполнить следующие действия:

- добавление uri в application.properties

spring.data.mongodb.uri=mongodb://mongo

- явное определение клиента mongodb из весны

@Configuration
@Slf4j
public class AppConfig {

@Autowired
DiscoveryClient discoveryClient;

  public @Bean MongoClient mongoClient() {
      MongoClientURI mongoClientURI = new MongoClientURI("mongodb://mongo");
      return new MongoClient(mongoClientURI);
  }
}

Но мое приложение продолжает выдавать ошибку

com.mongodb.MongoSocketException: mongo: Try again
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:211) ~[mongo-java-driver-3.11.2.jar:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:75) ~[mongo-java-driver-3.11.2.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongo-java-driver-3.11.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongo-java-driver-3.11.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.11.2.jar:na]
at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
Caused by: java.net.UnknownHostException: mongo: Try again
at java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929) ~[na:na]
at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1515) ~[na:na]
at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848) ~[na:na]
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505) ~[na:na]
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364) ~[na:na]
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298) ~[na:na]
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:203) ~[mongo-java-driver-3.11.2.jar:na]
... 5 common frames omitted

В моем проекте есть следующие зависимости

  <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
    </dependency>

1 Ответ

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

После небольшого поиска я смог подключиться следующим образом:

public @Bean MongoClient mongoClient() {
    List<ServiceInstance> mongo = discoveryClient.getInstances("mongo");
    List<ServerAddress> mongoAddressList = new ArrayList<>();
    for (ServiceInstance serviceInstance : mongo) {
        ServerAddress serverAddress = new ServerAddress(serviceInstance.getHost());
        mongoAddressList.add(serverAddress);
    }
    MongoClientURI mongoClientURI = new MongoClientURI("mongodb://mongo");
    return new MongoClient(mongoAddressList);
}

Это работает, но я не знаю, является ли это лучшим способом сделать это.

...