【问题标题】:Ingress responding with 'default backend - 404' when using GKE使用 GKE 时,入口响应“默认后端 - 404”
【发布时间】:2017-11-04 21:04:22
【问题描述】:

在 GCP (1.6.4) 中使用最新的 Kubernetes 版本,我有以下 Ingress 定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myproject
  namespace: default
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - host: staging.myproject.io
    http:
      paths:
      - path: /poller
        backend:
          serviceName: poller
          servicePort: 8080

这是我的服务和部署:

apiVersion: v1
kind: Service
metadata:
  name: poller
  labels:
    app: poller
    tier: backend
    role: service
spec:
  type: NodePort
  selector:
    app: poller
    tier: backend
    role: service
  ports:
  - port: 8080
    targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: poller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: poller
        tier: backend
        role: service
    spec:
      containers:
      - name: poller
        image: gcr.io/myproject-1364/poller:latest
        imagePullPolicy: Always
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: staging
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 8080

在我的/etc/hosts 我有这样一行:

35.190.37.148 staging.myproject.io

但是,当在staging.myproject.io 上卷曲任何端点时,我得到default backend - 404

$ curl staging.myproject.io/poller/cache/status
default backend - 404

我在 Minikube 中的本地配置完全相同,唯一的区别是域 (dev.myproject.io),这就像一个魅力。

我已经阅读并尝试了几乎所有我能找到的东西,包括来自 hereherehere 的东西,但也许我只是遗漏了一些东西......有什么想法吗?

【问题讨论】:

  • 你能分享一下kubectl describe ingress的输出吗

标签: kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:

Ingress 确实需要 5-10 分钟才能在 GKE 中真正可用。同时,您可以看到状态码为 404、502 和 500 的响应。

这里有一个 ingress 教程:https://cloud.google.com/container-engine/docs/tutorials/http-balancer 我建议关注它。根据您粘贴的内容,我可以说以下内容:

  • 您使用 service.Type=NodePort,这是正确的。
  • 我不确定ingress.kubernetes.io/rewrite-target 注释,也许这就是问题所在。
  • 确保您的应用程序响应 200 OKGET / 请求。
  • 我也知道你curl http://<ip>/ 但你的入口规范只处理/poller 端点。所以在查询/ 时收到default backend - 404 响应是正常的。您没有在 Ingress 规范中为 / 路径配置任何后端。

【讨论】:

  • 我的问题是域底部缺少200 OK。我只是插入了一个空白的 200 响应,等待了几分钟,它按预期工作。谢谢。
【解决方案2】:

如果其他人遇到此问题,请检查标头 Host 是否正确并与预期域匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2020-01-04
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多