ClusterIP:服务可由集群中的Pod/Service访问
如果我在default命名空间中创建类型为ClusterIP的服务myservice,则将创建以下可预测静态DNS地址的服务:
myservice.default.svc.cluster.local(或只是myservice.default,或在默认命名空间中的Pod上使用“myservice”也可以)
该DNS名称只能由集群内的Pod和Service解析。
NodePort:客户端可以通过LAN访问相同的网络并且可以ping到K8s主机节点(以及集群中的Pod/Service)访问服务(注意安全性,您的k8s主机节点应位于私有子网中,因此互联网上的客户端将无法访问此服务)
如果我在3个节点的Kubernetes集群上创建mynamespace命名空间中类型为NodePort的服务mynodeportservice,则将创建一个类型为ClusterIP的服务,并且可以通过以下可预测的静态DNS地址在集群内部的客户端中访问:
mynodeportservice.mynamespace.svc.cluster.local(或只是mynodeportservice.mynamespace)
对于每个mynodeportservice监听的端口,将在30000-32767范围内随机选择一个nodeport。因此,位于集群外部的外部客户端可以访问存在于集群内部的该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 Host Node都监听NodePort),Kubeproxy将把请求转发到mynodeportservice的端口80。
LoadBalancer: 服务可被连接到互联网的所有人使用*(常见架构是L4 LB在DMZ中公开访问互联网,或同时给其私有和公共IP,而k8s主机节点位于私有子网中)
(注意:这是唯一一种不适用于所有Kubernetes实现的服务类型,例如裸机Kubernetes,仅当Kubernetes具有云提供商的集成时才起作用。)
如果您创建了mylbservice,则会生成一个L4 LB VM(还将隐式生成一个群集IP服务和NodePort服务)。这次我们的NodePort是30222。想法是L4 LB将具有公共IP 1.2.3.4,并且它将负载平衡并转发流量到具有私有IP地址的3个K8s主机节点。(10.10.10.1:30222、10.10.10.2:30222、10.10.10.3:30222),然后Kube Proxy将其转发到存在于集群内部的ClusterIP类型的服务。
您还问道:
NodePort服务类型是否仍在使用ClusterIP?是的*
那么NodeIP实际上是在运行kubectl get nodes时找到的IP吗?回答是肯定的。
让我们来比较一下基础知识:
一个容器位于一个Pod中,一个Pod位于一个ReplicaSet中,一个ReplicaSet位于一个Deployment中。
类似地:
ClusterIP服务是NodePort服务的一部分。NodePort服务是负载均衡器服务的一部分。
在你展示的那张图中,客户端将是集群中一个Pod内的容器。