00:00
好,我们刚才呢,操作了一下K8S service网络的两种常见模式,一个class IP,我们暴露在集群内进行负载均衡访问的时候用,还有另外一个nodeport,我们最终呢,暴露在每一个机器的这个节点端口上,然后使用公网IP加端口的方式暴露为公网使用。接下来呢,我们再来说我们K8S里边的另外一个核心概念叫English increase English increase呢,翻译过来叫入口的意思,也就是说K8S希望English能成为我们整个集群流量的唯一入口。举一个例子,我们未来呢,在K8S集群里边,我们可能会部署我们很多的服务,都是有各种各样的pod,我们部署了很多的服务,那我们这些服务呢,要对外提供功能,所有的请求流量都应该先通过我们的English,这这一层,然后呢,由他负责把这些流量呢,该打给哪些服务,相当于呢,这是我们集群的整个统一网关入。
01:00
入口,好,那我们来理解一下这个English它想做什么,我们还是来参照这个动画,首先我们English的定义,它叫service的统一网关入口,这个呢,其实就是这样的一个关系,首先我们说的这个service啊,它相当于是pod的入口,对吧?我们未来如果想要访问的话呢,Service负责负载均衡pod,负载均衡pod,而我们这个呢,相当于又是service的一个上层入口,所有请求流量进到English,由English转交给service,再由service转交给pod。为什么要引入这种设计模式,我们可以来参照一下这个概念,假设呢,还是我们这三个机器,我们这三台机器,这三台机器呢,我们可能会部署一些应用,以我们开发一个商城为例,比如呢,我想要部署我们订单服务,我使用deployment,哎,对,这次deployment呢,比如我就叫A吧,然后呢,我这个A,我部署的是订单服务,那订单服务呢,就。
02:00
会产生相应的pod,假如产生两个pod,这两个pod呢,而且都有一个标签,比如叫PA等于APA等于A,因为这次部署名叫A,我可以打上标签叫AP等于A,相当于我们的订单服务,我们一次部署以后产生了两个运行中的pod,当然我们的整个项目呢,很大拆分的微服务又很多,除了订单服务,有可能我们还有其他的功能业务,比如叫user,这个user呢模块我们又呢产生一次部署,部署呢产生几个pod,比如这个user呢,我们这次部署叫B,然后呢,产生了三个pod,这是我们user服务的这三个pod,然后呢,我们还有我们的另外一次部署,比如我们商城里边呢,还有商品服务,对吧?商品服务呢,我们通过一次部署,我又产生了三个pod,比如呢,就是这三个pod,而且呢,各自部署产生的portd,它们的区别就是他们打的标签有可能是不一样的,比如这一次部署B部署它产生的port的标签呢,可能都叫APP。
03:00
等于BA部署产生的标签叫AP,等于AC部署呢,产生的标签叫AP,等于C颜色呢,我给大家也都标注成一样,那相当于我们K8S集群,就把我们的整个商城服务就部署好了,有订单服务,有用户服务,还有我们的商品服务,而我们这些服务呢,真正要能互相访问,比如我们要下订单,我们下订单的时候呢,可能要调用商品服务,查看商品详情,所以有可能会从订单服务的这个pod里边会发起一次远程调用,就来调商品服务,商品服务呢,有可能调它,有可能调它,也有可能调它,那为了我们整个统一调期间,我们可以给每一个服务都产生一个什么service,对吧?比如我们这两个pod呢,它产生一个service,就算是别人要调它,比如我们这个用户服务,用户呢想要查看他下了多少订单,用户服务呢,想要调用订单的查询功能,那咋办呢?用户服务给订单发起请求。
04:00
那订单模块呢,又在两个机器都有,所以用户服务这个po应该给订单的service发请求,因为我们之前说了service呢,提供了订单服务的统一入口,你给我发请求就行了,我把流量负载均衡到这,负载均衡到这,这就是我们说的这个service,诶好,我呢现在就把订单的两个pod抽取了一个服务叫service a,那未来呢,我们每一个部署的模块,我们都将会抽取这一层service,比如我的这个用户服务这三个pod,也就是说呢,我们这A负责这两个订单的pod,我们用户服务B可能负责这三个关于用户的pod,然后呢,我们的商品服务,我们还有服务C,我们负责商品的这三个pod,那以后呢,我们的交互模式就是我订单,我下订单的时候,我想要查商品啊,我们订单的这个微服务,自己呢去给商品服务service发请求,由service呢负载均衡的把流量打给任意。
05:00
一个商品的这个pod,由他来处理我们这个请求,那这样就构成了我们的两层网络,第一层网络是我们说的service网络,因为我们未来会部署很多的微服务,然后每次部署我们都可以为它产生一个service负载均衡网络,那这一层呢,我们称为叫service层网络,这一层网络呢,包括我们当时都有定义它的整个网络范围,我们可以看一下,当时我们在部署应用的时候,比如我们在这儿部署K8S,我们在部署应用的时候,来部署K8S集群的时候,我们做过这么一个操作,在部署集群初始化主节点的时候,我们指定了两个网络范围,一个呢是pod的网络范围,一个是service的网络范围,而我们现在呢,所说的这个service的网络范围,来给大家看一下,那就是这一层对吧,然后说呢,这一层呢,都是我们说的1096,就是我们一开始呢,规划用的这个叫196。
06:00
所以呢,这就解释了为什么我们在这来进行访问的时候,库包controller get service,它给我们service分配的IP库包出来get service,它分配的IP呢,都是1096这个范围的,因为我们在集群一初始化的时候呢,都规定,所以呢从我们上层看,会有一层service网络,将来呢,你想要调订单服务了,你给订单的service发请求,由他负载就用到订单的pod,你想调用户服务了,给这个service发请求,你想调什么功能了,那就给相应的这个service发请求就行了,这样呢就形成了我们上层的一个service层网络,同样的在下层呢,我们这些应用,这些pod真正要进行处理请求,这个呢,我们称为pod层网络,对吧?Service网络,Pod网络,Pod网络呢,我们一开始也在集群规划的时候指定了pod了,网络范围是192168。
07:00
零点几,所以也就解释了为什么我们在这儿打印每一个pod的时候,库包l ctrl get portd get portd-OY,每一个pod的IP呢,都是192168范围域的,好,那现在呢,我们两层网络以后呢,请求流量进来,默认呢应该先来到service对吧,由service负载均衡打给这个pod,但实际上呢,K8S不希望这么做,因为未来啊,我们的这个微服务众多,相当于我们未来会有service n有很多的service层的东西,那接下来怎么办呢?其实如果我们想要访问商城,就像京东,京东是不是会有统一的域名,我们按照京东点com访问,如果呢,京东是购物车的话,那可能会访问cut点京东点com,如果呢是订单,可能会是order点京东点com,然后呢,京东是通过域名来区分,我们要去哪个,所以呢,我们K8S集群也希望我们这么来做,然后呢,他就引入了一层,叫这一层呢。
08:00
大家可以看成是service层的统一网关入口,那有了它的好处是什么呢?假设我们现在对于我们整个集群这个服务的访问,我呢现在是访问域名,比如我访问叉叉at硅谷点com,我这个域名可能会变,比如我要访问订单order at硅谷点com,我要访问用户user at硅谷点com,那咋办呢?你无论访问任何at硅谷点com所有的请求,流量呢,先打入到我们这一层,这一层呢,其实在底层就是一个N来帮我们来负载均衡反向代理的,然后呢,那接下来流量都打给这个English以后由English来负责判断一看你,诶,我发现呢,你的整个HT这一块的路径,你访问的是order.at硅谷点com,你的域名是它,那我呢,就可以说order.at硅谷点com的这一块域名的所有服务都由service a来进行处理,那能由service a来处理,相当请求流量,我一判断呢,是这个域名。
09:00
我交给service a service a呢又负载均衡交给是不是这两个pod service a1判断,诶这两个pod呢,任意一个都行,所以呢,它接下来由它来进行处理啊,同样的,如果呢,我发请求的时候,我的域名叫user.and硅谷点com,那我呢就可以写一个规则,就是说如果你访问user.and硅谷点com这块的所有请求由service b来处理,Service b呢一看,那我们呢,这三个pod能处理,我呢就负载均衡的发给某个pod,比如发给了他,同样的假设呢,你访问的另外一个请求,你甚至访问的是and归点com下的product,对吧?你访问的是他,然后呢,如果你是他,那接下来我就认为以product这个路径开始的,那都交给商品服务来进行处理,所以呢,我可以把此次关于他的所有请求我都交给service c,由他来处理,Service c呢,又会选择一个pod来进行处理,假设你选择了它,所以呢,这就是我们整个。
10:00
到整个网络的这一个层级原理,所有的请求流量进来,应该先经过englishce,我们进行判断,你到底是访问哪个域名或者哪个路径,然后呢,哪个域名交给哪个service,有哪个service再交给哪个pod,这样一层一层下来,这就是我们说的English层的这个网络,而这个网络呢,底层就是拿N来做的,那我们想要用到它,那么就先得安装我们这个英,而英这一层呢,我们K8S是默认不带的,但是呢,我们可以给它安装上,那这个安装呢,大家可以来参照我们这个步骤,我们说有了K8S啊,其实后来的所有东西安装都非常简单,比如你把它的这个压ma,只要你能下载来,接下来呢,你酷controller a play1应用就行了,但这个下载呢,由于get have,有可能呢,下载不来,我呢,就把这个下载来的这个文件里边,包括这个文件里边会指定一个镜像,这个镜像呢,以前的这个镜像也老下载不来,我给大家看一。
11:00
我把这个镜像呢,先改为阿里云的我我的这个镜像地址了,所以下载的也比较快,所以我们接下来安装English也非常简单,我们知道English是干啥的,相当于是我们整个整个K8S集群的网关入口,那接下来呢,我就把这个雅ma文件的配置,我一复制,我来VI English点加码,把内容呢我一粘贴,我让它,我让库controltr了play应用play-F叫English,好,我们把这个应用English呢就安装好了,安装好呢我们来确认一下,大家会看到name space English,像English呢,安装会在这个名称空间下,当然我也不管这么多了,我直接get po-A,大家就会看到,那现在呢,重新会创建一些东西,对吧,创建这些东西,这些东西呢,等真的都running运行成功了以后,我们的English就安装好了那。
12:00
过来稍等,这块安装好,就相当于我们整个T8S的集群,我们可以拥有一个统一的网关入口了,至于这个网关我们这一块该怎么配置,怎么用,那下节课可以来继续来探索,现在来看一下有没有都安装好,哎,大家就来稍等就行,那我们大概等了三分钟,我们的这个English呢就安装好了,保证呢它是running状态,另外呢,一定要注意我们这个English的整个安装还会产生一个service,这个service呢叫English NX,就是它,它呢我们现在是以note po方式暴露,叫31405和32401,我把这一块呢给大家截一个图,因为English要接所有的请求流量,所以English呢就得有一个端口来截流量,所以我们这个端口呢,其实还是以node port的方式暴露出来的,大家也能看到我们这个呢,是以node port方式呢暴露出来,也就是说我们。
13:00
唯一注意的就是31405和32401这两个东西啊,这两个端口一定要我们安全组放行,因为我们之前啊,已经把3万到32767这些我都放行了,所以呢我就不用额外写了,因为我们说只要以node port方式进行暴露的端口都会开3万到32767之间的随机,所以我们的这个English n现在也开的是这个端口,而且呢,这个端口大家注意,你访问31405,这是HTTP的八零端口,如果你访问32401,这是HTTPS的443端口,所以呢,我也可以这么来做,比如我访问任意一台机器的这个端口叫31405,这相当于来到我们集群的总网关层的HTTP端口,我会看到呢,它呢其实也是一个NG,它给我们打印404NOTE found,而如果呢,我们来访问,这个叫32401。
14:00
它呢,其实是来到我们集群内部的HTTPS端口,HTPS端口,只不过呢,我们现在这个HTPS,然后我们要访问加上HTTPS,因为我们现在这个没配置,就算我们这个加上这个默认呢,那么现在这个效果还是NG404好,所以我们下一节课呢,就来通过对于我们整个总网关的这个入口配置来看最终会达到什么样的效果,安装完以后来在这呢记录一下,安装完以后呢,如果想要使用,安装完以后呢,我们是这两个地址,一个是它这是HTVS的,还有一个叫HTTP的,那未来所有的请求流量都是呢,进入到我的,从我的这一块入口来进,叫31405,所以未来所有请求啊,都应该发给这两个端口,由我们这个网关统一往下进行。
15:00
处理,包括呢,我们这个English网关该怎么用,这是我们这个English ens的官方地址,它打开照着它的这一块应用,比如用用户手册来进行使用就行了,比如他呢会说你标一些注解,就会拥有什么功能,比如有路径重写功能,灰度发布功能等等等等,那么下一刻呢,就以两个功能作为简单代表来测试一下,因为后来呢,在库珀斯菲尔集群里边也集成了我们整个网关路由,我们说的这个网关由它呢就是使用English,不是English,它呢就是使用in,做的就是in做的好,下一节课呢,我们再来进行测试。
我来说两句