Рейтинг:1

Как сопоставить порты в экземплярах контейнеров Azure с помощью Terraform?

флаг ua

У меня есть два контейнера в моей группе контейнеров в Azure с использованием экземпляров контейнеров Azure (ACI), один (контейнер A) предоставляет порты. 80 и 443 в Интернет (обратный прокси), другой (контейнер B) также работает на порту 80. Как сопоставить порт контейнера B 80 в другой порт, скажем 8080, чтобы два контейнера не конфликтовали с портами на локальный хост (в Azure контейнеры внутри группы контейнеров могут связываться друг с другом через локальный хост)?

я не могу использовать 8080:80 потому что это должно быть число, и я не вижу другого способа указать это. Если я укажу порт 80 в контейнере A обратный прокси-сервер просто зацикливается сам на себе, по сути, обратное проксирование обратного прокси-сервера (обычно порт контейнера B 80 будет доступен на локальном хосте)

Пример:

ресурс "azurerm_container_group" "main_containers" {
  имя = "группа контейнеров"
  местоположение = var.location
  имя_группы_ресурсов = имя_переменной.rg
  ip_address_type = "общедоступный"
  dns_name_label = local.dns_name_label
  ОС_тип = "Линукс"
  restart_policy = "Всегда"
  теги = переменные.теги

  контейнер {
    имя = "следующее облако"
    изображение = "следующее облако"
    процессор = "0,8"
    память = "0,8"

    переменные_среды = {
      MYSQL_DATABASE = azurerm_mariadb_database.nextcloud_database_db.name
      MYSQL_USER = azurerm_mariadb_server.nextcloud_database.administrator_login
      MYSQL_HOST = azurerm_mariadb_server.nextcloud_database.fqdn
    }

    secure_environment_variables = {
      MYSQL_PASSWORD = azurerm_mariadb_server.nextcloud_database.administrator_login_password
    }

    объем {
      имя = azurerm_storage_share.nextcloud_storage_nextcloud_data_share.name
      mount_path = "/var/www/html"
      storage_account_name = azurerm_storage_account.nextcloud_storage.name
      storage_account_key = azurerm_storage_account.nextcloud_storage.primary_access_key
      share_name = azurerm_storage_share.nextcloud_storage_nextcloud_data_share.name
    }

    порты {
      # Вот что я хочу сделать, но не получается:
      # Неверное значение атрибута "port": требуется номер.
      порт = "8080:80"
      протокол = "TCP"
    }
  }

  контейнер {
    имя = "обратный прокси-https"
    изображение = "кэдди"
    процессор = "0,2"
    память = "0,2"
    команды = [
      "кэдди", "обратный прокси",
      "-from", local.public_domain_name,
      # здесь я бы посоветовал использовать обратный прокси на 8080
      "-к", "локальный: 8080",
    ]

    порты {
      порт = 80
      протокол = "TCP"
    }

    порты {
      порт = 443
      протокол = "TCP"
    }

    объем {
      имя = azurerm_storage_share.nextcloud_storage_caddy_data_share.name
      mount_path = "/данные/кэдди"
      storage_account_name = azurerm_storage_account.nextcloud_storage.name
      storage_account_key = azurerm_storage_account.nextcloud_storage.primary_access_key
      share_name = azurerm_storage_share.nextcloud_storage_caddy_data_share.name
    }

    объем {
      имя = azurerm_storage_share.nextcloud_storage_caddy_config_share.name
      mount_path = "/config/caddy"
      storage_account_name = azurerm_storage_account.nextcloud_storage.name
      storage_account_key = azurerm_storage_account.nextcloud_storage.primary_access_key
      share_name = azurerm_storage_share.nextcloud_storage_caddy_config_share.name
    }
  }
}

Simao Gomes Viana avatar
флаг ua
Это относится только к **некоторым** образам: вы можете использовать тип тома `secret` для перезаписи каталогов в контейнере – пример: `volume { secret = { "000-default.conf" = base64encode( ... EOT) } mount_path = "/etc/apache2/sites-enabled" }`. Это неправильное использование «секретного» типа тома — на самом деле он монтирует «встроенные» файлы в контейнер. Это позволяет легко настроить без изменения образа.
Simao Gomes Viana avatar
флаг ua
Дополнение к предыдущему комментарию: Следует отметить, что для nextcloud просто перезаписать 000-default.conf недостаточно. Вам нужно сделать это для всего apache2.conf, а это означает, что все файлы в /etc/apache2. Выполнимо, но раздражает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.