21

我有以下配置在我尝试时有效<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

我正在尝试使用入口:

 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适用于 nginx 介绍屏幕,但myhost.com/app提供404 Not Found. 我的设置问题出在哪里?


更新:

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

如果我做根路径它可以工作,但怎么会/app不呢?

4

2 回答 2

22

您的入口定义创建了代理从{path}到 的流量的规则{backend.serviceName}{path}。在您的情况下,我认为它不起作用的原因是/app被代理app-service:80/app但您打算在/根目录上提供流量。尝试将此注释添加到您的入口资源:nginx.ingress.kubernetes.io/rewrite-target: /

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

于 2018-08-26T18:20:55.927 回答
2

正如brandon-barnett 所指出的,问题来自路径,但在阅读了他分享的链接之后,布兰登大吃一惊,我意识到必须指定更具体的重写规则才能使其正常工作。就我而言

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: http-svc
            port: 
              number: 80

诀窍是在注释处使用 /$2 ,在路径处使用 (/|$)(.*) 。所以这个重写做了什么,它选择了一些东西之后的所有东西/并用它替换了 $2,所以:

  • rewrite.bar.com/something 重写为 http-svc:80/
  • rewrite.bar.com/something/ 重写为 http-svc:80/
  • rewrite.bar.com/something/new 重写为 http-svc:80/new
  • rewrite.bar.com/something/new/old 重写为 http-svc:80/new/old
于 2022-02-08T18:28:44.447 回答