Kubernetes--Headless Service

一、Headless Service概念
   在某些应用场景中,客户端不需要通过Kubernetes内置的Service实现负载均衡功能,或者需要自行完成对服务后端各个实例的服务发现机制,或者需要自行实现负载均衡功能,可以通过创建特殊的名为“Headless”的服务实现。
    Headless Service的概念是这种服务没有入口访问地址(无ClusterIP地址),kube-proxy不会为其创建负载转发规则,而服务名(DNS域名)的解析机制取决于该Headless Service是否设置了Label Selector。
二、Headless Service设置Label Selector
    如果Headless Service设置了Label Selector,Kubernetes则将根据Label Selector查询后端Pod列表,自动创建Endpoint列表,将服务名(DNS域名)的解析机制配置为:当客户端访问该服务名时,得到是全部Endpoint列表(而不是一个确定的IP地址)。
    
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
  clusterIP: None
  selector:
    app: nginx

    Node中存三个nginxKubernetes--Headless Service_第1张图片

查看Headless Service的信息,可以看到后端Pod的Endpoint

Kubernetes--Headless Service_第2张图片

    通过nslookup工具对Headless Service名称可以名称进行解析,可以从DNS系统返回全部的EndPoints的IP地址。
     当客户端通过DNS服务名"nginx"(或其它FQDM全限定域名“nginx..svc.cluster.local”)和服务端口号访问该Headless服务(URL=nginx:80)时,将得到Service后端Endpoint列表,然后客户端程序自行决定如何操作,例如通过轮询机会访问各个Endpoint。
三、Headless Service未设置Label Selector
如果Headless Service没有设置Label Selector,则Kubernetes不会自动创建对应的Endpoint列表。DNS系统会根据下列条件设置DNS记录。
  • 如果Service类型为ExternalName,则对服务名访问将直接被DNS系统转为Service设置的外部(externalName);
  • 如果系统中存在与Service同名的Endpoint定义,则服务名将被解析为Endpoint定义中的列表,适用于非ExternnalName类型的Service

你可能感兴趣的:(Kubernetes,kubernetes,容器,云原生)