将有状态集中的每个 Pod 暴露到互联网,无需自定义代理

Ril*_*ark 5 kubernetes google-kubernetes-engine kubernetes-ingress

我有一个带有 pods 等的 StatefulSet server-0server-1我想将它们直接公开到互联网,其 URL 类似于 server-0.mydomain.com 或 mydomain.com/server-0。

我希望能够扩展 StatefulSet 并自动能够从互联网访问新的 Pod。例如,如果我将其扩展为包含 a server-2,我希望 mydomain.com/server-2 在新 Pod 准备就绪时将请求路由到新 Pod。我不想还扩展其他一些资源或创建另一个服务来实现该效果。

我可以使用自定义代理服务来实现此目的,该服务仅检查请求路径并在内部转发到正确的 Pod,但这似乎容易出错且浪费。

有没有办法让 Ingress 自动路由到 StatefulSet 中的不同 pod,或者使用其他一些内置技术来避免自定义代码?

sur*_*ren 3

我认为你做不到。作为同一个 statefulSet 的一部分,直到 pod-x 的所有 pod 都以服务为目标。由于您无法定义哪个 pod 将收到请求,因此您无法强制将“pod-1.yourapp.com”或“yourapp.com/pod-1”发送到 pod-1。它将被发送到服务,服务可能会将其发送到 pod-4。

即使可以,您也需要动态更新入口规则,这很容易导致几分钟的停机时间。

对于自定义代理,我认为也是不可能的。请注意,它需要基本上替换 Pod 背后的服务。如果您的入口控制器知道它需要将数据包传递给服务,那么现在您必须强制它传递给您的代理。但如何呢?