【问题标题】:Kubernetes Ingress non-root path 404 Not FoundKubernetes Ingress 非根路径 404 Not Found
【发布时间】:2019-01-31 23:10:25
【问题描述】:

当我尝试<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

我正在尝试使用 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 与 nginx 介绍屏幕一起使用,但 myhost.com/app 提供 404 Not Found。我的设置问题出在哪里?


更新:

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

如果我做根路径,它可以工作,但/app 怎么没有?

【问题讨论】:

  • root(/) 可能指向默认后端,即 nginx 欢迎页面,但 /app 可能没有正确配置,这就是为什么在将请求路由到它时会给出 404。尝试其他 url,例如 myhost .com/app1 看看是否出现了 nginx 页面。

标签: nginx kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

您的入口定义创建了将流量从{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

【讨论】:

  • 如果我理解正确,是的,我想要myhost.com/app/foo => app-service:80/foo,而不是myhost.com/app/foo => app-service:80/app/foo。这就解释了为什么我的配置是错误的,以及为什么只有根配置 (path: /) 有效,但 nginx.ingress.kubernetes.io/rewrite-target: / 似乎没有正确指出它。我也试过ingress.kubernetes.io/rewrite-target: /,但没有运气。
  • 你是如何安装nginx-ingress的?你有清单或说明吗?
  • console.bluemix.net/docs/containers/cs_ingress.html#ingress(第 3 步:创建 Ingress 资源)
  • 确实如此。该注释特定于 nginx,但您的入口控制器由 IBM 管理(根据文档)。如果您是installing a custom nginx-ingress controller,那么该注释可能会起作用。在您的情况下,请查看annotation options。似乎rewrite-path 应该这样做而不是nginx.ingress.kubernetes.io/rewrite-target
  • 我也尝试了ingress.bluemix.net/rewrite-path: /,但它不起作用,而且功能似乎与rewrite-target 不同。令人困惑。也许我应该咨询他们的支持,因为这个问题似乎是他们作为提供商所特有的。不过,感谢您为我指明正确方向的帮助,谢谢!
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2019-01-27
  • 2019-05-03
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多