#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
, а затем для записи TXTcluster0.p9jq2.mongodb.net
. Я не знаю, можно ли перенаправить их с помощью CNAME.3. @Джо, тогда как я должен это передать?
4. Возможно, будет проще использовать строку
mongodb://
подключения такого типа, чтобы имена хостов разрешались какA
записи. Я не знаю, как заставить k8s разрешить SRV
Ответ №1:
javax.naming.NameNotFoundException: DNS name not found
Это на самом деле правильно, так как запись TXT разрешима, но недоступна. Он предназначен для того, чтобы драйвер выполнял обнаружение хоста. Этот способ позволяет изменять серверную часть без необходимости изменения строки подключения.
Как правило, строку подключения можно сохранить в конфигурационной карте и подключить к вашему модулю в виде файла конфигурации. В этом случае вам не нужна внешняя служба для выполнения поиска CNAME.