我有一个在集群中运行的应用程序,每个用户都被移交给一个单独的 pod。所有用户 pod 都在同一端口上运行,因此一个简单易用的 nginx 服务器就可以处理这个问题。
如果我们假设每个用户 pod 都是以 的等效项启动的,我们可以构建一个代理来从类似于 的 pod 的docker run -name foo-<UUID> 1234:1234 user-pod
URL 反弹,并从端口 80 映射到端口 1234:example.com/user/abcdef-123456-ghij
foo-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
一个稍微有效的概念?