gpt4 book ai didi

azure - 将 Azure 应用程序网关与内部 AKS 托管负载均衡器连接

转载 作者:行者123 更新时间:2023-12-02 23:09:02 27 4
gpt4 key购买 nike

我正在尝试实现AKS Baselines使用 terraform,但我无法将应用程序网关连接到 AKS 创建的内部负载均衡器。

我的 AKS 配置包含 solr 实例和带有 azure-load-balancer-internal 注释的服务。 AKS 和创建的 LB 位于同一子网中,而应用程序网关有自己的子网,但它们都位于同一 VNET 中。

Kubernetes.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"
}
}

此配置在 MC_* 资源组中创建一个前端 IP 192.168.1.200 的内部负载均衡器。指标 Blade 中的运行状况检查返回 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 baseline ,但据我所知,他们使用 FQDN 而不是 IP。我很确定这只是一些小配置问题,但我就是找不到它。

我已经尝试使用应用程序网关作为入口 Controller (或http路由)并且这有效,但我想使用内部负载均衡器来实现它,我还尝试向后端节点池添加运行状况检查,但这不起作用.

编辑:我将 LB 更改为公共(public),并将公共(public) IP 添加到应用程序网关,一切正常,所以看起来这就是问题所在,但我不明白为什么应用程序网关无法访问同级子网。我没有任何限制,默认情况下 Azure 允许子网之间的通信。

最佳答案

我的错误是将内部负载均衡器放入与我的 kubernetes 相同的网络中。当我更改代码并提供自己的子网时,一切正常。我的最终服务配置:

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"
}
}

关于azure - 将 Azure 应用程序网关与内部 AKS 托管负载均衡器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75255457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com