繁体   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