You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS内部Nginx Ingress资源访问出现连接超时问题求助

内部Nginx Ingress Controller连接超时排查

环境配置

内部Ingress Controller安装

通过Helm部署内部Nginx Ingress Controller:

helm upgrade --install internal-ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace internal-ingress-basic --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz --set controller.replicaCount=4 --set controller.service.internalTrafficPolicy=Cluster,controller.service.externalTrafficPolicy=Local -f .\internal-ingress.yaml

配套的internal-ingress.yaml配置:

controller:
  ingressClassByName: true

  ingressClassResource:
    name: nginx-internal
    enabled: true
    default: false
    controllerValue: "k8s.io/ingress-nginx-internal"

  service:
    external:
      enabled: false

    internal:
      enabled: true
      loadBalancerIP: 10.0.46.0
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"

Grafana内部Ingress配置

创建关联现有Grafana服务的内部Ingress(该服务已有正常公网Ingress,本次为内部访问测试),grafana-internal.yaml配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-internal-ingress
  namespace: monitoring
  annotations:
    meta.helm.sh/release-name: grafana-internal-ingress
    meta.helm.sh/release-namespace: monitoring
    nginx.ingress.kubernetes.io/proxy-body-size: 8m
    nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
    nginx.ingress.kubernetes.io/use-regex: 'true'

    # 尝试添加但无效的配置
    nginx.ingress.kubernetes.io/server-snippet: |
      location / {
        proxy_pass https://www.google.com;
        proxy_set_header Host www.google.com;
        proxy_ssl_server_name on;
      }
spec:
  ingressClassName: nginx-internal
  rules:
    - host: monitoring.internal.domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: prometheus-grafana
                port:
                  number: 3000

问题现象

  • Ingress已成功绑定内部负载均衡IP 10.0.46.0
  • monitoring.internal.domain.com可正常解析到该IP
  • 访问时持续出现连接超时,即使通过server-snippet配置代理到Google也无改善
  • 将Ingress Controller日志级别调至--v=5后,未发现任何错误日志

排查步骤

1. 验证内部LB与Ingress Controller连通性

  • 从集群内节点(或同VPC测试机器)直接访问Ingress Controller Pod的IP+80端口,确认Pod本身可正常响应
  • 用curl -v http://10.0.46.0或telnet 10.0.46.0 80测试内部LB的80端口,验证LB是否正常转发流量到后端Pod

2. 检查Azure内部LB健康探针状态

  • 在Azure门户查看内部负载均衡器的健康探针状态,确认后端池中的Ingress Controller Pod处于健康状态
  • 核对探针路径是否为/healthz,与Helm安装参数一致,同时确认Pod的/healthz端点可返回200状态码

3. 校验Ingress Controller Service配置

  • 查看Service的详细配置:
    kubectl get svc internal-ingress-nginx-controller-internal -n internal-ingress-basic -o yaml
    
    确认spec.loadBalancerIP为10.0.46.0,且annotations包含service.beta.kubernetes.io/azure-load-balancer-internal: "true"
  • 检查externalTrafficPolicy=Local和internalTrafficPolicy=Cluster的配置是否匹配当前网络环境(若节点不在内部LB的后端池子网,可能导致流量转发失败)

4. 确认Ingress规则已被加载

  • 进入Ingress Controller Pod,查看Nginx配置文件中是否生成了Grafana的Ingress规则:
    kubectl exec -n internal-ingress-basic <ingress-controller-pod-name> -- cat /etc/nginx/nginx.conf | grep -A 20 "monitoring.internal.domain.com"
    
    若未找到对应配置,需检查ingressClassName是否与IngressClass资源名称nginx-internal完全匹配

5. 排查网络策略与防火墙规则

  • 检查monitoring namespace的网络策略,确认未阻止internal-ingress-basic namespace访问prometheus-grafana的3000端口
  • 检查Azure VNet的网络安全组(NSG)规则,确保允许测试机器到内部LB 80端口的流量,以及内部LB到Ingress Controller Pod所在节点80/443端口的流量

6. 测试Pod到后端服务的连通性

  • 进入Ingress Controller Pod,直接访问Grafana服务:
    kubectl exec -n internal-ingress-basic <ingress-controller-pod-name> -- curl -v http://prometheus-grafana.monitoring.svc.cluster.local:3000
    
    确认Pod可正常访问后端服务,排除服务本身或DNS解析问题

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:40