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

时间:2019-11-05 22:38:08

标签: azure kubernetes kubernetes-ingress

使用URL访问我的nodejs / react站点将显示“无效的主机头”。通过公用IP访问它会显示“默认后端-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: /$1
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

任何指导表示赞赏。

2 个答案:

答案 0 :(得分:1)

因此,我们假设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/.*的所有内容都将重定向到service-api。而您发送给/的任何内容都将发送给service-ui。

答案 1 :(得分:0)

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

简而言之,请检查端点和正在运行的服务是否已正确配置-对我来说,比其他任何人都值得上一课。我通过在本地卷曲该服务收到了响应,但这并不意味着它可以处理Ingress上的https请求,因为该服务的配置不正确。

另外,对我来说,另一课,请问开发人员是否将正确的映像用于构建。然后再问他们是否同意。