0%

Kubernetes的各种Service类型(ClusterIP,NodePort和LoadBalancer)有什么区别

问题描述

1 - 我正在阅读文档,我对措辞有点困惑。它说:

ClusterIP:在集群内部IP上公开服务。选择此值使服务只能从群集中访问。这是默认的ServiceType

NodePort:在每个Node的IP上公开静态端口(NodePort)服务。将自动创建NodePort服务到ClusterIP服务的路由。您可以通过请求来从群集外部请求NodePort服务。

LoadBalancer:使用云提供商的负载均衡器在外部公开服务。将自动创建外部负载均衡器到NodePort和ClusterIP服务的路由。

NodePort服务类型是否仍然使用ClusterIP,而只是在不同的端口,该端口对外部客户端开放?那么在这种情况下,相同?

或者,NodeIP是否是运行kubectl get nodes得到的IP,而不是用于ClusterIP的虚拟IP?

2 - 同样在以下链接的图表中:

http://kubernetes.io/images/docs/services-iptables-overview.svg

客户端在节点内是否有任何特殊原因?我认为在ClusterIP服务类型的情况下,它需要在Cluster内。如果为NodePort绘制一个类似的图表,那么把客户端画在Node和Cluster之外是否有效,或者我是否忽略了什么?

高票回答

ClusterIP公开以下内容:

  • spec.clusterIp:spec.ports[*].port

您只能在群集内访问此服务。可以从spec.clusterIp端口访问它。如果设置了spec.ports [*].targetPort,它将从端口路由到targetPort。调用kubectl get services时获得的CLUSTER-IP是内部在集群内分配给此服务的IP。

NodePort公开以下内容:

  • <NodeIP>:spec.ports[*].nodePort
  • spec.clusterIp:spec.ports[*].port

如果通过nodePort的方式从节点的外部IP访问此服务,它会将请求路由到spec.clusterIp:spec.ports[*].port,然后将其路由到spec.ports [*].targetPort,如果设置。也可以使用与ClusterIP相同的方式访问此服务。

您的NodeIP是节点的外部IP地址。您无法从:spec.ports [*].nodePort访问您的服务。

LoadBalancer公开以下内容:

  • spec.loadBalancerIp:spec.ports[*].port
  • <NodeIP>:spec.ports[*].nodePort
  • spec.clusterIp:spec.ports[*].port

您可以从负载均衡器的IP地址访问此服务,该IP地址将您的请求路由到nodePort,而nodePort又将请求路由到clusterIP端口。您可以像访问NodePort或ClusterIP服务一样访问此服务。

原文链接

What’s the difference between ClusterIP, NodePort and LoadBalancer service types in Kubernetes