无效的主机 header 和带有 Kubernetes 入口控制器的默认后端 404

Invalid host header and default backend 404 with Kubernetes ingress controller

使用 URL 显示 "Invalid Host header" 访问我的 nodejs/react 站点。通过 public IP 访问它显示 "default backend - 404"。

我正在将 Kubernetes nginx 控制器与 Azure 云和负载均衡器一起使用。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myrule
  namespace: mynamespace
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-staging
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - mysite.uknorth.cloudapp.azure.com
    secretName: tls-secret
  rules:
  - host: mysite.uknorth.cloudapp.azure.com
    http:
      paths:
      - backend:
          serviceName: service-ui
          servicePort: 8080
        path: /
      - backend:
          serviceName: service-api
          servicePort: 8999
        path: /api

感谢任何指导。

所以我们假设 SSL 部分没问题 (link),因为您可以访问 nginx 入口控制器。

您的重写注释不是您所需要的。看看这些规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myrule
  namespace: mynamespace
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-staging
spec:
  tls:
  - hosts:
    - mysite.uknorth.cloudapp.azure.com
    secretName: tls-secret
  rules:
  - host: mysite.uknorth.cloudapp.azure.com
    http:
      paths:
      - backend:
          serviceName: service-ui
          servicePort: 8080
        path: /
      - backend:
          serviceName: service-api
          servicePort: 8999
        path: /api

无论您发送到 /api/.* 的什么都会被重定向到服务-api。你发送到 / 的任何内容都将发送到 service-ui.

感谢您的反馈。事实证明问题不在于上面的入口规则。 service-ui 是 运行 命令参数不正确,因此未确认请求。我错过了服务-api 正确响应的事实。

简而言之,检查端点和 运行 服务是否正确配置 - 对我来说比任何人都重要。我通过本地卷曲服务收到了响应,但这并不意味着它可以通过入口处理 https 请求,因为服务配置不正确。

此外,给我的另一个教训是,询问开发人员是否为 build 使用了正确的图像。然后再问他们是否同意。