K8SService

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述K8SService相关的知识,希望能为你提供帮助。
(一)、概述通过以前的学习,我们已经能够通过ReplicaSet来创建一组Pod来提供具有高可用性的服务。虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
因此,Kubernetes中的Service对象就是解决以上问题的实现服务发现核心关键。
(二). Service的创建Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
Service同其他Kubernetes对象一样,也是通过yaml或json文件进行定义。此外,它和其他Controller对象一样,通过Label Selector来确定一个Service将要使用哪些Pod。一个简单的Service定义如下:

apiVersion: v1 kind: Service metadata: labels: run: nginx name: nginx-service spec: ports: - port: 80 protocol: TCP targetPort: 81 selector: app: nginx type: ClusterIP

下面简单分析一下上面的Service描述文件:
  • 通过spec.selector字段确定这个Service将要使用哪些Label。在本例中,这个名为nginx的Service,将会管理所有具有app: nginxLabel的Pod。
  • spec.ports.port: 80表明此Service将会监听80端口,并将所有监听到的请求转发给其管理的Pod。spec.ports.targetPort: 81表明此Service监听到的80端口的请求都会被转发给其管理的Pod的81端口,此字段可以省略,省略后其值会被设置为spec.ports.port的值。
  • 【K8SService】type: ClusterIP表面此Service的type,会在下文中讲到。
    (三)、Service的类型在Serive定义时,我们需要指定spec.type字段,这个字段拥有四个选项:

  • ClusterIP。默认值。给这个Service分配一个Cluster IP,它是Kubernetes系统自动分配的虚拟IP,因此只能在集群内部访问。
  • NodePort。将Service通过指定的Node上的端口暴露给外部。通过此方法,访问任意一个NodeIP:nodePort都将路由到ClusterIP,从而成功获得该服务。
  • LoadBalancer。在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均衡器,并将请求转发到 < NodeIP> :NodePort。此模式只能在云服务器(AWS等)上使用。
  • ExternalName。将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。需要 kube-dns 版本在 1.7 以上。
    ### 3.1、NodePort类型 在定义Service时指定spec.type=NodePort,并指定spec.ports.nodePort的值,Kubernetes就会在集群中的每一个Node上打开你定义的这个端口,这样,就能够从外部通过任意一个NodeIP:nodePort访问到这个Service了。 下面是一个简单的例子: ```python apiVersion: v1 kind: Service metadata: name: nginx-service labels: run: nginx spec: selector: app: nginx ports: - port: 80 nodePort: 30001 type: NodePort


    推荐阅读