Смонтировать отдельный файл в экземплярах контейнера Azure?

#azure-container-instances

#azure-container-instances

Вопрос:

Я пытаюсь смонтировать один файл в экземпляре контейнера Azure, в данном случае файл ключа хоста ssh, как описано в этом образе docker: https://github.com/atmoz/sftp

Однако из моих экспериментов экземпляры контейнера Azure через ARM / Azure CLI, похоже, поддерживают только папки для монтирования.

Если я попытаюсь смонтировать как файл, я подозреваю, что он фактически монтируется как папка, поскольку встроенный bash, похоже, пропускает тот факт, что он уже существует, а затем выдает ошибки при попытке записи в него.

Существуют ли какие-либо недокументированные функции для монтирования отдельных файлов? Я надеюсь, что не нужно прибегать к настройке образа docker, поскольку это помешало бы моей цели использовать готовый образ. 🙁

Комментарии:

1. Я не верю, что мы поддерживаем монтирование одного файла. Только общий файловый ресурс… При этом вы можете обратиться сюда, чтобы напрямую связаться с командой ACI github.com/MicrosoftFeedback/aci-issues/issues

2. Спасибо @Micah_MSFT, я добавил отзыв: github.com/MicrosoftFeedback/aci-issues/issues/30

Ответ №1:

Смонтировать файлы можно с помощью хранилища ключей. Если вы развертываете свою группу контейнеров ACI с использованием шаблона ARM, вы можете интегрировать ее с экземпляром Azure Key Vault. «Секретное» хранилище ключей можно смонтировать как отдельный файл в каталоге по вашему выбору. Для получения более подробной информации обратитесь к ссылке на шаблон ARM ACI.

Комментарии:

1. Это хороший подход, спасибо! Сейчас я не в той роли, чтобы попробовать это, но для меня это звучит достаточно многообещающе, чтобы отметить это как ответ.

Ответ №2:

Вы можете сделать это с помощью секретов экземпляра контейнера Azure.
Либо Azure cli:

 az container create 
--resource-group myResourceGroup 
--name secret-volume-demo 
--image mcr.microsoft.com/azuredocs/aci-helloworld 
--secrets id_rsa.pub="<file-content>" 
--secrets-mount-path /home/foo/.ssh/keys
  

или с помощью terraform:

 resource "azurerm_container_group" "aci_container" {
    name                = ""
    resource_group_name = ""
    location            = ""
    ip_address_type     = "public"
    dns_name_label      = "dns_endpoint"
    os_type             = "Linux"

    container {
        name   = "sftp"
        image  = "docker.io/atmoz/sftp:alpine-3.7"
        cpu    = "1"
        memory = "0.5"

        ports {
            port     = 22
            protocol = "TCP"
        }

        // option 1: mount key as Azure Container Instances secret volume
        volume {
            name       = "user-pub-key"
            mount_path = "/home/foo/.ssh/keys"
            secret = {
            "id_rsa.pub" = base64encode("<public-key-content>")
            }
        }

        // option 2: mount ssh public key as Azure File share volume
        // Note: This option will work for user keys to auth, but not for the host keys 
        // since atmoz/sftp logic is to change files permission, 
        // but Azure File share does not support this POSIX feature
        volume {
            name = "user-pub-key"     
            mount_path = "/home/foo/.ssh/keys"
            read_only = true
            share_name = "share-name"
            storage_account_name = "storage-account-name"
            storage_account_key  = "storage-account-key"
        }
}
  

В обоих случаях у вас будет файл /home/foo/.ssh/keys/id_rsa.pub с заданным содержимым.