Terraform подключиться к кластеру акс без входа в систему az - PullRequest
1 голос
/ 23 февраля 2020

Моя цель - создать виртуальную машину Ubuntu, которая будет подключаться к aks без запуска az login.

Основная идея заключается в том, что я хочу позволить другим людям подключаться только к этому кластеру aks и не возможность читать \ писать любые другие ресурсы на Azure. В настоящее время я пытался добиться этого путем создания новой роли и назначения этой роли виртуальной машине, но пока что безуспешно.

Мой вопрос - возможно ли запустить az aks get-credentials ... без запуска az login?

Шаблон Terraform:

# Create AKS Cluster
resource "azurerm_kubernetes_cluster" "akscluster" {
  count               = var.cluster_count
  name                = "${var.cluster_name}-${count.index}"
  location            = var.location
  resource_group_name = azurerm_resource_group.aksrg.name
  dns_prefix          = var.dns

  default_node_pool {
    name       = var.node_pool_name
    node_count = var.node_count
    vm_size    = var.vm_size
    type       = "VirtualMachineScaleSets"
  }

  service_principal {
    client_id     = var.kubernetes_client_id
    client_secret = var.kubernetes_client_secret
  }

  tags = {
    Environment = var.tags
  }
}

# Create virtual machine
resource "azurerm_virtual_machine" "myterraformvm" {
  count                 = var.cluster_count
  name                  = "aks-${count.index}"
  location              = var.location
  resource_group_name   = azurerm_resource_group.aksrg.name
  network_interface_ids = [azurerm_network_interface.myterraformnic.id]
  vm_size               = "Standard_DS1_v2"

  storage_os_disk {
    name              = "myOsDisk"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Premium_LRS"
  }

  storage_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18.04-LTS"
    version   = "latest"
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "var.admin"
    admin_password = "var.pass"
  }

  os_profile_linux_config {
    disable_password_authentication = false
    # ssh_keys {
    #     path     = "/home/azureuser/.ssh/authorized_keys"
    #     key_data = "ssh-rsa AAAAB3Nz{snip}hwhqT9h"
    # }
  }

  identity {
    type = "SystemAssigned"
  }

  boot_diagnostics {
    enabled     = "true"
    storage_uri = azurerm_storage_account.mystorageaccount.primary_blob_endpoint
  }

  tags = {
    environment = var.tags
  }
}


resource "azurerm_virtual_machine_extension" "example" {
  count                = var.cluster_count
  name                 = "hostname"
  virtual_machine_id   = azurerm_virtual_machine.myterraformvm[count.index].id
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"

  settings = <<SETTINGS
    {
        "commandToExecute": "curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash"
    }
SETTINGS


  tags = {
    environment = var.tags
  }
}

1 Ответ

1 голос
/ 23 февраля 2020

Вы можете создать удаленный файл с помощью поставщика remote-exec, передав ресурс azurerm_kubernetes_cluster.aks.kube_config_raw. Я сделал для вас пример: https://github.com/ams0/terraform-templates/tree/master/aks-vm.

Он создает vnet с двумя подсетями, AKS в одной и виртуальной машиной Ubuntu в другой, и создает местный /home/ubuntu/.kube/config в ВМ. Вам просто нужно скачать kubectl, и вы хороши для go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...