k8s 中的高效网络 - 2 种入口策略

k8s 中的高效网络 - 2 种入口策略

现在我有

  1. 9 个 K8s 服务器(1 个主服务器、3 个常规工作服务器和 5 个静态内容工作服务器)的集群。
  2. Ingress 在 80 上作为节点端口运行(我知道这是不推荐的)。
  3. static.xxx.com DNS 指向静态内容工作者。

我遇到了集群内网络流量过大的问题。发生了什么?

  1. 请求需要静态内容。
  2. 它转到可以处理请求的工作程序,但是它仍然需要由入口引导,因此它会重定向到具有 nginx-ingres pod 的节点。(并且它并不总是在同一台服务器上,默认情况下它采用循环策略)
  3. 请求需要传输到入口并返回到任何静态内容 pod,从而导致额外的网络问题(我可能对跳转次数有误)

这会使集群中的链接稳定。我有几个想法 - 在集群中设置 2 个入口(一个用于常规内容,一个用于静态内容)并强制静态内容入口在同一台服务器上处理请求。- 如果可能,更改 nginx-ingress 策略以在该服务器上处理请求。

如果请求可以在该主机上得到处理,那么如何才能实现不跳转呢?

是否可以在自管理集群中设置 2 个入口?

是否有可能仅在某些主机上生成节点端口?

答案1

如果请求可以在该主机上得到处理,那么如何才能实现不跳转呢?

设置Ingress Controller 的 NodePort 服务中的注释Localservice.spec.externalTrafficPolicy。它将代理请求到本地端点,永远不会将流量转发到其他节点 = 发送到没有特定端点(Pod)的节点的数据包将被丢弃。阅读这里有关此原生 K8S 服务功能的更多信息。

是否可以在自管理集群中设置 2 个入口?

是的。您只需在 Ingress 资源定义中使用kubernetes.io/ingress.class注释(例如kubernetes.io/ingress.class: "nginx")来区分它们即可。
阅读这里有关在单个 K8S 集群中部署多个 Ingress 控制器的选项的更多信息。

是否有可能仅在某些主机上生成节点端口?

间接通过使用节点亲和性,强制在特定节点上调度/运行 Pod。借助您在第一个问题 ( service.spec.externalTrafficPolicy: Local) 中提出的功能,您将实现它。

相关内容