我正在使用裸机运行 kubernetes 集群,没有云提供商负载均衡器。
我正在寻找一种解决方案,将流量从入口控制器(nginx,尽管使用另一个实现可能是一个选项)发送到正在运行的 pod,如果有的话发送到本地节点上的 pod,如果有的话发送到同一 AZ 中的其他节点,并且仅作为备份发送到其他 AZ 中的 pod。
需求来自高流量但低 CPU 负载的服务,因此我尝试减少跨机器和跨 AZ 流量,即使这会导致流量不平衡。
只有两个级别(本地 AZ/远程 AZ)的解决方案是可以接受的,但 3 个级别会更好。
据我所知,在 nginx 目标列表中使用“backup”关键字是可行的,但是有没有办法自动使用这个关键字?
我考虑过:
internalTrafficPolicy: Local
似乎朝着我正在寻找的方向前进,但没有后备选项:/是否有“开箱即用”的解决方案,或者我应该构建一个自定义负载均衡器,在所有节点上运行它并通过具有
internalTrafficPolicy: Local
的服务定位?
这个有用吗?
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/node-selector: "failure-domain.beta.kubernetes.io/zone=$(AZ)"
spec:
# ...
apiVersion: v1
kind: Pod
metadata:
labels:
app: myapp
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- $(NODE_NAME)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backup-to-az: "us-west-2"
nginx.ingress.kubernetes.io/backup-to-uri: "/fallback"
spec:
# ...