Headless Services无头服务
一、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无头服务相关推荐
- K8s9(2-1) k8s中的通信机制, kube-proxy的ipvs模式 ,无头服务,LoadBalancer,ExternalName,外部公有 ip(externalIPs)
1.K8s中的service和通信: Service可以看作是一组提供相同服务的Pod对外的访问接口.借助Service,应用可以方便地实现服务发现和负载均衡. service默认只支持4层负载均衡能 ...
- 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 ...
- Headless Services
什么是Headless Services Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP.也 ...
- net.LookupSRV()查询k8s无头服务
net.LookupSRV()查询k8s无头服务 (金庆的专栏 2021.2) 如下创建 StatefulSet 和 Headless Service: test.yaml apiVersion: v ...
- Sharepoin学习笔记—架构系列—06 Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
Sharepoint服务是Sharepoint的重要组成,可以说Sharepoint的许多网站功能都是基于这些服务构架起来的.这里把Sharepoint服务的相关要点总结一下. 1.什么是 Share ...
- Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...
- Enterprise Services (COM+)服务组件开发异常分析
Enterprise Services (COM+)服务组件开发异常分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-c ...
- Linux headless mode (无头模式)
今天遇到一个问题,把java web 项目部署到客户的服务器上时,登录界面的图片验证码无法显示.经排查发现,java后台代码使用X11GraphicsEnvironment类来生成图片验证码的时候出错 ...
- 【MM模块】 External Services 外部服务
由上图所知,正常我们下一个PO都会知道购买什么东西,以多少价格购买.但是比如SAP上线,比如期初设定了300万,但随着业务的深入实施工期不断拖长,变成了500万,这样的情况我们就可以使用外部服务来做. ...
最新文章
- 10.1 HTML介绍与开发环境的搭建
- resources.arsc格式(包-类型-资源项)
- 关于 jquery select2 多个关键字 模糊查询的解决方法
- 西瓜书+实战+吴恩达机器学习(十三)监督学习之随机森林 Random Forest
- android.os.parcelable,Android中Parcelable如可快速生成
- 用python画图代码-Python科学画图代码分享
- 加速失败远程计算机不能反应,2008 R2 SP1远程桌面如何开启GPU加速?不讨论虚拟机...
- JavaScript高级程序设计(第3版)
- postgresql 清理磁盘空间
- python画球面_matplotlib中的球面坐标图
- 在 Excel 中对多行多列进行条件求和
- 宏批量替换多个word指定文字
- 车间数据监控可视化大屏实操来啦
- 数据库原理——实验二《数据查询》
- MySQL--增删改查
- 局域网文件共享需要打开服务器,局域网共享工具有什么用怎么开启
- 蜡烛图、美国图绘图及标记
- 什么是IP?什么是DN/DNS?什么是hosts文件?计算机访问网络的原理又是怎样的?
- Fortran95/2003高级技巧
- Chrome浏览器安装JsonView插件
热门文章
- 【系统分析师之路】第十七章 多媒体基础章节习题集
- ADC0809采集八路电压
- java多线程围棋小游戏代码,java小游戏源代码(java开发的50个小游戏)
- MOOC-浙江大学-博弈论基础-学习笔记(七)
- WPS2013开发工具中的VBA为灰色不可用状态的解决方法
- 苹果安卓手机杜高斯贝Dukascopy官网打不开及JForex交易软件登录不上解决办法
- 编写JavaScript程序实现:图像浏览器的功能
- 2022智慧工地管理系统多少钱一套
- 工业物联 成就智能制造 IIoT未来布局!OFweek 2019工业物联网技术与应用峰会4月即将来袭
- C# 将毫秒格式化为时:分:秒:毫秒