Kubernetes 入口:如何设置优先于本地 AZ 的入口?

问题描述 投票:0回答:1

我正在使用裸机运行 kubernetes 集群,没有云提供商负载均衡器。

我正在寻找一种解决方案,将流量从入口控制器(nginx,尽管使用另一个实现可能是一个选项)发送到正在运行的 pod,如果有的话发送到本地节点上的 pod,如果有的话发送到同一 AZ 中的其他节点,并且仅作为备份发送到其他 AZ 中的 pod。

需求来自高流量但低 CPU 负载的服务,因此我尝试减少跨机器和跨 AZ 流量,即使这会导致流量不平衡。

只有两个级别(本地 AZ/远程 AZ)的解决方案是可以接受的,但 3 个级别会更好。

据我所知,在 nginx 目标列表中使用“backup”关键字是可行的,但是有没有办法自动使用这个关键字?

我考虑过:

  • 使用无头服务,但我不确定如何将所有目标提供给入口控制器。
  • 使用多项服务(每个 AZ 一个),但我没有设法为一条路径放置多个后端。
  • internalTrafficPolicy: Local
    似乎朝着我正在寻找的方向前进,但没有后备选项:/
  • Topological Aware Hints:听起来几乎是我要找的东西,但是特定于 AZ(错过了 2 个优先级的概念)。

是否有“开箱即用”的解决方案,或者我应该构建一个自定义负载均衡器,在所有节点上运行它并通过具有

internalTrafficPolicy: Local
的服务定位?

kubernetes-ingress
1个回答
0
投票

这个有用吗?

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:
  # ...
© www.soinside.com 2019 - 2024. All rights reserved.