Соединитесь с Kubernetes mongo db в другом пространстве имен - PullRequest
0 голосов
/ 28 мая 2019

Может ли кто-нибудь указать, как подключиться к экземпляру mongo db с помощью клиента mongo с помощью клиента командной строки или из основных программ .net со строками подключения?

Мы создали образец кластера в digitalocean с пространством имен, скажем, mongodatabase .

Мы установили набор состояний Монго с 3 репликами. Мы можем успешно подключиться с помощью приведенной ниже команды kubectl --kubeconfig = configfile.yaml -n база данных mongod exec -ti mongo-0 mongo Но когда мы подключаемся из другого пространства имен или из пространства имен по умолчанию с именами модулей в следующем формате, это не сработает.

 kubectl --kubeconfig=configfile.yaml  exec -ti mongo-0.mongo.mongodatabase.cluster.svc.local mongo

где mongo-0.mongo.mongodatabase.cluster.svc.local находится в pod-0.service_name.namespace.cluster.svc.local (также пробовал pod-0 .statfulset_name.namespace.cluster.svc.local и pod-0.service_name.statefulsetname.namespace.cluster.svc.local) и т. д.,

Может ли кто-нибудь помочь с правильным именем DNS / строкой соединения, которая будет использоваться при соединении с клиентом mongo в командной строке, а также с такими программами, как java / .net core и т. Д.,?

Также следует ли использовать здесь развертывание kubernetes вместо наборов состояний?

Ответы [ 4 ]

1 голос
/ 29 мая 2019

Вам необходимо сослаться на службу Монго по dns. Поэтому, если ваша служба mongo - mymongoapp, и она развернута в mymongonamespace, вы сможете получить к ней доступ как mymongoapp.mymongonamespace.

Для тестирования я использовал докер-клиент bitnami / mongodb. Следующим образом:

Изнутри mymongonamespace эта команда работает

$ kubectl config set-context --current --namespace=mymongonamespace
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp

Но когда я переключился на пространство имен по умолчанию, это не сработало

$ kubectl config set-context --current --namespace=default
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp

Квалификация хоста с пространством имен тогда работает

$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp.mymongonamespace
0 голосов
/ 29 мая 2019

Я думаю, что вы ищете этот DNS для служб и модулей .

Вы можете иметь полное доменное имя (FQDN) для Services или для Pod.

Также, пожалуйста, взгляните на это kubernetes: Сервис, расположенный в другом пространстве имен , так как я думаю, что он даст вам ответ о том, как получить к нему доступ из другого пространства имен.

Пример будет выглядеть так:

apiVersion: v1
kind: Service
metadata:
  name: default-subdomain
spec:
  selector:
    name: busybox
  clusterIP: None
  ports:
  - name: foo # Actually, no port is needed.
    port: 1234
    targetPort: 1234
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox1
  labels:
    name: busybox
spec:
  hostname: busybox-1
  subdomain: default-subdomain
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    name: busybox
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox2
  labels:
    name: busybox
spec:
  hostname: busybox-2
  subdomain: default-subdomain
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    name: busybox

Если существует безголовая служба в том же пространстве имен, что и модуль, и с тем же именем, что и поддомен, сервер KubeDNS кластера также возвращает запись A для полного имени хоста модуля. Например, если для модуля с именем хоста установлено значение «busybox-1», а для субдомена установлено значение «default-subdomain», а служба без заголовка с именем «default-subdomain» в том же пространстве имен, модуль будет видеть свое собственное полное доменное имя как «busybox-1.default-subdomain.my-namespace.svc.cluster.local». DNS обслуживает запись A с этим именем, указывающую на IP-адрес модуля. Оба модуля «busybox1» и «busybox2» могут иметь свои отличные записи А.

Объект Endpoints может указать hostname для любых адресов конечных точек вместе с его IP.

Примечание: Поскольку записи A не создаются для имен модулей, для создания записи модуля A требуется hostname. Модуль без hostname, но с subdomain создаст только запись A для службы без наушников (default-subdomain.my-namespace.svc.cluster.local), указывающую на IP-адрес модуля. Кроме того, Pod должен быть готов, чтобы иметь запись, если в Сервисе не установлен publishNotReadyAddresses=True.

0 голосов
/ 29 мая 2019

Ваш вопрос о Deployments vs StatefulSets должен быть другим. Но ответ таков: StatefulSet используется, когда вам нужно «Стабильное постоянное хранилище» kubernetes.io .

Также с той же страницы "стабильный является синонимом постоянства в Pod (пере) планировании". Таким образом, в основном ваш экземпляр mongo поддерживается PeristentVolume, и вы хотите, чтобы том был подключен после перепланирования модуля.

0 голосов
/ 28 мая 2019

Вот так можно попасть внутрь стручка Монго-0

kubectl --kubeconfig=configfile.yaml  exec -ti mongo-0 sh
...