【问题标题】:Website responding with "default backend - 404" on GKE - Kubernetes网站在 GKE - Kubernetes 上响应“默认后端 - 404”
【发布时间】:2020-04-16 21:09:02
【问题描述】:

在我们的一个域 https://www.secretwish.in 上 - 所有 404 流量都将流向默认的 GKE Ingress,而它必须路由到我的应用程序。

我的应用程序上的所有其他页面都工作正常,问题只是 404 页面,所有流量都在 gke 默认入口上。示例网址 - https://www.secretwish.in/hshshs

需要为此找到解决方案,以便所有流量都开始路由到我的应用程序

集群版本 - 1.14.10-gke.27

入口文件看起来像:-

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ans-commerce-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/tls-minimum-version: "1.0"
spec:
  tls:      
  - hosts:
    - www.secretwish.in
    secretName: www-secretwish-in-tls    

   - host: www.secretwish.in
     http:
       paths:
       - path: /
         backend:
           serviceName: ans-commerce
           servicePort: 80

【问题讨论】:

标签: kubernetes google-kubernetes-engine nginx-ingress


【解决方案1】:

GKE 文档中,您可以找到有关GKE Ingress 的信息,对于特定的path,您应该指定backend,否则您将收到问题404 default backend

您可以通过在您的 入口清单。任何与规则中的路径不匹配的请求 字段被发送到后端字段中指定的服务和端口。 ... 如果您不指定默认后端,GKE 会提供一个默认的 返回 404 的后端。

Default backend 将重定向所有找不到的请求 在任何spec.rules.http.paths.path

对于小测试,我使用了 2 个 deployments 和 2 个 services 表单 this gke example

选项 1 未配置 default end

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
      paths:
      - path: /world
        backend:
          serviceName: hello-world
          servicePort: 60000
      - path: /kube
        backend:
          serviceName: hello-kubernetes
          servicePort: 80

user@cloudshell:~ (prjoect-name)$ curl 35.244.197.176
default backend - 404
user@cloudshell:~ (prjoect-name)$ curl 35.244.197.176/kube
Hello Kubernetes!
user@cloudshell:~ (prjoect-name)$ curl 35.244.197.176/world
Hello, world!
Version: 2.0.0
Hostname: hello-world-deployment-7f67f479f5-vqzxg
user@cloudshell:~ (prjoect-name)$ curl 35.244.197.176/yvgbhuij
default backend - 404 

选项 2 使用默认后端

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  backend:
    serviceName: hello-world
    servicePort: 60000
  rules:
  - http:
      paths:
      - path: /world
        backend:
          serviceName: hello-world
          servicePort: 60000
      - path: /kube
        backend:
          serviceName: hello-kubernetes
          servicePort: 80

user@cloudshell:~ (prjoect-name)$ curl 35.244.186.95
Hello, world!
Version: 2.0.0
Hostname: hello-world-deployment-7f67f479f5-vqzxg
user@cloudshell:~ (prjoect-name)$ curl 35.244.186.95/hello
Hello, world!
Version: 2.0.0
Hostname: hello-world-deployment-7f67f479f5-kd6fg
user@cloudshell:~ (prjoect-name)$ curl 35.244.186.95/kube
Hello Kubernetes!
user@cloudshell:~ (prjoect-name)$ curl 35.244.186.95/fyvgbhujnkl
Hello, world!
Version: 2.0.0
Hostname: hello-world-deployment-7f67f479f5-vqzxg

请记住,GKE 上的 Ingress 需要大约 5-6 分钟才能开始正常工作

【讨论】:

    【解决方案2】:

    不确定我们的解决方案是否适用于您的情况。我们也遇到了类似的问题(不准确),我们不想更改部署的入口(即无法添加服务器别名)所以我们如何确保在浏览器/请求中输入的所有主机地址都转换为配置的内容在入口中。

    在本例中,我们将在本地 /etc/hosts 中创建条目

    <actual ingress IP> www.secretwish.in
    

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多