Terraform: укажите правила группы безопасности сети при создании кластера AKS с помощью azurerm_kubernetes_cluster - PullRequest
0 голосов
/ 03 декабря 2018

Я использую провайдер Terraform Azurerm версии 1.19 для создания кластера AKS.Я хотел бы указать правила группы безопасности сети при создании кластера, но не могу понять, как ссылаться на группу безопасности, которая создается, поскольку сгенерированная группа безопасности получает имя со случайными числами.

Что-токак:

aks-agentpool-33577837-nsg

Есть ли способ сослаться на созданный вывод nsg или по крайней мере случайное число, используемое в имени?

Конфигурация для создания кластера:

resource "azurerm_resource_group" "k8s" {
  name     = "${var.resource_group_name}"
  location = "${var.location}"
}

resource "azurerm_kubernetes_cluster" "k8s" {
  name                = "${var.cluster_name}"
  location            = "${azurerm_resource_group.k8s.location}"
  resource_group_name = "${azurerm_resource_group.k8s.name}"
  dns_prefix          = "${var.dns_prefix}"
  kubernetes_version  = "${var.kubernetes_version}"

  linux_profile {
    admin_username = "azureuser"

    ssh_key {
      key_data = "${file("${var.ssh_public_key}")}"
    }
  }

  agent_pool_profile {
    name    = "default"
    count   = "${var.agent_count}"
    vm_size = "${var.vm_size}"
    os_type = "Linux"
  }

  service_principal {
    client_id     = "${var.client_id}"
    client_secret = "${var.client_secret}"
  }

  tags {
    source      = "terraform"
    environment = "${var.environment}" 
  }
}

Создается группа безопасности, в которую я хотел бы добавить дополнительные правила.Вот правило, которое я хотел бы добавить, чтобы проверить работоспособность контроллера nginx.

resource "azurerm_network_security_rule" "nginx_liveness_probe" {
  name                        = "nginx_liveness"
  priority                    = 100 
  direction                   = "Inbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "${var.nginx_liveness_probe_port}"
  source_address_prefix       = "*"
  destination_address_prefix  = "*"
  resource_group_name         = "${azurerm_kubernetes_cluster.k8s.node_resource_group}"
  network_security_group_name = How do I reference the auto-generated nsg ?
  description = "Allow access to nginx liveness probe"
}

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Немного поздно здесь, но только сталкивался с этой проблемой.Итак, для тех, кто все еще ищет решение, это то, что я в итоге сделал, чтобы получить имя AKS NSG:

Добавьте это в файл * .tf, предоставляя свой AKS:

resource "azurerm_network_security_rule" "http" {
  name                        = "YOUR_NAME"
  priority                    = 102
  direction                   = "Inbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "80"
  destination_port_range      = "*"
  source_address_prefixes     = "${var.ips}"
  destination_address_prefix  = "${azurerm_public_ip.ingress.ip_address}"
  resource_group_name         = "${azurerm_kubernetes_cluster.test.node_resource_group}"
  network_security_group_name = "${data.external.aks_nsg_name.result.output}"

  depends_on = ["azurerm_resource_group.test"]
}

# get the NSG name
data "external" "aks_nsg_name" {
  program = [
    "bash",
    "${path.root}/scripts/aks_nsg_name.sh"
  ]

  depends_on = [azurerm_resource_group.test]
}

Создайте aks_nsg_name.sh в своем проекте и добавьте следующее:

#!/bin/bash 
OUTPUT=$(az network nsg list --query [].name -o tsv | grep aks-agentpool | head -n 1)
jq -n --arg output "$OUTPUT" '{"output":$output}'

0 голосов
/ 04 декабря 2018

Ваш AKC добавлен к azurerm_resource_group, который вы предоставили с помощью Terraform, я полагаю.Если это так, вы можете добавить пользовательский azurerm_network_security_group с любым числом azurerm_network_security_rule в эту группу ресурсов, как подробно здесь .

Пример:

resource "azurerm_resource_group" "test" {
  name     = "acceptanceTestResourceGroup1"
  location = "West US"
}

resource "azurerm_network_security_group" "test" {
  name                = "acceptanceTestSecurityGroup1"
  location            = "${azurerm_resource_group.test.location}"
  resource_group_name = "${azurerm_resource_group.test.name}"
}

resource "azurerm_network_security_rule" "test" {
  name                        = "test123"
  priority                    = 100
  direction                   = "Outbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "*"
  source_address_prefix       = "*"
  destination_address_prefix  = "*"
  resource_group_name         = "${azurerm_resource_group.test.name}"
  network_security_group_name = "${azurerm_network_security_group.test.name}"
}

К сожалению, параметр name обязателен для источников данных группы безопасности сети, и символы подстановки не поддерживаются, иначе это было бы вариантома также.

...