全国服务热线:400-123-4657
网站公告:
诚信为本,市场在变,诚信永远不变...
第一系列
当前位置: 首页 > 产品中心 > 第一系列
从零开始学K8s: 31.Headless Service‘开云手机app’
添加时间:2023-11-29
本文摘要:前言服务可以用于提供一个稳定的IP地址,它允许客户端毗连到服务后面的pod。

前言服务可以用于提供一个稳定的IP地址,它允许客户端毗连到服务后面的pod。服务会将收到的每个毗连转发给一个随机选择的pod。可是如果客户端需要毗连到服务后的所有pod呢?如果pod自己也需要毗连到其他所有pod呢?通过服务来毗连很显着无法到达这个目的。如果一个客户端希望毗连到所有pod,它需要知道每个pod的IP地址。

一个方式是让客户端通过一个API挪用Kubernetes API服务器获取pod列表以及它们的IP地址。可是由于需要遵循应用法式与Kubernetes解耦原则,使用API服务显然是不合适的。幸运的是Kubernetes允许客户端通过DNS查找发现pod的IP地址。通常,当执行某个服务的DNS查找时,DNS服务器会返回该服务的Cluster IP地址。

我们可以在服务的spec中指定clusterIP字段为None,告诉Kubernetes不需要cluster IP,那么DNS服务器就会返回所有Pod的IP,而不是该服务的IP。DNS服务器不会返回单个DNS A记载(A记载就是指定域名对应的IP地址),而是返回该服务的多条A记载,每条记载都指向单个pod的IP地址。

因此,客户端就能举行一个简朴的DNS A记载查找获取该服务所有pod的IP地址,从而可以毗连到单个或多个pod。建立headless服务Headless服务也是一种Service,但差别的是它会界说spec:clusterIP: None,也就是不需要Cluster IP的服务。Kubernetes不会为headless服务分配集群IP地址。

下面我们建立一个名为test-headless的服务:vim test-headless-svc.yamlapiVersion: v1kind: Servicemetadata:name: test-headless-svcspec:clusterIP: Noneports:- port: 80 targetPort: 8080selector: app: tomcatkubectl create -f test-headless-svc.yaml该服务对应的pod包罗app=tomcat的标签可以看到该服务CLUSTER-IP列值为None。还可以通过kubectl describe的方式检察该服务的信息:kubectl describe svc test-headless-svc可以发现IP显示为None。

另外,这里的Endpoints之所以为空,是因为在上一节中我们针对该服务的3个pod都设置了停当探针而且停当探针检查失败,所以这3个pod都未准备停当:执行如下下令,使停当探针检查乐成,这样三个pod就能加入到该服务的endpoints中:kubectl exec -it test-tomcat-deploy-7898789b6f-2nwct -- touch /var/readykubectl exec -it test-tomcat-deploy-7898789b6f-khn9g -- touch /var/readykubectl exec -it test-tomcat-deploy-7898789b6f-lkrp6 -- touch /var/ready通过DNS发现pod现在我们来演示如何通过DNS获取pod的IP地址。我们可以在上面的某个pod中执行查询,前提是pod需要包罗nslookup或者dig法式。幸运的是我们演示使用的镜像tomcat:8.5.34-jre8-alpine恰好包罗nslookup法式:固然,我们也可以使用一个含nslookup和dig法式的镜像tutum/dnsutils,并基于该镜像运行一个独立的pod:kubectl run dnsutils --image=tutum/dnsutils --command -- sleep infinity工具准备好了后就可以开始执行DNS查找了:kubectl exec dnsutils -- nslookup test-headless-svc可以看到DNS服务器(10.96.0.10)针对FQDN test-headless-svc.default.svc.cluster.local返回了3个差别的IP地址,它们都是处于Ready状态的pod的地址。

而针对通例的服务,DNS服务器返回的是服务的集群IP地址:kubectl exec dnsutils -- nslookup test-svc虽然headless服务看起来与通例的服务有所差别,可是对于客户端来说并无差别,都是通过服务的DNS名称来毗连到服务的各个pod。可是当使用headless服务时,由于DNS服务器返回的是pod的IP地址,因此客户端可以直接毗连到pod,而不是通过服务署理。不外需要注意的是,headless服务虽然没有使用服务署理,可是仍然可以通过DNS round-robin机制实现pod之间的负载平衡。

如果以为本文对您有资助,接待关注我的头条号订阅更新,我会不停推出更多学习教程、视频以及偏实战的文章!。


本文关键词:开云手机app

本文来源:开云手机app-www.yazhoufangchan.cn