00:00
接下来我们再来说K8S里面的另外一个核心概念叫service,翻译过来呢是服务,所谓的服务是K8S用来做服务发现功能的。举一个例子,假设呢,我先开发了一个应用,我使用deployment呢,部署了三份,比如这就是我们的后台管理系统这个应用,比如它呢,就是我们后台管理系统,而后台管理系统呢,我们是前后分离的开发方式,那这个呢,假设就是我们写好的Java为服务,那接下来呢,肯定界面我们我们的这个web端,我们也就会有一个VU的项目,这是我们的前端,那我们现在呢,其实钱呢,就要给我们后台管理系统来进行发送请求,来处理功能,毕竟它只提供页面,对吧?那既然要发请求呢,它就要在这儿配置上一项东西,就是后台管理系统的地址是什么。就是我们说的API的API地址对吧,然后说呢,我们要给哪一块发请求啊,如果是以前我们可以这么来做,比如我们部署的这个应用,就以我们之前部署的为例吧,杠O外的我们可以呢,每一个应用是不是都有一个IP地址,那我呢,就可以把这个IP地址配到这,假如这个IP地址呢,那就是第一个pod,大家想如果是这种方式是不是会有很大的问题,比如呢,我这个前端以后呢,相当于都是给他来发送请求,比如他要宕机了,那是不是就完蛋了,但是呢,我们后台管理系统其实同样部署了三份呢,其实你给这两个呢,任意一个发起球都行,所以如果它宕机了,按照以前的方式,我难道还要改前端我们这个页面的这个地址吗?我们要改他要给哪发的地址吗?这样每次做是不是很麻烦,所以呢,我就希望这些pod呢,能统一对外暴露一个公共的地址,默认呢,现在这。
01:56
三个pod啊,都是都是有各自的IP,所以呢,我们把这一块我们称为service,比如这三个pod它呢可以是一组,诶,我们称为是不是叫一组服务啊,所以服务的概念就出来了,这三个pod对外呢,其实它是一组服务,也就是说呢,我们一组服务就成为一个service,所以此时再来说service是什么?在K8S里面的定义就是service是将一组pod公开为网络服务的抽象方法。
02:29
就像我们这个例子,我们这一组pod都是后台管理系统,Service呢,为他们统一暴露一个地址,所以以后呀,我前端只需要配什么呢?配这个service的地址的地址,这样呢,我还希望达成的效果是什么?就是当我来前端访问service的时候,那未来如果真的能把他们抽取成一个服务,那就好了,对吧?那我这个前端直接访问这个service,那访问访问service的最佳效果应该是什么?如果我访问它一切OK,那还没事,而且呢,我还能负载均衡,对吧?刚才呢访问它,后来呢,流量发给他,再后来发给他们,负载均衡的方式来访问每一个pod还能做到啥效果呢?假设它宕机了,然后service呢,应该能自动发现,就是我们说的服务发现功能,他呢发现这个宕机了以后呢,前端发给这个service的流量,它呢,就会打给其他号这两个的任何一个。
03:30
所以我们希望呢,Service也有这个功能,那K8S里边给我们说的这种service,它呢就可以做到,我们来做一个简单的测试吧,测试之前呢,我先来做这么一个效果,我来到可视化界面里边,这是我们之前部署的三个in,我们就假装这是后台管理系统,然后呢,我们来到NS的这个页面,我们进入NS容器里边,刚才我的这一块操作就选中一个pod,用pod里边是不是就是容器啊,然后呢,我进入它它容器内部,进入到内部以后呢,我来到它默认的欢迎页里边叫n g htm Mr user share n htm2默认还原页呢,应该是这个,我按内容改一下,比如输出114个一在inext面,好,我第一个pod呢这么改,第二个pod呢我也这么改。
04:21
CD user share NX HTML,然后呢,E口2224个二到index页面,然后呢第三个pod我也整不开。CD user share index HTML,然后呢,来输出一个333到我们的index页面好了,那现在呢,我准备了三个pod,那如果你此时再来访问我三个pod,假设呢,第一个pod。因为pod里边跑的是NX,所以呢,我使用它的IP直接呢端口是八零就行了,因为我们N监听八零,那冒号八零就等于不写对吧,所以我就回车,哎,发现呢,第一个N访问是没问题的,包括我来访第二个,因为每一个呢,页面都改了,所以如果我来访每一个呢,它返回的内容还不一样,好没问题,我来访问第三个。
05:20
回车啊,第三个,这就是我们现在默认我去来访问这三个pod是这个样子的,当然按照我们这个场景案例,如果我有一个前端项目,其实应该配置一个公共的这个地址,那这个公共地址怎么配呢?我们就可以使用一个非常简单的命令,叫库包controller。库包controller expose,什么叫expose,翻译过来什么叫暴露,暴露谁呢?我们就暴露我们的这次部署,我们是deploy,叫买第1P,相当于呢,我来暴露我们名为买第1P部署的这三个pod,我们把它们呢统一暴露成一组服务,而且呢,接下来得写几个关键参数,首先第一个叫杠杠port,杠杠port呢,比如我写一个8000 8000的意思是什么?因为接下来呢,我会把这三个port暴露成一个固定的服务IP地址,所以呢,假设这个IP是一个啊,随便我写一个123,假设这个IP是123,那你呢,你相当于就是访问我。
06:20
那这个service的什么端口呢?我们刚才是不是写了一个8000,所以呢,接下来相当于你是你访问我的8000,我们把这个端口称为杠杠po,杠杠po也就是我服务的端口,你访问我这个服务的8000端口,那我呢,相当于我前端这一块要配就是来配service service的地址冒号是不是8000对吧,我访问这个,然后呢,我让他呢给我提供负载均衡服务8000吧,好,8000我只要访问你,那你呢,相当于就是访问这三个pod的任何一个,所以接下来呢,你又得写上一个杠杠port,写了以后呢,接下来在杠杠还有一个叫target port,什么叫target port,就叫目标端口,目标端口写什么?我们来看我们的这个图,我相当我想访问这个固定的8000端口,就相当于来到我三个pod的任何一个人的八零端口。所谓目标,我写。
07:20
八零,然后呢,我来回车。我们来看这个呢,已经暴露,那就是之前的还在,我把之前的删一下啊,Delete service我们自己来做,叫MYDEP,好,我来重新把这个命令已运行好,一运行呢,接下来它会给我们打印一个叫service my DEP exp,就是呢,它又创建了一种新的资源,所以我来给大家看这种新的资源叫service,对吧,这个service呢,大家会看到这有一个固定的IP地址,如果我来访问这个IP地址,这个IP地址的吧,什么8000端口回车,然后我们来看他打印一一再来访问一一一一再来看333,诶还有11333,还有222没,如果有的话,那我们会看到这么多次访问呢,它其实是一个负载均衡的访问,就是一会儿呢,访问是一一,一会呢访问的是333,一会访问是222,比如请求的流量会给你一会,打到这一会。
08:24
到这就打到这儿,把这种呢就称为负载均衡,所以呢,我们想要让它进行访问,只需要这么一个命令,叫暴露复制一下。复制一下,那我们敲的这个命令呢,就是这个我使用CU controller exp,我来暴露我的哪一次部署,而这个暴露的这个。好。暴露啊,而这个呢,是我们来敲命令,如果呢,你写压面尔文件也是可以的,如果你想要写文件的方式来做到这个事情,比如呢,我们的这次暴露,它产生的压麦呢,就长长得这样,我们呢会有一次会暴露出一组服务,对吧?这个服务呢名叫MY买第P,然后呢,在这个里边重要的就是port和target port我们是不是写了更重要的呢?其实是这个叫SLAPP买第P,为啥重要是这个呢?就相当于我的这个服务是把哪一组pod暴露出来的,每一个pod在部署期间,它其实会有一个这样的东西来给大家看图标,Ctrll get pod叫杠杠show labels,我们称为标签,我们会看到每一个pod呢,都会有一个标签,这个标签呢,比如叫买APP买DEP,所以呢,每一个pod,它呢有一个相同的标签,我呢相当于是按照标签来。
09:49
选择同样一组。来画一下好,他的标签呢,叫它每,因为我们正好叫买第PT部署的这三个pod,他们是不是都共同有这个标签,对吧?有这个标签,那我的这个service呢,其实它的这一块写的就是这样,我service letter,我按照标签选名叫APP直叫买第第1APP的这些pod名叫APP直叫买第一批的,那就是我选中了这三个pod,我相当于我的那个service,就是暴露这三个pod,所以呢,我们刚才看到service的一大优点就是我们service可以选择一组pod把它们暴露出来,然后呢对外提供统一服务。
10:36
因为我们这个service呢,有一个固定IP,我把这个service的固定IP拿过来。然后呢,这个固定IP,注意这个IP呢,默认也只是在集群内有效,在集群内的任意位置,比如我在任何一个机器也行,比如我来到其他的机器节点也可以没有任何问题,你访问你的报刚暴露的这个SERVICE8000端口回车,那也是负载均衡的访问,112233都会给你打过去,比方说这是我们默认的这种方式,只在集群内,这种是集群内任意访问,集群内使用service的IP地址,Service的IP冒号端口就可以就可以负载均衡的访问,甚至于呢,这样也是可以的,举一个例子。
11:33
我们的这个前端我先在部署期间,我还要知道service的IP地址,然后呢,我放在这,那我能不能相当于写域名的方式,我只知道service的名字,我就访问就行了,也可以也可以这么配置,呃,比如举一个例子,我们来启动一个前端,我们呢就模拟启动一个前端,我创建一次部署,这个部署呢使用比如我们就叫买Tom KT啊,我们就假装tomcat是我们的前端项目,对吧?然后呢,我使用的这个镜像就是tomcat回车,然后呢,我来创建了一次部署,是使用tomcat镜像创建的,然后呢,最终我们就会产生一个pod来稍等这个pod启动起来。
12:15
啊,等了一小阵呢,这个pod启动起来,我们进入到这个pod内部,现在就进入到我们前端项目的内部,那大家说我前端项目要访问我们这个后台,后台项目我们这个两种办法对吧,第一种办法呢,写后台的IP地址。比如我们在这来测试一下,看CU还有这个命令,而且后台系统的IP地址,当然这个IP地址呢是10.9 6.8.0,它呢是访问8000端口,你写后台的IP地址也能负载均衡的访问,这是在我们容器内部是不是也行,然后呢,你甚至于可以写这个叫域名,就是我们现在来看一下啊,我暴露了一个服务库包,Ctrl get service,我刚才把我们部署的这个买第一批,我们来暴露成了一个服务,这个服务名呢叫买第一批,也就是说以后呢,我们只要知道一个服务名。
13:14
我们只要知道这个服务的名字叫买DP,你也可以使用域名的方式来进行访问,而这个域名呢,默认是这个规则叫服务名,服务名点一个所在名称空间,所在名称空间再点一个service,好就是呢这样一个啊,那翻译过来呢,我们现在的这个服务名叫MY,第一批我们所在的名称空间,我们看我们现在所有的。资源我没加名称空间,所在名称空间是不是就是defat名称空间,所以呢就应该是default第二一个什么service,所以呢,这种域名的方式也可以,你访问域名加端口号其实都是一样的CL。
14:04
我们不应该在这,应该是在容器内部啊,在容器内部来使用域名叫MY,第一批点default,点一个service的8000回车,诶我们发现呢,现在也能负载均衡的访问,也就是说。我们未来啊,可以在这一块前端这一块直接配置域名service,域名service的域名规则,我们在前面也说了,这或者呢叫service IP,反正这两个都行,但是大家注意啊,这个域名呢,只能在我们pod内,就是其他pod内部,你想要访问这一组pod,你写这一组pod的service的域名,在我们这一块是不行的,比如有些同学测试想要在机器上,对吧,在我们真正的这个节点上,然后我来通过域名叫MY,什么DEP for。
15:00
They theyat点一个service冒号8000这种呢,就是不行的啊,这种是我们无法解析的域名,所以未来呢,我们只需要在每一个应用内部,通过访问对方服务所在的域名,也可以快速的访问的。这就是我们说的service,通过我们标签选中一组pod以后,把它们统一暴露成一个服务以后呢,大家都统用一个统一的IP地址加端口来负载均衡的访问这些service,当然这种情况下呢,就是我们说的这种模式,Service呢,默认是class IP类型,就是我们看到这个service是默认就是class IP,因为我们刚才呢按照暴露,那是怎么暴露的呢?那是不是按照这种暴露这种呢?其实就等于这个命令杠杠,Type等于class IP,所谓的class IP就叫集群IP,也就是说我暴露的这个东西只能在集群内访问,这是我们默认暴露的service,而如果我们想要呢,让大家伙都能访问,那就得用另外一种叫node port,那么下节课再来说它。
我来说两句