当前位置: 首页 > 知识库问答 >
问题:

Kubernetes上NodePort与ClusterIP和Headless服务的性能考虑

萧萧迟
2023-03-14

我们在AWS EKS上运行两种类型的服务:

    null

共有1个答案

阮俊弼
2023-03-14

我在下面的标题中为我的答案提供了关于每种连接转发类型以及服务如何转发的更详细的信息。

如果我正确地理解了网络,无头服务似乎需要更少的跳数,因此会(稍微)更快?

不是更快。“额外跳”是数据包遍历本地查找表,它无论如何都要遍历这些表,所以没有明显的区别。目标吊舱仍将与实际网络跳数相同。

节点端口可能有从入口节点到运行POD的节点的额外网络跳转。假设ClusterIP范围被路由到正确的节点(并被路由

如果您碰巧使用了服务类型:LoadBalancer,可以通过将[.spec.externaltrafficPolicy设置为local][https://kubernetes.io/docs/concepts/services-networking/service/#aws-nlb-support]来改变这种行为,这意味着通信量将只定向到本地pod。

最后,从集群外部使用内部服务的最优雅/性能最好的方式是什么

与集群kube-proxy重新配置相比,config到达ALB需要一点延迟。像滚动部署这样的事情可能不会像pod消失后更新那样无缝。ALB最终有能力自己处理停电。

每个节点上都运行着一个kube-proxy进程,它管理如何以及在哪里放弃连接。kube-proxy有3个选项:Userspace proxy、iptables或ipvs。大多数集群将在iptables上,这将满足绝大多数用例。

转发是通过在userspace中运行的进程来终止和转发连接。很慢。你不太可能用它,不要用它。

- rr: round-robin
- lc: least connection (smallest number of open connections)
- dh: destination hashing
- sh: source hashing
- sed: shortest expected delay
- nq: never queue

需要理解的基本内容是“Service ClusterIP”是集群中的一个虚拟结构,它只作为流量应该去哪里的规则而存在。每个节点都维护所有clusterIP/port到podip/port的规则映射(通过kube-proxy)

ALB路由到任何节点,节点/节点端口将连接转发到处理服务的pod。这可能是一个远程吊舱,涉及通过“电线”发送流量。

ALB>wire>节点>内核转发到SVC(>wire如果远程节点)>Pod

ALB>导线>节点>豆荚

我将此作为后缀,如果将连接转发到VPC中的节点,请求可能需要<1ms的额外延迟。增强的网络实例在低端。可用性区域间的通信可能比AZ内的高一点。如果您碰巧有一个地理上分开的集群,那么控制通信流的重要性可能会增加。例如,拥有一个隧道式印花布网络,它实际上跨越了许多真实的网络。

 类似资料:
  • 我使用此处的说明在 VirtualBox 上创建了一个 3 节点 kubernetes 集群(1 个主 2 个工作线程)。我正在使用法兰绒作为覆盖网络。 我在安装过程中在主服务器上设置了< code > sysctl-w net . bridge . bridge-nf-call-iptables = 1 和< code > sysctl-w net . bridge . bridge-nf-ca

  • 1-我正在阅读文档,我对措辞有点困惑。上面写着: 集群IP:在集群内部IP上公开服务。选择此值将使服务只能从集群内访问。这是默认的ServiceType NodePort:在每个节点的IP上的一个静态端口(NodePort)上公开服务。节点端口服务将路由到的集群IP服务将自动创建。您可以通过请求从集群外部联系NodePort服务。 LoadBalancer:使用云提供商的负载均衡器对外公开服务。外

  • 我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号

  • 但我也想在集群外访问它。Description输出表示它使用端口30177上的NodePort公开。 但我无法在上访问它

  • 对你们中的一些人来说,这个问题可能不太合理。 我试图了解、和之间的区别,以及在什么时候通过一个示例使用这些区别。我想我对以下概念的理解是正确的,K8s由以下组件组成 节点-虚拟机或物理机器。运行kubectl和docker进程 吊舱--封装容器和卷(存储)的单元。如果一个pod包含多个容器,则共享卷可能是进程通信的方式 节点可以有一个或多个豆荚。每个吊舱都有自己的IP 集群-节点的副本。集群中的每

  • 我正在寻求帮助,以解决这个基本方案无法正常工作的问题: 在运行在MacBook上的VirtualBox VM上安装了kubeadm的三个节点: Virtualbox VM有2个适配器:1)主机专用2)NAT。来自客户计算机的节点IP是: 我将它们公开为ClusterIP服务: 现在问题来了: 我ssh到kubernetes-node1并使用集群IP卷曲服务: 如果我ssh到kubernetes-n