概念:
    image.png

    有时不需要或不想要负载均衡,以及单独的Service IP

    遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 “None” 来创建 Headless Service

    这个选项允许开发人员自由寻找他们自己的方式,从而降低与 Kubernetes 系统的耦合性,应用仍然可以使用一种自注册的模式和适配器,对其它需要发现机制的系统能够很容易地基于这个 API 来构建

    对这类 Service 并不会分配 Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由,DNS 如何实现自动配置,依赖于 Service 是否定义了 selector

    headless无头服务主要用在statefulset中

    配置清单:
    image.png

    [root@master manifests]# vim myapp-svc-headless.yaml

    apiVersion: v1
    kind: Service
    metadata:
    name: myapp-headless
    namespace: default
    spec:
    selector:
    app: myapp
    release: canary
    clusterIP: “None”
    ports:
    - port: 80
    targetPort: 80

    应用配置:
    image.png

    [root@master manifests]# kubectl apply -f myapp-svc-headless.yaml

    service/myapp-headless created

    [root@master manifests]# kubectl get svc

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.96.0.1 443/TCP 4d23h
    myapp NodePort 10.106.188.204 80:31111/TCP 10m
    myapp-headless ClusterIP None 80/TCP 2s
    redis ClusterIP 10.97.97.97 6379/TCP 68m

    解析对比:
    image.png
    image.png
    对比普通的service和headless service,headless service做dns解析是直接解析到pod的,而servcie是解析到ClusterIP的

    相关文档:https://blog.csdn.net/kenkao/article/details/87375435
    相关文档:https://www.cnblogs.com/wlbl/p/10694316.html