【发布时间】:2020-12-03 12:48:36
【问题描述】:
我已经在自托管的 Kubernetes 集群中设置和配置了 Service Topology 功能。当我使用 ClusterIP 或 NodePort 将流量直接路由到配置的服务时,一切都按预期工作。尊重拓扑键,选择正确的节点路由到 pod 等。
但是,当使用映射到服务的入口时(尝试使用 haproxy 和 traefik 入口),拓扑感知路由将被忽略。我不确定这是否只是不受支持、错误或我缺少的某些配置。以下是我尝试过的方法。
1r) 客户端 curl -> 拓扑键控服务 -> 部署 -> Pod
结果:按预期工作。
2r)busybox pod curl -> 拓扑键控服务 -> 部署 -> Pod
结果:按预期工作。
3r) 客户端 curl -> Traefik Service Ingress 的路由 clusterIP -> Topology Keyed Service -> Deployment -> Pod
结果:所选节点 pod 是随机的,并且与节点上的拓扑键不对齐。
4r) client curl -> Host Networked Haproxy Ingress DaemonSet -> Topology Keyed Service -> Deployment -> Pod
结果:所选节点 pod 是随机的,并且与节点上的拓扑键不对齐。
据我所知,haproxy 和 traefik 入口似乎都将流量直接路由到 pod 并绕过服务。
我已经通过如下配置拓扑键对此进行了测试(没有 * catch-all,如果不匹配应该会失败):
topologyKeys:
- "kubernetes.io/hostname"
- "topology.kubernetes.io/zone"
- "topology.kubernetes.io/region"
在使用 ingresses 进行测试时,服务将始终响应,但仍会在副本集中随机选择一个 pod。在使用服务进行测试时,如果没有 pod 满足接收入站请求的节点上的拓扑标签(如预期的那样),它将失败。
我已经查看了所有文档,并且已经花了很多时间在谷歌上搜索和查看 Github 问题,但找不到任何提到此作为问题或不受支持的配置等的内容。
-- 编辑--
感谢@Rico,我能够使用nginx 和haproxy-ingress 在 Ingresses 上进行这项工作。该修复需要在入口上添加以下注释。
nginx:
annotations:
nginx.ingress.kubernetes.io/service-upstream: "true"
代理入口:
annotations:
ingress.kubernetes.io/service-upstream: "true"
【问题讨论】:
标签: kubernetes kubernetes-ingress