概念:
有时不需要或不想要负载均衡,以及单独的Service IP
遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 “None” 来创建 Headless Service
这个选项允许开发人员自由寻找他们自己的方式,从而降低与 Kubernetes 系统的耦合性,应用仍然可以使用一种自注册的模式和适配器,对其它需要发现机制的系统能够很容易地基于这个 API 来构建
对这类 Service 并不会分配 Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由,DNS 如何实现自动配置,依赖于 Service 是否定义了 selector
headless无头服务主要用在statefulset中
配置清单:
[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
应用配置:
[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
myapp NodePort 10.106.188.204
myapp-headless ClusterIP None
redis ClusterIP 10.97.97.97
解析对比:
对比普通的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