首页 > 解决方案 > 入口路径重定向,掌舵图

问题描述

我有一个在 kubernetes 中运行的服务,并且有一个路径前缀/api。现在我想使用 Ingress 通过主机地址访问它,example.com/service1/因为我有多个服务。但问题是 ingressservice1/使用该前缀重定向来自 path 的所有请求service1/,但我希望它example.com/service1/使用 just 重定向到我的服务/(所以如果我请求example.com/service1/api它将重定向到使用 just 的服务/api)。我可以实现这样的目标吗?我正在服务的掌舵图中编写入口配置。服务图表文件中的入口配置values.yaml如下所示:

...
ingress:
  enabled: true
  className: ""
  annotations: {}
  # kubernetes.io/ingress.class: nginx // this comment was created when generating helm chart
  hosts:
    - host: example.com
      paths:
        - path: /service1(/|$)(.*)
          pathType: ImplementationSpecific
          backend:
            serviceName: $name
            servicePort: http
  tls: []
  ...

ingress.yaml内部文件夹是我为服务创建图表时templates/生成的默认文件。helm它只是使用 from 的值values.yaml来配置入口。我没有找到任何东西,只有这个问题基本上是说我需要在service1/我的服务中添加前缀或者只是/api在 Ingress 配置中使用。但是有适合我需求的解决方案吗?

标签: kuberneteskubernetes-helmkubernetes-ingressnginx-ingress

解决方案


这是为更好的可见性而发布的社区 wiki 答案。随意扩展它。

根据评论中提供的解决方案(Medium帖子中的方法 1 示例 2 ),values.yamlIngress 的可能文件可能如下所示。

...
ingress:
  enabled: true
  className: ""
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: http://example.com/$2 
  hosts:
    - host: example.com
      paths:
        - path: /service1(/|$)(.*)
          backend:
            serviceName: $name
            servicePort: http
  tls: []
  ...

推荐阅读