web-dev-qa-db-fra.com

Ingress répond avec 'backend par défaut - 404' lors de l'utilisation de GKE

En utilisant la dernière version de Kubernetes dans GCP (1.6.4), J'ai la définition Ingress suivante:

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

Voici mon service et mon déploiement:

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

Dans mon /etc/hosts J'ai une ligne comme:

35.190.37.148 staging.myproject.io

Cependant, je reçois default backend - 404 lors du curling d'un point de terminaison sur staging.myproject.io:

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

J'ai exactement la même configuration fonctionnant localement à l'intérieur de Minikube, avec la seule différence étant le domaine (dev.myproject.io), et cela fonctionne comme un charme.

J'ai lu et essayé à peu près tout ce que j'ai pu trouver, y compris des trucs de ici et ici et ici , mais peut-être que je manque juste quelque chose ... des idées?

12
cgf

Il faut 5 à 10 minutes pour qu'une entrée devienne réellement utilisable dans GKE. En attendant, vous pouvez voir les réponses avec les codes d'état 404, 502 et 500.

Il y a un tutoriel d'entrée ici: https://cloud.google.com/container-engine/docs/tutorials/http-balancer Je recommande de le suivre. Sur la base de ce que vous avez collé, je peux dire ce qui suit:

  • Vous utilisez service.Type = NodePort, ce qui est correct.
  • Je ne suis pas sûr de la ingress.kubernetes.io/rewrite-target annotation, c'est peut-être le problème.
  • Assurez-vous que votre application répond 200 OK à GET / demande.
  • Je me rends également compte que vous curl http://<ip>/ mais votre spécification Ingress ne gère que /poller point final. Il est donc normal que vous obteniez default backend - 404 réponse lors de l'interrogation /. Vous n'avez configuré aucun backend pour / chemin dans votre spécification Ingress.
9
AhmetB - Google