无效的主机 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 使用了正确的图像。然后再问他们是否同意。
使用 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 使用了正确的图像。然后再问他们是否同意。