web-dev-qa-db-fra.com

Chemin d'accès non root de Kubernetes Ingress 404 introuvable

J'ai la configuration suivante qui fonctionne lorsque j'essaie <NodeIP>:30080

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: app-node
    spec:
      containers:
        - name: app
          image: myregistry.net/repo/app:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          env:
            - name: NODE_ENV
              value: production
---
apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  selector:
    name: app-node
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080
  type: NodePort

J'essaie d'utiliser un Ingress:

 apiVersion: extensions/v1beta1
 kind: Ingress
 metadata:
   name: nginx-ingress
 spec:
   rules:
   - Host: myhost.com
     http:
       paths:
       - path: /app
         backend:
           serviceName: app-service
           servicePort: 80

myhost.com fonctionne avec l'écran d'introduction nginx, mais myhost.com/app donne 404 Not Found. Où est le problème dans ma configuration?


MISE À JOUR:

   - path: /
     backend:
       serviceName: app-service
       servicePort: 80

Si je fais le chemin root, cela fonctionne, mais comment se fait-il /app non?

6
atkayla

Votre définition d'entrée crée des règles qui procurent du trafic à partir de {path} à la {backend.serviceName}{path}. Dans votre cas, je pense que la raison pour laquelle cela ne fonctionne pas est que /app est mandaté par app-service:80/app mais vous avez l'intention de diffuser du trafic sur le / racine. Essayez d'ajouter cette annotation à votre ressource d'entrée: nginx.ingress.kubernetes.io/rewrite-target: /

Source: https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite

10
brandon-barnett