Не удалось подключиться к mongo atlas с помощью сервиса Kubernetes

#mongodb #spring-boot #kubernetes #mongodb-atlas

Вопрос:

Я мог бы подключиться к mongodb atlas с помощью uri: mongodb srv://username:password@cluster0.q2w3e.mongodb.net/myFirstDatabase?retryWrites=trueamp;w=majority

Теперь я хочу подключиться через службу extername.

Вот мое определение сервиса:

 apiVersion: v1 kind: Service metadata:  name: mongo-atlas spec:  ports:  - port: 80  protocol: TCP  targetPort: 80  type: ExternalName  externalName: "cluster0.p9jq2.mongodb.net"  
 And I changed spring.data.mongodb.uri to mongodb srv://username:password@mongo-atlas/myFirstDatabase?retryWrites=trueamp;w=majority  

Но вызвано: javax.именование.Исключение NameNotFoundException: DNS-имя не найдено

Может кто-нибудь помочь мне с этим, пожалуйста?

Комментарии:

1. Является cluster0.p9jq2.mongodb.net ли допустимым CNAME, для чего выводится nslookup cluster0.p9jq2.mongodb.net результат ?

2. mongodb srv будет выполняться поиск DNS для записи SRV _mongodb._tcp.cluster0.p9jq2.mongodb.net , а затем для записи TXT cluster0.p9jq2.mongodb.net . Я не знаю, можно ли перенаправить их с помощью CNAME.

3. @Джо, тогда как я должен это передать?

4. Возможно, будет проще использовать строку mongodb:// подключения такого типа, чтобы имена хостов разрешались как A записи. Я не знаю, как заставить k8s разрешить SRV

Ответ №1:

javax.naming.NameNotFoundException: DNS name not found

Это на самом деле правильно, так как запись TXT разрешима, но недоступна. Он предназначен для того, чтобы драйвер выполнял обнаружение хоста. Этот способ позволяет изменять серверную часть без необходимости изменения строки подключения.

Как правило, строку подключения можно сохранить в конфигурационной карте и подключить к вашему модулю в виде файла конфигурации. В этом случае вам не нужна внешняя служба для выполнения поиска CNAME.