У меня есть несколько страницы, которые я нашел с похожим вопросом, и большинство ответов говорят нам о том, что наш IP-адрес должен быть в белом списке. Однако я разрешил доступ из любого места 0.0.0.0/0
в атласе и установил последнюю версию mongoose
(6.2.6; предполагается, что она поддерживает протокол (mongodb+srv).
Соединение работает отлично, когда я запускаю локально с помощью npm start
или даже из докеризованного контейнера. Но когда я развертываю кластер k8s, я получаю сообщение об ошибке:
querySrv ENOTFOUND _mongodb._tcp.mongodb-cluster0.zvnxj.mongodb.net
Файл развертывания и службы выглядит следующим образом:
deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ns-my-workflow-api
name: my-workflow-api
spec:
replicas: 2
selector:
matchLabels:
app: my-workflow-api
template:
metadata:
labels:
app: my-workflow-api
spec:
containers:
- name: my-workflow-api
image: "myname/my-workflow-api:1.0.0"
ports:
- containerPort: 3000
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "256m"
service.yaml
имеет содержимое:
apiVersion: v1
kind: Service
metadata:
namespace: ns-my-workflow-api
name: my-workflow-api
spec:
selector:
app: my-workflow-api
type: LoadBalancer
ports:
- name: http
port: 8000
targetPort: 3000
protocol: TCP
namespace.yaml
имеет содержимое:
apiVersion: v1
kind: Namespace
metadata:
name: ns-my-workflow-api
Я также попробовал deployment.yaml
с правилом dns
:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ns-my-workflow-api
name: my-workflow-api
spec:
replicas: 2
selector:
matchLabels:
app: my-workflow-api
template:
metadata:
labels:
app: my-workflow-api
spec:
dnsPolicy: Default # <------ this rule
containers:
- name: my-workflow-api
image: "myname/my-workflow-api:1.0.0"
ports:
- containerPort: 3000
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "256m"
Как только я изменил URL-адрес подключения, чтобы использовать 2.0.14 or earlier
, я смог подключиться. Строка подключения начинается с mongodb://....
Хотя мне удалось заставить соединение работать с обходным путем, используя строку подключения в старом стиле, и, похоже, это какая-то проблема с разрешением DNS, как мне заставить новые протоколы работать для подключения к atlas из внутри кластера? заранее спасибо
Я смог решить это, используя это для начала minikube
:
minikube start --driver=docker
Кажется, есть проблема с разрешением DNS с базовым драйвером виртуального бокса оракула (может быть, проблема с настройкой и настройкой)