在使用GKE时,Ingress使用'default backend - 404'进行响应

cgf*_*cgf 12 google-cloud-platform kubernetes google-kubernetes-engine

使用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
Run Code Online (Sandbox Code Playgroud)

这是我的服务和部署:

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
Run Code Online (Sandbox Code Playgroud)

在我的/etc/hosts我有一个像:

35.190.37.148 staging.myproject.io
Run Code Online (Sandbox Code Playgroud)

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

$ curl staging.myproject.io/poller/cache/status
default backend - 404
Run Code Online (Sandbox Code Playgroud)

我有完全相同的配置在Minikube内部工作,唯一的区别是域(dev.myproject.io),它就像一个魅力.

我已经阅读并尝试了几乎所有我能找到的东西,包括来自这里,这里这里的东西,但也许我只是缺少一些东西......任何想法?

Ahm*_*gle 10

Ingress确实可以在GKE中使用5-10分钟.同时,您可以看到状态代码为404,502和500的回复.

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

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

  • 我在这个问题上的问题是在域的基础上缺少"200 OK".我只是插了一个空白的200响应,等了几分钟,它就像预期的那样工作.谢谢. (2认同)