Kubernetes如何使用kube-dns实现服务发现.docx

Kubernetes如何使用kube-dns实现服务发现.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Kubernetes如何使用kube-dns实现服务发现

Kubernetes如何使用kube-dns实现服务发现大纲:Kubernetes中如何发现服务如何发现Pod提供的服务如何使用Service发现服务如何使用kube-dns发现服务kube-dns原理组成域名格式配置注:本次分享内容基于Kubernetes 1.2版本!下面从一个基于时速云平台的简单的例子开始讲解。Kubernetes中如何发现服务发现Pod提供的服务首先使用nginx-deployment.yaml文件创建一个Nginx Deployment,文件内容如图所示:首先创建两个运行Nginx服务的Pod:使用kubectl create -f nginx-deployment.yaml指令创建,这样便可以得到两个运行nginx服务的Pod。待Pod运行之后查看一下它们的IP,并在k8s集群内通过podIP和containerPort来访问Nginx服务:获取Pod IP:在集群内访问Nginx服务:看到这里相信很多人会有以下疑问:每次收到获取podIP太扯了,总不能每次都要手动改程序或者配置才能访问服务吧,要怎么提前知道podIP呢?Pod在运行中可能会重建,IP变了怎么解?如何在多个Pod中实现负载均衡嘞?这些问题使用k8s Service就可以解决。使用Service发现服务下面为两个Nginx Pod创建一个Service。使用nginx-service.yaml文件进行创建,文件内容如下:创建之后,仍需要获取Service的Cluster-IP,再结合Port访问Nginx服务。Service可以将podIP封装起来,即使Pod发生重建,依然可以通过Service来访问Pod提供的服务。此外,Service还解决了负载均衡的问题,大家可以多访问几次Service,然后通过kubectl logs Pod Name来查看两个Nginx Pod的访问日志来确认。获取IP:在集群内访问Service:虽然Service解决了Pod的服务发现和负载均衡问题,但存在着类似的问题:不提前知道Service的IP,还是需要改程序或配置啊。看到这里有没有感觉身体被掏空?接下来聊聊kube-dns是如何解决上面这个问题的。使用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)来创建,为大家准备的完整示例文件会在分享结束后提供获取方式,PPT中只截取了部分内容。通过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的工作原理。Kube-dns原理Kube-dns组成之前已经了解到kube-dns是由四个容器组成的,它们扮演的角色可以通过下面这张图来理解。其中:SkyDNS是用于服务发现的开源框架,构建于etcd之上。作用是为k8s集群中的Pod提供DNS查询接口。项目托管于/s

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档