Не удается подключиться к модулю Mongodb в Кубернетесе (соединение отказано) - PullRequest
0 голосов
/ 25 октября 2018

У меня есть несколько удаленных виртуальных машин, на которых я хочу развернуть несколько экземпляров Mongodb, а затем сделать их доступными удаленно, но по какой-то причине я не могу заставить эту работу работать.

Вот шаги, которые я предпринял:

  • Я запустил модуль Kubernetes с запущенным Mongodb на удаленной виртуальной машине.
  • Затем я показал его через службу Kubernetes NodePort,
  • Затем я попытался подключиться к экземпляру Mongodb с моего ноутбука, но он не работал.

Вот команда, которую я использовал для подключения:

$ mongo host:NodePort   

(под «хозяином» я имею в виду хозяина Кубернетеса).

А вот его вывод:

MongoDB shell version v4.0.3
connecting to: mongodb://host:NodePort/test
2018-10-24T21:43:41.462+0200 E QUERY    [js] Error: couldn't connect to server host:NodePort, connection attempt failed: SocketException:
Error connecting to host:NodePort :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:257:13
@(connect):1:6
exception: connect failed

От хозяина Kubernetes я убедился, что модуль Mongodb запущен.Затем я запустил оболочку в контейнере и проверил, что сервер Mongodb работает правильно.Более того, ранее я предоставлял удаленный доступ к серверу Mongodb, указав параметр «--bind-ip = 0.0.0.0» в его описании yaml.Чтобы убедиться, что эта опция была применена, я запустил эту команду внутри экземпляра Mongodb из той же оболочки:

db._adminCommand( {getCmdLineOpts: 1}

А вот вывод:

{
"argv" : [
    "mongod",
    "--bind_ip",
    "0.0.0.0"
],
"parsed" : {
    "net" : {
        "bindIp" : "0.0.0.0"
    }
},
"ok" : 1
}

Итак,Сервер Mongodb на самом деле должен быть доступен удаленно.

Я не могу понять, вызвана ли проблема Kubernetes или Mongodb.

В качестве теста я выполнил те же самые шаги, используя MySQLвместо этого, и это сработало (то есть я запустил модуль MySQL и открыл его для службы Kubernetes, чтобы сделать его доступным удаленно, а затем успешно подключился к нему со своего ноутбука).Это привело бы меня к мысли, что виновником является Монгодб, но я не уверен.Может быть, я просто где-то совершаю глупую ошибку.

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

РЕДАКТИРОВАТЬ:

Вот вывод команды kubectl describe deployment <mongo-deployment>, согласно вашему запросу:

Name:                   mongo-remote
Namespace:              default
CreationTimestamp:      Thu, 25 Oct 2018 06:31:24 +0000
Labels:                 name=mongo-remote
Annotations:            deployment.kubernetes.io/revision=1
Selector:               name=mongo-remote
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  1 max unavailable, 1 max surge
Pod Template:
  Labels:  name=mongo-remote
  Containers:
   mongocontainer:
    Image:      mongo:4.0.3
    Port:       5000/TCP
    Host Port:  0/TCP
    Command:
      mongod
      --bind_ip
      0.0.0.0
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   mongo-remote-655478448b (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  15m   deployment-controller  Scaled up replica set mongo-remote-655478448b to 1

Длядля полноты, вот описание развертывания yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo-remote
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mongo-remote
    spec:
      containers:
        - name: mongocontainer
          image: mongo:4.0.3
          imagePullPolicy: Always
          command:
          - "mongod"
          - "--bind_ip"
          - "0.0.0.0"
          ports:
          - containerPort: 5000
            name: mongocontainer
      nodeSelector:
        kubernetes.io/hostname: xxx

1 Ответ

0 голосов
/ 26 октября 2018

Я нашел ошибку (и, как я подозревал, она была глупой).
Проблема была в описании развертывания в yaml.Поскольку в команде mongod не был указан порт, mongodb прослушивал порт по умолчанию (27017), но контейнер прослушивал другой указанный порт (5000).

Таким образом, решение состоит в том, чтобы либо задать параметр containerPort в качестве порта по умолчанию для mongodb, например:

       command:
      - "mongod"
      - "--bind_ip"
      - "0.0.0.0"
      ports:
      - containerPort: 27017
        name: mongocontainer

, либо установить порт mongodb в качестве порта для контейнера, как:

      command:
      - "mongod"
      - "--bind_ip"
      - "0.0.0.0"
      - "--port"
      - "5000"
      ports:
      - containerPort: 5000
        name: mongocontainer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...