自动发现服务是怎样工作的
发布网友
发布时间:2022-04-20 09:42
我来回答
共1个回答
热心网友
时间:2023-09-20 14:16
使用kubectl create -f nginx-deployment.yaml指令创建,这样便可以得到两个运行nginx服务的Pod。待Pod运行之后查看一下它们的IP,并在k8s集群内通过podIP和containerPort来访问Nginx服务:
获取Pod IP:
在集群内访问Nginx服务:
看到这里相信很多人会有以下疑问:
1.每次收到获取podIP太扯了,总不能每次都要手动改程序或者配置才能访问服务吧,要怎么提前知道podIP呢?
2.Pod在运行中可能会重建,IP变了怎么解?
这些问题使用k8s Service就可以解决。
创建之后,仍需要获取Service的Cluster-IP,再结合Port访问Nginx服务。
Service可以将pod IP封装起来,即使Pod发生重建,依然可以通过Service来访问Pod提供的服务。此外,Service还解决了负载均衡的问题,大家可以多访问几次Service,然后通过kubectl logs <Pod Name>来查看两个Nginx Pod的访问日志来确认。
获取IP:
在集群内访问Service:
虽然Service解决了Pod的服务发现和负载均衡问题,但存在着类似的问题:不提前知道Service的IP,还是需要改程序或配置啊。看到这里有没有感觉身体被掏空?
接下来聊聊kube-dns是如何解决上面这个问题的。
kube-dns可以解决Service的发现问题,k8s将Service的名称当做域名注册到kube-dns中,通过Service的名称就可以访问其提供的服务。
可能有人会问如果集群中没有部署kube-dns怎么办?没关系,实际上kube-dns插件只是运行在kube-system命名空间下的Pod,完全可以手动创建它。可以在k8s源码(v1.2)的cluster/addons/dns目录下找到两个模板(skydns-rc.yaml.in和skydns-svc.yaml.in)来创建。
通过skydns-rc.yaml文件创建kube-dns Pod,其中包含了四个containers,这里开始简单过一下文件的主要部分,稍后做详细介绍。
第一部分可以看到kube-dns使用了RC来管理Pod,可以提供最基本的故障重启功能。
创建kube-dns Pod,其中包含了4个containers
接下来是第一个容器 etcd ,它的用途是保存DNS规则。
第二个容器 kube2sky ,作用是写入DNS规则。
第三个容器是 skydns ,提供DNS解析服务。
最后一个容器是 healthz ,提供健康检查功能。
有了Pod之后,还需要创建一个Service以便集群中的其他Pod访问DNS查询服务。通过skydns-svc.yaml创建Service,内容如下:
创建完kube-dns Pod和Service,并且Pod运行后,便可以访问kube-dns服务。
下面创建一个Pod,并在该Pod中访问Nginx服务:
创建之后等待kube-dns处于运行状态
再新建一个Pod,通过其访问Nginx服务
在curl-util Pod中通过Service名称访问my-nginx Service:
只要知道需要的服务名称就可以访问,使用kube-dns发现服务就是那么简单。
虽然领略了使用kube-dns发现服务的便利性,但相信有很多人也是一头雾水:kube-dns到底怎么工作的?在集群中启用了kube-dns插件,怎么就能通过名称访问Service了呢?
之前已经了解到kube-dns是由四个容器组成的,它们扮演的角色可以通过下面这张图来理解。
其中:
其中cluster_domain可以使用kubelet的–cluster-domain=SomeDomain参数进行设置,同时也要保证kube2sky容器的启动参数中–domain参数设置了相同的值。通常设置为cluster.local。那么之前示例中的my-nginx Service对应的完整域名就是my-nginx.default.svc.cluster.local。看到这里,相信很多人会有疑问,既然完整域名是这样的,那为什么在Pod中只通过Service名称和Namespace就能访问Service呢?下面来解释其中原因。
感兴趣的可以在网上查找一些resolv.conf的资料来了解具体的含义。之所以能够通过Service名称和Namespace就能访问Service,就是因为search配置的规则。在解析域名时会自动拼接成完整域名去查询DNS。
刚才提到的kubelet –cluster-domain参数与search的具体配置是相对应的。而kube2sky容器的–domain参数影响的是写入到etcd中的域名,kube2sky会获取Service的名称和Namespace,并使用–domain参数拼接完整域名。这也就是让两个参数保持一致的原因。
kube-dns可以让Pod发现其他Service,那Pod又是如何自动发现kube-dns的呢?在上一节中的/etc/resolv.conf中可以看到nameserver,这个配置就会告诉Pod去哪访问域名解析服务器。
![]( https://upload-images.jianshu.io/upload_images/315466-ea925bf213ef5369.png?imageMogr2/auto-
orient/strip%7CimageView2/2/w/1240)
相应的,可以在之前提到的skydns-svc.yaml中看到spec.clusterIP配置了相同的值。通常来说创建一个Service并不需要指定clusterIP,k8s会自动为其分配,但kube-dns比较特殊,需要指定clusterIP使其与/etc/resolv.conf中的nameserver保持一致。
修改nameserver配置同样需要修改两个地方,一个是kubelet的–cluster-dns参数,另一个就是kube-dns Service的clusterIP。
接下来重新梳理一下本文的主要内容:
有了以上机制的保证,就可以在Pod中通过Service名称和namespace非常方便地访问对应的服务了。
https://www.kubernetes.org.cn/273.html
服务注册与发现的原理和实现
启动注册当一个服务节点起来之后,需要把自己注册到ServiceRegistry上,便于其它节点来发现自己。注册需要在服务启动完成并可以接受请求时才会去注册自己,并且会设置有效期,防止进程异常退出后依然被访问。定时续期定时续期相当于keepalive,定期告诉ServiceRegistry自己还在,能够继续服务。退出撤销当进程退出时,...
bonjour被卸载了会怎样
如果Bonjour被卸载,那么在局域网内使用Bonjour进行设备发现和服务共享的功能将会受到影响,可能导致一些依赖Bonjour的应用程序或设备无法正常工作。Bonjour,也被称为零配置网络、零配置联网或零配置,是Apple公司开发的一种软件技术,用于在没有网络管理员的情况下,允许设备在局域网内自动发现彼此并共享服务。...
edr是什么意思?主要功能是什么?工作流程是什么?
EDR系统通过收集和分析端点数据来发现异常行为、潜在攻击和漏洞利用。EDR的主要功能和工作流程1.数据收集:EDR系统从设备端点收集日志、事件和进程信息等数据,以便进行后续分析。2.实时监控与分析:对收集到的端点数据进行实时监控和分析,以识别异常行为、恶意活动或已知的攻击特征。3.威胁检测:EDR能够检测...
微服务架构之服务注册与发现(一)
服务注册中心主要是维护各个应用服务的ip+port列表,并保持与各应用服务的通讯,在一定时间间隔内进行心跳检测,如果心跳不能到达则对服务IP列表进行剔除,并同时通知给其它应用服务进行更新。同样要是有新增的服务进来,应用服务会向注册中心进行注册,服务注册中心将通知给其它应用进行更新。
一台主机上网采用自动获取IP地址的方式,如何简要描述其获取地址的过程及...
主机获取地址的过程及所采用协议工作方式:发现阶段:即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播的方式发送DHCP discover 发现信息来寻找DHCP服务器(因为DHCP服务器的IP地址对客户机来说是未知的)。即向255.255.255.255发送特定的广播信息,网络上每一台安装了TCP/IP协议的主机都会接收到这种...
bonjour被卸载了会怎样
2. 局域网中的服务不可见:Bonjour通过使用多播广播来自动发现局域网中可用的网络服务,比如网络打印机、文件共享服务器等。当Bonjour被卸载后,局域网中的其他设备将无法通过多播广播发现这些服务,需要手动配置IP地址或使用其他的网络发现方式来使用这些服务。3. 不同操作系统间的兼容性问题:Bonjour最初是...
如何管好企业内部网络
5、怎么自动发现服务器和网络设备的故障或预警?需要专业的网管软件来实现。你的问题基本都集中在IT运维这一块,主要缺少一款好用的网络管理工具来协助你的管理,建议你与当地的系统集成商联系,为您定制一套合理高效的运维解决方案,以提高您的工作效率。另外还需要加强管理意识,建立行之有效的登记、运行...
如何发现Kubernetes中服务和工作负载的异常
接下来我们讲下发现Kubernetes中服务和工作负载的异常的最佳实践。 首先还是先有指标,指标能反应服务的监控状态,我们应尽可能地收集各种指标,并且越全越好,不限于黄金指标、USE指标、Kubernetes原生指标等;然后,指标是宏观数据,需要做根因分析我们得有Trace数据,多语言、多协议的情况下要考虑采集这些Trace的成本,同样尽...
servicenow是做什么的?
7. **工作场所体验**:ServiceNow提供管理和优化工作场所环境的工具,包括设施服务请求、空间管理、员工入职/离职和工作场所安全。这有助于组织为员工创造一个更高效、更具吸引力的工作场所。总体而言,ServiceNow 是一个单一的记录系统,用于管理和自动化各种业务流程,使组织能够提高效率、降低成本、提高...
客房服务员工作计划
在日常工作中通过鼓励培养、系统规范和培训奖励等,使这成为员工的自觉行动,从整体上促进服务质量的提高。 鼓励培养:对于工作中有优秀表现和受到客人表扬的服务员,部门会将他们列为骨干进行培养,使其服务意识和服务质量更上一层楼,立足本岗位,争创一流服务。部门管理人员在日常工作中加强现场管理,从一线服务中发现...