Как назначить только один stati c publi c IP для AKS-multiAZ Loadbalancer - PullRequest
1 голос
/ 31 января 2020

Я настраиваю кластер AKS с несколькими AZ, я хотел бы назначить stati c publi c IP, который я создал для этого loadbalancer. Вот что у меня есть:

#### Creating a Public static IP ####
resource "azurerm_public_ip" "lb-public-ip1" {
  name                = "${var.public_ip_name}"
  location            = "${var.location}"
  resource_group_name = "${var.resource_group_name}"
  allocation_method   = "Static"
  ip_version          = "IPv4"
  sku                 = "standard"
  #domain_name_label   =
  tags = {
    Environment = "${var.environment}"
    owner       = "${var.resource_owner}"
    created-by  = "${var.policy_created_by}"
  }
  depends_on    = ["null_resource.module_depends_on"]
}
data "azurerm_public_ip" "lb-public-ip1" {
  name                = "${azurerm_public_ip.lb-public-ip1.name}"
  resource_group_name = "${azurerm_public_ip.lb-public-ip1.resource_group_name}"
  depends_on          = ["null_resource.module_depends_on"]
}
resource "null_resource" "module_depends_on" {
  triggers = {
    value = "${length(var.module_depends_on)}"
  }
}

#### Creating AKS Cluster ####
resource "azurerm_kubernetes_cluster" "k8s" {
    name                = "${var.cluster_name}"
    location            = "${var.location}"
    resource_group_name = "${var.resource_group_name}"
    dns_prefix          = "${var.dns_prefix}"
    kubernetes_version  = "1.14.8"
    linux_profile {
        admin_username = "ubuntu"

        ssh_key {
            key_data = "${var.key_data}"
        }
    }

    default_node_pool {
        availability_zones    = ["1","2"]
        enable_auto_scaling   = true 
        enable_node_public_ip = false 
        max_count             = "8" 
        min_count             = "2" 
        name                  = "default" 
        node_count            = "${var.node_count}"  
        os_disk_size_gb       = "${var.os_disk_size}" 
        type                  = "VirtualMachineScaleSets" 
        vm_size               = "Standard_DS2_v2"
       }

    role_based_access_control {
          enabled = true
    }
    service_principal {
        client_id      = "${var.client_id}"
        client_secret  = "${var.client_secret}"
    }
    addon_profile {
        kube_dashboard {
              enabled = true
        }
        oms_agent {
        enabled                    = "${var.oms_agent_activation}"
        log_analytics_workspace_id = "${var.log_analytics_workspace_id}"
        }
    }
    network_profile {
        network_plugin    = "kubenet"
        load_balancer_sku = "Standard"
        load_balancer_profile {
            outbound_ip_address_ids = [ "${azurerm_public_ip.lb-public-ip1.id}" ]

        }
    }
    tags = {
        Environment = "${var.environment}"
        Name        = "${var.cluster_name}"
        owner       = "${var.resource_owner}"
        created-by  = "${var.policy_created_by}"
    }
    depends_on       = [azurerm_public_ip.lb-public-ip1]
}

С этой настройкой он создал кластер AKS и LoadBalancer, называемый kubernetes, и назначил тот stati c publi c IP, который я создал для LoadBalancer без какого-либо назначенного LB В разделе «Конфигурация внешнего интерфейса IP» я также вижу, что он также создал другой IP-адрес, и все правила LoadBalancer и HealthProbes назначены этому IP-адресу, который создается автоматически. Кроме того, также созданы два пула бэкэнда: kubernetes (2 ВМ) и aksOutboundBackendPool (2 ВМ)

в Azure do c, в котором говорится: «По умолчанию один опубликованный c IP будет автоматически созданный в той же группе ресурсов, что и кластер AKS, если указано NO publi c IP, publi c IP-префикс или количество IP-адресов. " но в моем случае я указал PublicIP!

Мне интересно Почему он сам создал другой IP? как я могу пропустить этот автоматически созданный c IP-адрес и использовать только тот IP-адрес, который я создал и присвоил профилю loadbalancer, и как AKS может назначить правила LoadBalancer и пробники состояния тому IP-адресу, который я назначил?

Зачем нужно иметь несколько publi c IP?

В конце я собираюсь использовать назначенный PublicIP для входного шлюза istio. Вот почему мне нужен только один указанный c publi c IP.

Кроме того, какой внутренний пул мне следует использовать?

Мне просто нужен кластер AKS с высокой доступностью для Prod Env на случай, если если кластер в одной зоне выходит из строя, он запускает кластер во второй зоне.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 03 февраля 2020

Как я знаю, когда вы создаете AKS и создаете IP-адрес stati c publi c для назначения его исходящему через Terraform, вам просто нужно создать IP-адрес publi c и кластер AKS. не нужно использовать источник data и null_resource. Таким образом, ваш код может быть изменен на следующее:

#### Creating a Public static IP ####
resource "azurerm_public_ip" "lb-public-ip1" {
  name                = "${var.public_ip_name}"
  location            = "${var.location}"
  resource_group_name = "${var.resource_group_name}"
  allocation_method   = "Static"
  ip_version          = "IPv4"
  sku                 = "standard"
  #domain_name_label   =
  tags = {
    Environment = "${var.environment}"
    owner       = "${var.resource_owner}"
    created-by  = "${var.policy_created_by}"
  }
}


#### Creating AKS Cluster ####
resource "azurerm_kubernetes_cluster" "k8s" {
    name                = "${var.cluster_name}"
    location            = "${var.location}"
    resource_group_name = "${var.resource_group_name}"
    dns_prefix          = "${var.dns_prefix}"
    kubernetes_version  = "1.14.8"
    linux_profile {
        admin_username = "ubuntu"

        ssh_key {
            key_data = "${var.key_data}"
        }
    }

    default_node_pool {
        availability_zones    = ["1","2"]
        enable_auto_scaling   = true 
        enable_node_public_ip = false 
        max_count             = "8" 
        min_count             = "2" 
        name                  = "default" 
        node_count            = "${var.node_count}"  
        os_disk_size_gb       = "${var.os_disk_size}" 
        type                  = "VirtualMachineScaleSets" 
        vm_size               = "Standard_DS2_v2"
       }

    role_based_access_control {
          enabled = true
    }
    service_principal {
        client_id      = "${var.client_id}"
        client_secret  = "${var.client_secret}"
    }
    addon_profile {
        kube_dashboard {
              enabled = true
        }
        oms_agent {
        enabled                    = "${var.oms_agent_activation}"
        log_analytics_workspace_id = "${var.log_analytics_workspace_id}"
        }
    }
    network_profile {
        network_plugin    = "kubenet"
        load_balancer_sku = "Standard"
        load_balancer_profile {
            outbound_ip_address_ids = [ "${azurerm_public_ip.lb-public-ip1.id}" ]

        }
    }
    tags = {
        Environment = "${var.environment}"
        Name        = "${var.cluster_name}"
        owner       = "${var.resource_owner}"
        created-by  = "${var.policy_created_by}"
    }
    depends_on       = [azurerm_public_ip.lb-public-ip1]
}

И будет два пула бэкэнда: aksOutboundBackendPool и kubernetes и одно правило для исходящих сообщений: aksOutboundRule. Никаких правил и проверок. Это должно быть вызвано другими вещами.

...