6.4.1 Service类型

Kubernetes的Service共有四种类型:ClusterIP、NodePort、LoadBalancer和ExternalName。

  • ClusterIP:通过集群内部IP地址暴露服务,此地址仅在集群内部可达,而无法被集群外部的客户端访问,如图6-8所示。此为默认的Service类型。
  • NodePort:这种类型建立在ClusterIP类型之上,其在每个节点的IP地址的某静态端口(NodePort)暴露服务,因此,它依然会为Service分配集群IP地址,并将此作为NodePort的路由目标。简单来说,NodePort类型就是在工作节点的IP地址上选择一个端口用于将集群外部的用户请求转发至目标Service的ClusterIP和Port,因此,这种类型的Service即可如ClusterIP一样受到集群内部客户端Pod的访问,也会受到集群外部客户端通过套接字:进行的请求。
NodePort Service 类型
图 1.8.4.1 - NodePort Service 类型
  • LoadBalancer:这种类型构建在NodePort类型之上,其通过cloud provider提供的负载均衡器将服务暴露到集群外部,因此,LoadBalancer一样具有NodePort和ClusterIP。简而言之,一个LoadBalancer类型的Service会指向关联至Kubernetes集群外部的、切实存在的某个负载均衡设备,该设备通过工作节点之上的NodePort向集群内部发送请求流量,如图6-9所示。例如Amazon云计算环境中的ELB实例即为此类的负载均衡设备。此类型的优势在于,它能够把来自集群外部客户端的请求调度至所有节点(或部分节点)的NodePort之上,而不是依赖于客户端自行决定连接至哪个节点,从而避免了因客户端指定的节点故障而导致的服务不可用。
  • ExternalName:其通过将Service映射至由externalName字段的内容指定的主机名来暴露服务,此主机名需要被DNS服务解析至CNAME类型的记录。换言之,此类型并非定义由Kubernetes集群提供的服务,而是把集群外部的某服务以DNS CNAME记录的方式映射到集群内,从而让集群内的Pod资源能够访问外部的Service的一种实现方式,如图6-10所示。因此,这种类型的Service没有ClusterIP和NodePort,也没有标签选择器用于选择Pod资源,因此也不会有Enpoints存在。

前面章节中创建的 myapp-svc 即为默认的ClusterIP类型Service资源,它仅能接受来自于集群中的Pod对象中的客户端程序的访问请求。如若需要将Service资源发布至网络外部,应该将其配置为NodePort或LoadBalancer类型,而若要把外部的服务发布于集群内容供Pod对象使用,则需要定义一个ExternalName类型的Service资源。如若使用kube-dns,那么这种类型的实现将依赖于1.7及其以上版本的Kubernetes版本。

LoadBalancer 类型的 Service
图 1.8.4.1 - LoadBalancer 类型的 Service
ExternalName类型的Service
图 1.8.4.1 - ExternalName类型的Service

results matching ""

    No results matching ""