【问题标题】:Path wildcard not working in kubernetes ingress路径通配符在 kubernetes 入口中不起作用
【发布时间】:2021-01-23 15:59:06
【问题描述】:

我已经安装了 Ingress 并将我的服务链接到它(usign metallb)。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
     nginx.ingress.kubernetes.io/rewrite-target: /
spec:
   rules:
   - http:
       paths:
       - path: /api/tasks/*
         # pathType: Exact
         backend:
           serviceName: tasks-service
           servicePort: 5004

事情是这样的,我在部署中将路径的默认前缀设置为

/api/tasks/

其中/api/tasks/tasks 显示服务已启动,而/api/tasks/tasks_count 提供总数。但是在我的 k8s 集群中,我无法重定向到服务中的不同路径。可能是什么问题?

【问题讨论】:

  • 据我所知,路径匹配是最长匹配获胜,所以* 隐含在每个path: 的末尾,并且在所有条件相同的情况下,几乎可以肯定你真的不想要rewrite-target: /,否则它会将/ 发送到后端服务,因为没有使用捕获组。您的意思是在集群之外,URI 是 /api/tasks/tasks,但 tasks-service 应该只接收 /tasks?如果是这样,你会想要path: /api/tasks/(.+),然后是rewrite-target: /$1

标签: nginx kubernetes kubernetes-ingress


【解决方案1】:

由于这是 Google 中通配符和前缀的结果,我将回答这个老问题。

您正在寻找的功能来自specifying the path type as pathType: Prefix

       paths:
       - path: /api/tasks
         pathType: Prefix
         backend:
           serviceName: tasks-service
           servicePort: 5004

重要的是,路径不包含通配符。事实上,如果您使用他们的 custom load balancer provisioners 获取 Ingress 资源,像 AWS 这样的云提供商会抛出错误:

prefix path shouldn't contain wildcards

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2019-01-16
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多