一、Headless Services介绍

Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP。也被称为无头服务。

1、headless Service和普通Service的区别

headless不分配clusterIP

headless service可以通过解析service的DNS,返回所有Pod的地址和DNS(statefulSet部署的Pod才有DNS)

普通的service,只能通过解析service的DNS返回service的ClusterIP

2、statefulSet和Deployment控制器的区别

statefulSet下的Pod有DNS地址,通过解析Pod的DNS可以返回Pod的IP
deployment下的Pod没有DNS

3、普通Service解析service的DNS结果

Service的ClusterIP工作原理:一个service可能对应一组endpoints(所有pod的地址+端口),client访问ClusterIP,通过iptables或者ipvs转发到Real Server(Pod),具体操作如下

[root@master01 ~]# kubectl get svc -n ms   #获取所有svc,看到gateway这个service的clusterIP是10.0.0.14
NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
eureka             ClusterIP   None         <none>        8888/TCP   21h
gateway            ClusterIP   10.0.0.14    <none>        9999/TCP   20h
mysql-production   ClusterIP   10.0.0.251   <none>        3306/TCP   23h
portal             ClusterIP   10.0.0.124   <none>        8080/TCP   17h[root@master01 ~]# kubectl describe svc gateway -n ms  #看到gateway这个service的具体信息
Name:              gateway
Namespace:         ms
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"gateway","namespace":"ms"},"spec":{"ports":[{"name":"gateway","po...
Selector:          app=gateway,project=ms
Type:              ClusterIP
IP:                10.0.0.14
Port:              gateway  9999/TCP
TargetPort:        9999/TCP
Endpoints:         10.244.1.212:9999   #该service下的Pod地址
Session Affinity:  None
Events:            <none>[root@master01 ~]# kubectl exec -it gateway-6cd76c98fb-8w92t -n ms sh  #进入一个容器测试解析
/ # nslookup gateway.ms.svc.cluster.local         #测试解析gateway这个service的DNS
nslookup: can't resolve '(null)': Name does not resolveName:      gateway.ms.svc.cluster.local
Address 1: 10.0.0.14 gateway.ms.svc.cluster.local  #这个结果就是gateway这个service的ClusterIP

从上面的结果能看到,虽然Service有1个endpoint,但是DNS查询时只会返回Service的ClusterIP地址,具体Client访问的是哪个real server,由iptables或者ipvs决定

4、headless Service的解析service的DNS结果

[root@master01 ~]# kubectl get svc -n ms   #查看所有SVC,看到eureka的这个headless service
NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
eureka             ClusterIP   None         <none>        8888/TCP   21h
gateway            ClusterIP   10.0.0.14    <none>        9999/TCP   20h
mysql-production   ClusterIP   10.0.0.251   <none>        3306/TCP   23h
portal             ClusterIP   10.0.0.124   <none>        8080/TCP   18h
[root@master01 ~]# kubectl describe svc eureka -n ms  #看到eureka的这个headless service下面的endpoints
Name:              eureka
Namespace:         ms
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"eureka","namespace":"ms"},"spec":{"clusterIP":"None","ports":[{"n...
Selector:          app=eureka,project=ms
Type:              ClusterIP
IP:                None
Port:              eureka  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.244.1.210:8888,10.244.1.211:8888,10.244.2.45:8888
Session Affinity:  None
Events:            <none>
[root@master01 ~]# kubectl exec -it gateway-6cd76c98fb-8w92t -n ms sh  #进入容器测试解析
/ # nslookup eureka.ms.svc.cluster.local                    #通过解析eureka这个headless service的DNS地址,可以看到关联的具体endpoints信息
nslookup: can't resolve '(null)': Name does not resolveName:      eureka.ms.svc.cluster.local
Address 1: 10.244.1.211 eureka-2.eureka.ms.svc.cluster.local
Address 2: 10.244.1.210 eureka-0.eureka.ms.svc.cluster.local
Address 3: 10.244.2.45 eureka-1.eureka.ms.svc.cluster.local  / # nslookup eureka-2.eureka.ms.svc.cluster.local  #解析pod的DNS记录,也能返回Pod的IP  nslookup: can't resolve '(null)': Name does not resolveName: eureka-2.eureka.ms.svc.cluster.local  Address 1: 10.244.1.211 eureka-2.eureka.ms.svc.cluster.local

根据结果看到,dns查询会返回3个endpoint,也就是3个pod地址和DNS,通过解析pod的DNS也能返回Pod的IP

二、Headless Services使用场景

第一种:自主选择权,有时候client想自己决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息

第二种:headless service关联的每个endpoint(也就是Pod),都会有对应的DNS域名;这样Pod之间就可以互相访问

headless services一般结合StatefulSet来部署有状态的应用,比如kafka集群,mysql集群,zk集群等

[root@master01 ~]# kubectl get sts -n ms    NAME     READY   AGE   eureka   3/3     22h
[root@master01 ~]# kubectl get svc -n ms
NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
eureka             ClusterIP   None         <none>        8888/TCP   21h
[root@master01 ~]# kubectl describe svc eureka -n ms
Name:              eureka
Namespace:         ms
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"eureka","namespace":"ms"},"spec":{"clusterIP":"None","ports":[{"n...
Selector:          app=eureka,project=ms
Type:              ClusterIP
IP:                None
Port:              eureka  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.244.1.210:8888,10.244.1.211:8888,10.244.2.45:8888
Session Affinity:  None
Events:            <none>
[root@master01 ~]# kubectl exec -it gateway-6cd76c98fb-8w92t -n ms sh
/ # nslookup eureka.ms.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolveName:      eureka.ms.svc.cluster.local
Address 1: 10.244.1.211 eureka-2.eureka.ms.svc.cluster.local
Address 2: 10.244.1.210 eureka-0.eureka.ms.svc.cluster.local
Address 3: 10.244.2.45 eureka-1.eureka.ms.svc.cluster.local
/ # nslookup eureka-2.eureka.ms.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolveName:      eureka-2.eureka.ms.svc.cluster.local
Address 1: 10.244.1.211 eureka-2.eureka.ms.svc.cluster.local
/ # nslookup eureka-1.eureka.ms.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolveName:      eureka-1.eureka.ms.svc.cluster.local
Address 1: 10.244.2.45 eureka-1.eureka.ms.svc.cluster.local
/ # nslookup eureka-0.eureka.ms.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolveName:      eureka-0.eureka.ms.svc.cluster.local
Address 1: 10.244.1.210 eureka-0.eureka.ms.svc.cluster.local

如上,eureka就是我们场景的StatefulSet,对应的pod就是eureka-0,eureka-1,eureka-2,他们之间能互相访问,这样对于一些集群类型的应用就可以解决互相身份识别的问题了

三、为什么要用headless service+statefulSet部署有状态应用?

1.headless service会为关联的Pod分配一个域
<service name>.$<namespace name>.svc.cluster.local2.StatefulSet会为关联的Pod保持一个不变的Pod Name
statefulset中Pod的hostname格式为$(StatefulSet name)-$(pod序号)3.StatefulSet会为关联的Pod分配一个dnsName
$<Pod Name>.$<service name>.$<namespace name>.svc.cluster.local

https://blog.csdn.net/zhangshaohuas/article/details/107552452

https://www.cnblogs.com/chadiandianwenrou/p/11937041.html

https://kubernetes.io/docs/concepts/services-networking/service/#headless-services  官网介绍

Headless Services无头服务相关推荐

  1. K8s9(2-1) k8s中的通信机制, kube-proxy的ipvs模式 ,无头服务,LoadBalancer,ExternalName,外部公有 ip(externalIPs)

    1.K8s中的service和通信: Service可以看作是一组提供相同服务的Pod对外的访问接口.借助Service,应用可以方便地实现服务发现和负载均衡. service默认只支持4层负载均衡能 ...

  2. Kubernetes(K8S)(六)——service(ClusterIP、NodePort、无头服务、LoadBalancer、ExternalName等)

    文章目录 1.Service介绍 2.开启kube-proxy的ipvs模式 3.创建service 3.1 ClusterIP 3.2 NodePort(可外部访问) 3.3 无头服务 3.4 Lo ...

  3. Headless Services

    什么是Headless Services Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP.也 ...

  4. net.LookupSRV()查询k8s无头服务

    net.LookupSRV()查询k8s无头服务 (金庆的专栏 2021.2) 如下创建 StatefulSet 和 Headless Service: test.yaml apiVersion: v ...

  5. Sharepoin学习笔记—架构系列—06 Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoint服务是Sharepoint的重要组成,可以说Sharepoint的许多网站功能都是基于这些服务构架起来的.这里把Sharepoint服务的相关要点总结一下. 1.什么是 Share ...

  6. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

  7. Enterprise Services (COM+)服务组件开发异常分析

    Enterprise Services (COM+)服务组件开发异常分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-c ...

  8. Linux headless mode (无头模式)

    今天遇到一个问题,把java web 项目部署到客户的服务器上时,登录界面的图片验证码无法显示.经排查发现,java后台代码使用X11GraphicsEnvironment类来生成图片验证码的时候出错 ...

  9. 【MM模块】 External Services 外部服务

    由上图所知,正常我们下一个PO都会知道购买什么东西,以多少价格购买.但是比如SAP上线,比如期初设定了300万,但随着业务的深入实施工期不断拖长,变成了500万,这样的情况我们就可以使用外部服务来做. ...

最新文章

  1. 10.1 HTML介绍与开发环境的搭建
  2. resources.arsc格式(包-类型-资源项)
  3. 关于 jquery select2 多个关键字 模糊查询的解决方法
  4. 西瓜书+实战+吴恩达机器学习(十三)监督学习之随机森林 Random Forest
  5. android.os.parcelable,Android中Parcelable如可快速生成
  6. 用python画图代码-Python科学画图代码分享
  7. 加速失败远程计算机不能反应,2008 R2 SP1远程桌面如何开启GPU加速?不讨论虚拟机...
  8. JavaScript高级程序设计(第3版)
  9. postgresql 清理磁盘空间
  10. python画球面_matplotlib中的球面坐标图
  11. 在 Excel 中对多行多列进行条件求和
  12. 宏批量替换多个word指定文字
  13. 车间数据监控可视化大屏实操来啦
  14. 数据库原理——实验二《数据查询》
  15. MySQL--增删改查
  16. 局域网文件共享需要打开服务器,局域网共享工具有什么用怎么开启
  17. 蜡烛图、美国图绘图及标记
  18. 什么是IP?什么是DN/DNS?什么是hosts文件?计算机访问网络的原理又是怎样的?
  19. Fortran95/2003高级技巧
  20. Chrome浏览器安装JsonView插件

热门文章

  1. 【系统分析师之路】第十七章 多媒体基础章节习题集
  2. ADC0809采集八路电压
  3. java多线程围棋小游戏代码,java小游戏源代码(java开发的50个小游戏)
  4. MOOC-浙江大学-博弈论基础-学习笔记(七)
  5. WPS2013开发工具中的VBA为灰色不可用状态的解决方法
  6. 苹果安卓手机杜高斯贝Dukascopy官网打不开及JForex交易软件登录不上解决办法
  7. 编写JavaScript程序实现:图像浏览器的功能
  8. 2022智慧工地管理系统多少钱一套
  9. 工业物联 成就智能制造 IIoT未来布局!OFweek 2019工业物联网技术与应用峰会4月即将来袭
  10. C# 将毫秒格式化为时:分:秒:毫秒