簡體   English   中英

將 Azure 應用程序網關連接到內部 AKS 托管負載均衡器

[英]Connect Azure Application Gateway with Internal AKS managed loadbalancer

我正在嘗試使用 terraform 實施AKS 基線,但我無法讓我的應用程序網關連接到 AKS 創建的內部負載均衡器。

我的 AKS 配置包含一個 solr 實例和一個帶有 azure-load-balancer-internal 注釋的服務。 AKS 和創建的 LB 在同一個 SU.NET 中,而應用程序網關有它自己的 SU.NET,但它們都在同一個 .NET 中。

Kube.netes.tf

resource "kubernetes_service" "solr-service" {
  metadata {
    name        = local.solr.name
    annotations = {
      "service.beta.kubernetes.io/azure-load-balancer-internal" : "true"
      "service.beta.kubernetes.io/azure-load-balancer-internal-subnet" : "aks-subnet"

    }
  }

  spec {
    external_traffic_policy = "Local"
    selector = {
      app = kubernetes_deployment.solr.metadata.0.labels.app
    }

    port {
      name        = "http"
      port        = 80
      target_port = 8983
    }

    type             = "LoadBalancer"
    load_balancer_ip = "192.168.1.200"
  }
}

此配置在前端為 IP 192.168.1.200 的 MC_* 資源組中創建一個內部負載平衡器。 指標刀片中的運行狀況檢查返回 100。因此看起來創建的內部負載均衡器正在按預期工作。

現在我正在嘗試將此負載均衡器添加為我的應用程序網關中的 backend_pool 目標。

應用程序網關.tf

resource "azurerm_application_gateway" "agw" {
  name                = local.naming.agw_name
  resource_group_name = azurerm_resource_group.this.name
  location            = azurerm_resource_group.this.location

  sku {
    name     = "Standard_Medium"
    tier     = "Standard"
    capacity = 1
  }

  gateway_ip_configuration {
    name      = "Gateway-IP-Config"
    subnet_id = azurerm_subnet.agw_snet.id
  }

  frontend_port {
    name = "http-port"
    port = 80
  }

  frontend_ip_configuration {
    name                 = "public-ip"
    public_ip_address_id = azurerm_public_ip.agw_ip.id
  }

  backend_address_pool {
    name         = "lb"
    ip_addresses = ["192.168.1.200"]
  }

  backend_http_settings {
    name                  = "settings"
    cookie_based_affinity = "Disabled"
    port                  = 80
    protocol              = "Http"
    request_timeout       = 60
  }

  http_listener {
    name                           = "http-listener"
    frontend_ip_configuration_name = "public-ip"
    frontend_port_name             = "http-port"
    protocol                       = "Http"
  }

  request_routing_rule {
    name                       = local.request_routing_rule_name
    rule_type                  = "Basic"
    http_listener_name         = "http-listener"
    backend_address_pool_name  = "lb"
    backend_http_settings_name = "settings"
  }
}

我希望應用程序網關現在連接到內部負載均衡器並將所有請求發送給它。 但我得到消息,所有后端池都不健康。 所以看起來,網關無法訪問提供的 IP。

我查看了Azure GIT 基線,但據我所知,他們使用 FQDN 而不是 IP。我很確定這只是一些小配置問題,但我就是找不到它。

我已經嘗試使用應用程序網關作為入口 controller(或 http 路由)並且這有效,但我想用內部負載平衡器實現它,我還嘗試向后端節點池添加健康檢查,這沒有用。

編輯:我將 LB 更改為公共並將公共 IP 添加到應用程序網關並且一切正常,所以看起來這就是問題所在,但我不明白為什么應用程序網關無法訪問兄弟 su.net。 我沒有任何限制,默認情況下 Azure 允許 su.net 之間的通信。

我的錯誤是將內部負載均衡器放入與我的 kube.netes 相同的 .net 中。 當我更改代碼並提供自己的 su.net 時,一切正常。 我的最終服務配置:

resource "kubernetes_service" "solr-service" {
  metadata {
    name        = local.solr.name
    annotations = {
      "service.beta.kubernetes.io/azure-load-balancer-internal" : "true"
      "service.beta.kubernetes.io/azure-load-balancer-internal-subnet" : "lb-subnet"
    }
  }

  spec {
    external_traffic_policy = "Local"
    selector = {
      app = kubernetes_deployment.solr.metadata.0.labels.app
    }

    port {
      name        = "http"
      port        = 80
      target_port = 8983
    }

    type             = "LoadBalancer"
    load_balancer_ip = "192.168.3.200"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM