gpt4 book ai didi

kubernetes - 使用 Kubernetes 基于 header 的路由

转载 作者:行者123 更新时间:2023-12-05 01:14:18 26 4
gpt4 key购买 nike

假设我们有一个服务复制到几个 pod。对服务的第一个请求应该随机(或通过负载平衡算法)路由到 pod,并且应该以某种方式保存映射“value_of_certain_header -> pod_location”,以便将下一个请求路由到特定的 pod。

Kubernetes 是否有任何 Ingress Controller 或其他方法可以通过请求 header 实现对特定 pod 的粘性?基本上我需要与 haproxy 对其粘性表所做的相同行为。

最佳答案

Kubernetes Ingress 在 OSI Layer7 上工作,因此它可以考虑 HTTP header ,但它只将流量转发到 Kubernetes 服务,而不是 Pod。

不幸的是,反过来,Kubernetes Services 无法根据 HTTP header 将流量传递到特定的 Pod,因为 Service 基本上是一组 iptables 规则,将流量传递到 Pod,只分析 OSI Layer4 上的数据(IP 地址,tcp/udp , 端口号)。

以kube-dns服务iptables规则为例:

# kube-dns service
-A KUBE-SERVICES -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
# random load balancing traffic between pods
-A KUBE-SVC-TCOU7JCQXEZGVUNU -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-AALXN3QQZ3U27IAI
-A KUBE-SVC-TCOU7JCQXEZGVUNU -j KUBE-SEP-WTX2W5TQOZGP42TM
# dns pod 1
-A KUBE-SEP-AALXN3QQZ3U27IAI -p udp -m udp -j DNAT --to-destination 10.244.0.16:53
# dns pod 2
-A KUBE-SEP-WTX2W5TQOZGP42TM -p udp -m udp -j DNAT --to-destination 10.244.0.17:53

我只能想象一种基于 HTTP header 将流量传送到特定 pod 的现实方法。

  1. 配置自定义 Ingress Controller ,该 Controller 可以为每个客户端 session 设置 header ,并使用 pod 的已知 DNS 名称作为后端目标点。我不能推荐特定的解决方案,所以在最坏的情况下,它可以使用 some examples 创建。 .

  2. Kubernetes StatefulSet 创建具有可预测名称的 Pod,例如 statefulset-name-0、statefulset-name-1 等。对应的 Headless Service (ClusterIP: None) 为每个 Pod 创建 DNS 名称。

例如,对于具有三个副本的 StatefulSet nginx-ss,将创建三个 Pod,Service nginx-ss 将为 Pod 创建三个 DNS A 记录:

nginx-ss-0   1/1     Running     10.244.3.72    
nginx-ss-1 1/1 Running 10.244.3.73
nginx-ss-2 1/1 Running 10.244.1.165

nginx-ss-0.nginx-ss.default.svc.cluster.local. 5 IN A 10.244.3.72
nginx-ss-1.nginx-ss.default.svc.cluster.local. 5 IN A 10.244.3.73
nginx-ss-2.nginx-ss.default.svc.cluster.local. 5 IN A 10.244.1.165

关于kubernetes - 使用 Kubernetes 基于 header 的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com