Подключение к кластеру mongodb в kubernetes

У меня есть эта конфигурация terraform для создания одной реплики mongodb и службы, но я не могу подключиться к mongo, используя cli и доменное имя кластера.

locals {
  labels = {
    "app" = "mongo"
  }
  volume_config_name = "mongo-config"
}

module "mongo" {
  source  = "terraform-iaac/stateful-set/kubernetes"
  version = "1.4.2"
  # insert the 3 required variables here
  image     = "mongo:4.4"
  name      = "mongodb"
  namespace = kubernetes_namespace.cmprimg.metadata[0].name

  custom_labels = local.labels

  volume_host_path = [
    {
      volume_name  = "data"
      path_on_node = "/data/db"
    },
  ]
  volume_mount = [
    {
      mount_path  = "/data/db"
      volume_name = "data"
    },
    {
      mount_path  = "/etc/mongod.conf.orig"
      volume_name = "mongodb-conf"
      sub_path    = "configfile" // Key from configmap
    }
  ]

  volume_config_map = [{
    mode        = "0777"
    volume_name = "mongodb-conf"
    name        = "mongodb-confmap"
  }]

  # volume_claim = [
  #   {
  #     name                   = "mongo"
  #     namespace              = kubernetes_namespace.cmprimg.metadata[0].name
  #     access_modes           = ["ReadWriteOnce"]
  #     requests_storage       = "4Gi"
  #     persistent_volume_name = "mongo"
  #     storage_class_name     = "linode-block-storage-retain"
  #   }
  # ]
  env = {
    "MONGO_INITDB_ROOT_USERNAME" = var.username,
    "MONGO_INITDB_ROOT_PASSWORD" = var.password,
  }
  command = [
    "mongod",
    "--bind_ip",
    "0.0.0.0",
  ]

  internal_port = [
    {
      name          = "mongo"
      internal_port = 27017
    }
  ]

  resources = {
    request_cpu    = "100m"
    request_memory = "800Mi"
    limit_cpu      = "120m"
    limit_memory   = "900Mi"
  }

  replicas = 1
}

module "mongo_service" {
  source  = "terraform-iaac/service/kubernetes"
  version = "1.0.4"
  # insert the 3 required variables here

  app_name      = module.mongo.name
  app_namespace = kubernetes_namespace.cmprimg.metadata[0].name
  port_mapping = [
    {
      name          = "mongo"
      internal_port = 27107
      external_port = 27017
    }
  ]

  custom_labels = local.labels
}

resource "kubernetes_persistent_volume_claim" "example" {
  metadata {
    name      = "mongo"
    namespace = kubernetes_namespace.cmprimg.metadata[0].name
    labels    = local.labels
  }

  spec {
    access_modes = ["ReadWriteOnce"]
    resources {
      requests = {
        storage = "20Gi"
      }
    }
    storage_class_name = "linode-block-storage-retain"
  }
}

resource "kubernetes_config_map" "mongodb_conf" {
  metadata {
    name      = "mongodb-confmap"
    namespace = kubernetes_namespace.cmprimg.metadata[0].name
    labels    = local.labels
  }

  data = {
    "configfile" = yamlencode({
      storage : {
        dbPath : "/data/db",
      },
      net : {
        port : 27017,
        bindIp : "0.0.0.0",
      }
    })
  }
}

Я могу выполнить вход в модуль mongodb и использовать mongo cli для подключения с использованием локального хоста, но когда я нахожусь в том же модуле и использую mongocli для подключения с использованием доменного имени mongodb.default.svc.cluster.local:27017, я получаю отказ в подключении. Я вижу в журналах, что mongodb привязывается к 0.0.0.0, но не может подключиться через внешние порты. Я неправильно настроил службу или сделал что-то еще не так?

в каком пространстве имен развернут mongodb?

blakelead 12.02.2023 01:39

@blakelead default, я уже подтвердил, что это не проблема пространства имен

Dan 12.02.2023 01:40

Я не знаком с модулем, который вы используете для создания службы. правильно ли сгенерирована конфигурация селектора?

blakelead 12.02.2023 01:46

@blakelead, когда я смотрю на службу на панели инструментов, я вижу модуль mongodb, указанный в качестве конечной точки.

Dan 12.02.2023 02:54
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Посмотрите внимательно на этот раздел:

port_mapping = [
  {
    name          = "mongo"
    internal_port = 27107
    external_port = 27017
  }
]
  1. Вы используете «внутренние» и «внешние» номера портов непоследовательно в файле (внутренний здесь 27107)
  2. Вы уверены, что синтаксис этого блока правильный? В исследовании, которое я провел через Интернет, раздел portMappings обычно имеет другой синтаксис (например, https://github.com/hashicorp/terraform-provider-aws/issues/21861)

.

portMappings = [
  {
      containerPort = var.container_port
      hostPort = var.container_port
      protocol = "tcp"
    }
  ]

Я даже не заметил опечатку, спасибо.

Dan 12.02.2023 18:32

Другие вопросы по теме