kubernetes 中的路由...nginx 代理传递,但带有命名端口

kubernetes 中的路由...nginx 代理传递,但带有命名端口

我有一个在集群中运行的应用程序,每个用户都被移交给一个单独的 pod。所有用户 pod 都在同一端口上运行,因此一个简单易用的 nginx 服务器就可以处理这个问题。

如果我们假设每个用户 pod 都是以 的等效项启动的,我们可以构建一个代理来从类似于 的 pod 的docker run -name foo-<UUID> 1234:1234 user-podURL 反弹,并从端口 80 映射到端口 1234:example.com/user/abcdef-123456-ghijfoo-abcdef-123456-ghij

location ~ /user/([a-z0-9]+) {
    << lots of stuff cut >>
    proxy_pass http://foo-$1.${POD_NAMESPACE}.svc.cluster.local:1234;
    proxy_set_header Host foo-$1:1234;
  }

希望添加一些新的用户 pod,用于暴露不同的端口....而我的 nginx 服务器无法做到这一点。

现在我知道我可以姓名pod 中暴露的端口 [ref: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports],并通过名称引用它们在集群配置中- 这样我就可以为不同的用户容器创建定义,并且姓名ports尽管值不同,但是一样的……containerPort并且我相信服务定义会根据需要愉快地映射。

当然,当前运行在自己的 pod 中的 nginx 服务器对这些一无所知名称- 如果您尝试使用它们,则会抱怨端口号无效。

我的问题是关于直接切换到 nginx-ingress 控制器(而不是让 ingress 将用户发送到 pod 进行路由)——nginx-ingress 可以path处理正则表达式就像其托管的兄弟一样?

spec:
  rules:
    - http:
        paths:
          - path: "/user/([a-z0-9]+)"
            pathType: Prefix
            backend:
              service:
                name: foo-$1
                port:
                  name: user-pod-exposed

一个稍微有效的概念?

相关内容