Terraform:检索 nginx 入口控制器负载均衡器 IP

Ger*_*erb 5 kubernetes terraform azure-aks

我正在尝试获取 Azure AKS 中的 nginx 入口控制器负载均衡器 IP。我想我会通过以下方式使用 kubernetes 提供程序:

data "kubernetes_service" "nginx_service" {
  metadata {
    name      = "${local.ingress_name}-ingress-nginx-controller"
    namespace = local.ingress_ns
  }

  depends_on = [helm_release.ingress]
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到 IP 地址,这是我得到的:

nginx_service = [
      + {
          + cluster_ip                  = "10.0.165.249"
          + external_ips                = []
          + external_name               = ""
          + external_traffic_policy     = "Local"
          + health_check_node_port      = 31089
          + load_balancer_ip            = ""
          + load_balancer_source_ranges = []
          + port                        = [
              + {
                  + name        = "http"
                  + node_port   = 30784
                  + port        = 80
                  + protocol    = "TCP"
                  + target_port = "http"
                },
              + {
                  + name        = "https"
                  + node_port   = 32337
                  + port        = 443
                  + protocol    = "TCP"
                  + target_port = "https"
                },
            ]
          + publish_not_ready_addresses = false
          + selector                    = {
              + "app.kubernetes.io/component" = "controller"
              + "app.kubernetes.io/instance"  = "nginx-ingress-internal"
              + "app.kubernetes.io/name"      = "ingress-nginx"
            }
          + session_affinity            = "None"
          + type                        = "LoadBalancer"
        },
   ]
Run Code Online (Sandbox Code Playgroud)

但是,当我通过以下方式下拉服务时,kubectl我可以通过以下方式获取IP地址:

 kubectl get svc nginx-ingress-internal-ingress-nginx-controller -n nginx-ingress -o json | jq -r '.status.loadBalancer.ingress[].ip'
10.141.100.158
Run Code Online (Sandbox Code Playgroud)

这是 AKS 的 kubernetes 提供程序的限制吗?如果是这样,其他人使用过什么解决方法?我的最终目标是使用 IP 来配置应用程序网关后端。

我想我可以使用local-exec,但这看起来很糟糕。然而,这可能是我目前唯一的选择。

谢谢,

杰瑞

Phi*_*elz 2

尽管我强烈建议不要使用 Terraform 在 Kubernetes 内创建资源,但您可以这样做:

使用 Terraform 创建公共 IP -> 使用 Terraform 在 Kubernetes 内创建 ingress-nginx,并传递annotationsTerraformloadBalancerIP资源中的数据。最终清单应如下所示:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-resource-group: myResourceGroup
  name: ingress-nginx-controller
spec:
  loadBalancerIP: <YOUR_STATIC_IP>
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

Terraform 可能看起来像这样:

resource "kubernetes_service" "ingress_nginx" {
  metadata {
    name = "tingress-nginx-controller"
    
    annotations {
      "service.beta.kubernetes.io/azure-load-balancer-resource-group" = "${azurerm_resource_group.YOUR_RG.name}"
    }

  spec {
    selector = {
      app = <PLACEHOLDER>
    }
    port {
      port        = <PLACEHOLDER>
      target_port = <PLACEHOLDER>
    }

    type = "LoadBalancer"
    load_balancer_ip = "${azurerm_public_ip.YOUR_IP.ip_address}"
  }
}
Run Code Online (Sandbox Code Playgroud)