我有一个在内存数据库中使用的应用程序。我使用带有 3 个副本的 Pod 创建了 statefulset。使用 PVC 存储数据库相关文件。
我使用了一个 Loabalancer 来公开 statefulset。
因此,当流量每次转发到不同的 Pod 时都会遇到负载均衡器。
无论如何我可以根据某些条件控制对 Pod 的负载平衡(比如客户端 IP 是 X 转到 pod Y)吗?
我有一个在内存数据库中使用的应用程序。我使用带有 3 个副本的 Pod 创建了 statefulset。使用 PVC 存储数据库相关文件。
我使用了一个 Loabalancer 来公开 statefulset。
因此,当流量每次转发到不同的 Pod 时都会遇到负载均衡器。
无论如何我可以根据某些条件控制对 Pod 的负载平衡(比如客户端 IP 是 X 转到 pod Y)吗?
事实上,你有一个领导者/跟随者拓扑,将流量引导到一个所说的 nome(主节点)的请求是有缺陷的,原因有几个:
无论如何,如果这是您想要的,也许您想阅读gateways in istio
可以在这里找到的内容
您可以使用 K8s 入口资源来解决这种情况。我认为您正在尝试做的是基于主机的路由。使用标签将您的 pod 放在不同的服务后面。在您的情况下,服务 1 后面 1 - 100,服务 2 后面 100 - 200,依此类推。然后创建一个入口资源,以根据主机或路径将传入流量重定向到不同的服务,无论您需要什么。您可能必须使用 Nginx 之类的代理才能使其在公共云平台上运行。YAML 清单将是这样的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: host1.com
http:
paths:
- path: /web1
backend:
serviceName: service1
servicePort: 443
- path: /api/v1/a
backend:
serviceName: service2
servicePort: 80
- path: /api/v1/b
backend:
serviceName: service3
servicePort: 80
- host: host2.com
http:
paths:
- path: /web2
backend:
serviceName: service4
servicePort: 443
- path: /api/v2/a
backend:
serviceName: service5
servicePort: 80