首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes中的Regex路径未作为regex位置在Nginx in控制器中创建

问kubernetes中的Regex路径未作为regex位置在Nginx in控制器中创建
EN

Stack Overflow用户
提问于 2020-08-17 16:06:57
回答 1查看 1.3K关注 0票数 0

我使用的是Nginx侵入控制器舵图0.6.0和nginx入口控制器标签1.8.0,kubernetes 1.15。

当我在我的宏中定义一个使用regex的路径时,它不能工作,因为它没有在Nginx控制器的配置文件位置部分被指定为regex。

我需要使用一个版本的nginx入口控制器,它还支持VirtualServer和VirtualServerRoutes。

代码语言:javascript
复制
kind: Ingress
metadata:
  name: test-ingress
  namespace: ingress-test
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: test.any-xyz.com
    http:
      paths:
      - path: /quack5/(.*)
        backend:
          serviceName: test
          servicePort: 80

当我应用它时,nginx入口控制器已经将位置设置为非正则表达式。

代码语言:javascript
复制
$ kubectl -n nginx-ingress-controller exec nginx-ingress-controller-nginx-ingress-79984b9747-8pl4w -- grep -R quack /etc/nginx/conf.d
$ /etc/nginx/conf.d/ingress-test-test-ingress.conf: location /quack5/(.*) {

我希望看到位置~* /quack5 5/(.*){

EN

回答 1

Stack Overflow用户

发布于 2020-08-18 09:20:24

尝试将nginx.ingress.kubernetes.io/rewrite-target注释添加到您的定义文件中。

删除nginx.ingress.kubernetes.io/use-regex: "true"注释。

编辑:

我认为问题可能在buildLocation函数(&& location.Rewrite.Target != path)中。如果路径和nginx.ingress.kubernetes.io/rewrite-target相等,则nginx位置不以~*作为前缀,而是作为regex处理。

代码语言:javascript
复制
    if len(location.Rewrite.Target) > 0 && location.Rewrite.Target != path {
        if path == slash {
            return fmt.Sprintf("~* %s", path)
        }
        // baseuri regex will parse basename from the given location
        baseuri := `(?<baseuri>.*)`
        if !strings.HasSuffix(path, slash) {
            // Not treat the slash after "location path" as a part of baseuri
            baseuri = fmt.Sprintf(`\/?%s`, baseuri)
        }
        return fmt.Sprintf(`~* ^%s%s`, path, baseuri)
    }

return path

我建议一个指令,指定spec.rules.http.paths.path应该作为regex位置结束,而不管nginx.ingress.kubernetes.io/rewrite-target可能是什么(即使它没有指定)。目前,将位置作为regex (添加~*)进行威胁的唯一方法是定义一个与nginx.ingress.kubernetes.io/rewrite-target不同的spec.rules.http.paths.path。

请看一看:入口处,入口路径匹配,路径不三位一体的正则表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63454599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档