Почему Azure Load Balancer создается в AKS, хотя я использовал AppGateway в качестве контроллера входящего трафика?

Я создал кластер Kubernetes в Azure, используя следующий Terraform. Как вы ясно видите, я передал идентификатор AppGateway в ingress_application_gateway.

# Create the Azure Kubernetes Service (AKS) Cluster
resource "azurerm_kubernetes_cluster" "kubernetes_cluster" {
  count                         = var.enable_kubernetes == true ? 1 : 0
  name                          = "aks-prjx-${var.subscription_type}-${var.environment}-${var.location}-${var.instance_number}"    
  location                      = var.location
  resource_group_name           = module.resource_group_kubernetes_cluster[0].name  # "rg-aks-spoke-dev-westus3-001"
  dns_prefix                    = "dns-aks-prjx-${var.subscription_type}-${var.environment}-${var.location}-${var.instance_number}" #"dns-prjxcluster"
  private_cluster_enabled       = false
  local_account_disabled        = true

  default_node_pool {
    name                        = "npprjx${var.subscription_type}" #"prjxsyspool" # NOTE: "name must start with a lowercase letter, have max length of 12, and only have characters a-z0-9."
    vm_size                     = "Standard_B8ms"
    vnet_subnet_id              = data.azurerm_subnet.aks-subnet.id
    # zones                     = ["1", "2", "3"]
    enable_auto_scaling         = true
    max_count                   = 3
    min_count                   = 1
    # node_count                = 3
    os_disk_size_gb             = 50
    type                        = "VirtualMachineScaleSets"
    enable_node_public_ip       = false
    enable_host_encryption      = false

    node_labels = {
      "node_pool_type"          = "npprjx${var.subscription_type}"
      "node_pool_os"            = "linux"
      "environment"             = "${var.environment}"
      "app"                     = "prjx_${var.subscription_type}_app"
    }
    tags = var.tags
  }

  ingress_application_gateway {
    gateway_id = azurerm_application_gateway.network.id
  }

  # Enabled the cluster configuration to the Azure kubernets with RBAC
  azure_active_directory_role_based_access_control { 
    managed                     = true
    admin_group_object_ids      = var.active_directory_role_based_access_control_admin_group_object_ids
    azure_rbac_enabled          = true #false
  }

  network_profile {
    network_plugin              = "azure"
    network_policy              = "azure"
    outbound_type               = "userDefinedRouting"
  }

  identity {
    type = "SystemAssigned"
  }  

  oms_agent {
    log_analytics_workspace_id  = module.log_analytics_workspace[0].id
  }

  timeouts {
    create = "20m"
    delete = "20m"
  }

  depends_on = [
    azurerm_application_gateway.network
  ]
}

Я думал, что AppGateway будет использоваться как Ingress Gateway. Однако AKS создает балансировщик нагрузки Azure при попытке развернуть службу, как указано ниже.

apiVersion: v1
kind: Service
metadata:
  name: aks-helloworld 
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: aks-helloworld-two

Есть ли причина, по которой этот Load Balancer и AppGateway не используются? Я бы предположил, что балансировщик нагрузки используется для типа LoadBalancer, а App Gateway — для Ingress.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести то же самое в своей среде, чтобы создать службу с контроллером входа шлюза приложений:

Поскольку вы упомянули тип службы: балансировщик нагрузки в файле yaml, он создает службу балансировки нагрузки, Чтобы создать службу с контроллером входящего трафика Шлюза приложений без связанного балансировщика нагрузки, выполните следующие действия.

1. Во-первых, вам нужно создать развертывание для вашего приложения с нужными репликами и нужным образом.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
spec:
 replicas: 2
 selector:
  matchLabels:
  app: nginx
template:
 metadata:
   name: test-app
   labels:
     app: nginx
   spec:
     containers:
     - name: nginx
     image: "nginx:latest"
     ports:
     - containerPort: 80

cmd для проверки развернутого приложения kubectl get deploy

2 Затем вы можете создать службу для своего приложения с типом: ClusterIP.

Примечание: если вы создаете тип сервиса:LoadBalancer для своего приложения. Эта служба будет создана с помощью Load Balancer.

apiVersion: v1
kind: Service
metadata:
    name: nginx-service
     labels:
       app: nginx
   spec:
     selector:
       app: nginx
     ports:
       - port: 80
          targetPort: 80
          protocol: TCP

Служба создана с типом: ClusterIP.

cmd для проверки сервиса: kubectl get svc

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

.

apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginxapp
    annotations:
       kubernetes.io/ingress.class: azure/application-gateway
     spec:
        rules:
        - http:
         paths:
        - pathType: Exact
          path: /
          backend:
           service:
             name: nginx-service
           port:
             number: 80

Вход успешно создан.

  1. После создания всех ресурсов контроллер входящего трафика Шлюза приложений направит трафик в службу без создания связанного балансировщика нагрузки.

Приложение успешно работает с общедоступным IP-адресом шлюза приложений.

Другие вопросы по теме