【问题标题】:Ingress rewrite-target for inner url内部 url 的入口重写目标
【发布时间】:2020-04-19 21:45:13
【问题描述】:

我有一个带有 2 个应用程序的入口控制器,一个只是一个 hello world,另一个带有一个真正的微服务应用程序。 现在当我卷曲我的应用程序时(入口似乎工作正常) curl -v /test --> 它给了 hello-world curl -v /clus -->它重定向到我的应用程序(因为应用程序是一个带有资源/静态/index.html的springboot,它在curl时被渲染。 它 curl -v /clus -->index.html -->预期但如果我想得到 curl -v /v1/heart-beat -->它仍然给我 index.html 知道为什么会这样吗? 我认为罪魁祸首是我的 ingress.yaml 重写目标,它总是重定向到根目录?知道如何解决吗?


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /

spec:
  rules:
  - http:
      paths:
        - path: /clus
          backend:
            serviceName: clus-dev-svc
            servicePort: 80
        - path: /test
          backend:
            serviceName: hello-service
            servicePort: 80

【问题讨论】:

  • 在您的入口中,您定义了路径 /clus。那么,如果你执行 curl -v /clus/v1/heart-beat,你会得到什么
  • @hoque:不,我的意思是如果路径以嵌套方式进行,集群就是路径,可以说您的应用程序具有像 /cluster/in/v1/version 这样的内部路径。这意味着需要调用相同的服务,但结果集不同。
  • 您的 Kubernetes 集群是如何创建的?是云配置的吗?是 GKE、EKS、AKS 吗?你的 Kubernetes 版本是多少?
  • 你能详细说明/v1/heart-beat到底是什么吗?
  • 集群是在 aws ec2 机器中使用 kops 配置的

标签: kubernetes kubectl kubernetes-ingress nginx-ingress


【解决方案1】:

经过长时间的搜索和研发终于找到了答案。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1


spec:
  rules:
  - http:
      paths:
        - path: /clus/(.+)
          backend:
            serviceName: clus-service
            servicePort: 80
        - path: /test
          backend:
            serviceName: hello-service
            servicePort: 80

一开始想加正则没用,最后还是用了

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2020-12-04
    • 2018-09-05
    • 2020-08-17
    • 2021-04-05
    • 2020-10-13
    • 2020-07-25
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多