ClusterIP:群集中的pod /服务可以访问服务。
如果在默认类型的名称空间中创建了名为myservice的服务:ClusterIP,则将为该服务创建以下可预测的静态DNS地址:
myservice.default.svc.cluster.local(或仅是myservice.default,或者通过默认名称空间中的Pod可以使用“ myservice”)
而且该DNS名称只能由群集中的Pod和服务来解析。
NodePort:服务可在同一局域网上的客户端访问,而客户端可以ping通K8s主机节点(以及集群中的Pod /服务)(为安全起见,k8s主机节点应位于私有子网中,因此赢得了Internet上的客户端)无法获得此服务)
如果我在mynamespace名称空间类型中创建了一个名为mynodeportservice的服务,该名称空间类型为:3 Node Kubernetes Cluster上的NodePort。然后将创建一个类型为Service的服务:ClusterIP,群集内的客户端可以通过以下可预测的静态DNS地址访问该服务:
mynodeportservice.mynamespace.svc.cluster.local(或仅mynodeportservice.mynamespace)
对于mynodeportservice在节点端口上侦听的每个端口,范围为30000-32767将被随机选择。这样,群集外部的外部客户端可以访问群集内部存在的ClusterIP服务。假设我们的3个K8s主机节点具有IP 10.10.10.1、10.10.10.2、10.10.10.3,Kubernetes服务正在侦听端口80,并且随机选择的Nodeport是31852。
集群外部的客户端可以访问10.10.10.1:31852、10.10.10.2:31852或10.10.10.3:31852(因为每个Kubernetes主机节点都在侦听NodePort),Kubeproxy会将请求转发到mynodeportservice的端口80。
LoadBalancer:连接到Internet的每个人都可以访问服务*(通用架构是L4 LB可通过将其放置在DMZ中或为它提供专用IP和公用IP并将k8s主机节点放在专用子网中在Internet上公开访问)
(注意:这是唯一在100%的Kubernetes实现中不起作用的服务类型,例如裸机Kubernetes,当Kubernetes具有云提供商集成时才有效。)
如果使用mylbservice,则将生成L4 LB VM(群集IP服务和NodePort服务也将被隐式生成)。这次,我们的NodePort为30222。我们的想法是L4 LB将具有1.2.3.4的公共IP,它将负载均衡并将流量转发到具有私有IP地址的3个K8s主机节点。(10.10.10.1:30222、10.10.10.2:30222、10.10.10.3:30222),然后Kube Proxy会将其转发到集群中存在的ClusterIP类型的服务。
您还询问:NodePort服务类型是否仍使用ClusterIP?是*
还是运行kubectl get节点时找到的NodeIP实际上是IP?也可以*
让我们在基本原理之间画一个平行线:
一个容器位于容器内。吊舱位于副本集中。副本集位于部署内部。
同样,
ClusterIP服务是NodePort服务的一部分。NodePort服务是负载均衡器服务的一部分。
在您显示的该图中,客户端将是群集内的一个pod。
externalIPs
改变方程式?具体来说,可以为-type服务分配一个externalIPs
数组ClusterIP
,然后该服务也可以在外部IP上访问?您何时会在NodePort上选择它?