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

2019-08-30 13:41

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服务:

看到这里相信很多人会有以下疑问: 1. 每次收到获取podIP太扯了,总不能每次都要手动改程序或者配置才能访问服务吧,要怎么提前知道podIP呢?

2. Pod在运行中可能会重建,IP变了怎么解? 3. 如何在多个Pod中实现负载均衡嘞?

这些问题使用k8s Service就可以解决。

使用Service发现服务

下面为两个Nginx Pod创建一个Service。使用nginx-service.yaml文件进行创建,文件内容如下:

创建之后,仍需要获取Service的Cluster-IP,再结合Port访问Nginx服务。

Service可以将podIP封装起来,即使Pod发生重建,依然可以通过Service来访问Pod提供的服务。此外,Service还解决了负载均衡的问题,大家可以多访问几次Service,然后通过kubectl logs 来查看两个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规则。


Kubernetes如何使用kube-dns实现服务发现.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二九年山东省青岛市初级中学学业水平考试数学试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: