AKS Ingress-Nginx 入口控制器无法按主机路由

Mar*_*k W 2 nginx azure kubernetes

我正在 Azure Kubernetes 服务上配置 ingress-nginx 负载均衡器。我已经使用 Helm 安装了负载均衡器,并设置了入口。这是我遇到的行为:

  • 当我在入口配置的路径规则中包含主机时,我无法访问该主机 URL 上的服务。请求超时
  • 当我的路径规则中不包含主机时,我可以毫无问题地访问该主机 URL 上的服务
  • 无论主机是否包含在路径规则中,当我从集群中的任何 Pod 进行 CURL 时,我都可以成功访问主机 URL 上的服务。
  • Nslookup 成功解析我机器上的主机

我试图弄清楚为什么当主机包含在我的入口配置中时我无法访问我的服务。有任何想法吗?技术细节如下。

请注意,当前配置仅指向一项服务,但最终需要按主机进行过滤 - 我计划通过此负载均衡器运行具有不同域的多个服务。

入口控制器配置:

helm install --replace ingress-nginx ingress-nginx/ingress-nginx \
  --create-namespace \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=127.0.0.1 \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL \
  --set controller.service.loadBalancerIP=$IP \
Run Code Online (Sandbox Code Playgroud)

入口配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - my.host.com
    secretName: tls-secret
  rules:
  - host: my.host.com //Removing this item makes the service reachable
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: xrcfrontend
            port:
              number: 80
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的curl 命令。在 Pod 内部运行时它会返回正确的结果,在外部运行时会超时。

curl https://my.host.com --insecure
Run Code Online (Sandbox Code Playgroud)

小智 6

如果您使用的是 AKS v>=1.24,请尝试在 nginx 入口控制器安装期间或在 nginx 入口控制器服务中使用路径/healthz而不是127.0.0.1添加以下注释,并使用基于主机的路由和 nginx 入口路由 -

service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path"= /healthz

如果上述内容有帮助,那么 为什么它不早点与主机一起工作?

  • 因为 LB 的后端池由于入口控制器的运行状况探测路径错误而变得不健康。入口路由仅接受特定主机名的流量,因此入口控制器服务 (Azure LB) 的运行状况探测失败,因为 / 或 http 协议的 127.0.0.1 返回 404。

关于更改的 Github 讨论 - https://github.com/Azure/AKS/issues/2903#issuecomment-1115720970

有关安装的更多详细信息 - https://learn.microsoft.com/en-us/azure/aks/ingress-basic?tabs=azure-cli#basic-configuration