Day11-Kubernetes 那些事 - Ingress 篇(三)

前言

昨天的文章提到 Ingress 其实也可以用来做负载平衡,只是要利用其他种方式来实现,所以接下来这篇文章就来好好的讲一下 Ingress Controller 是如何做到负载平衡。

Ingress Controller

首先要来介绍的是 Ingress Controller ,看名字应该就知道是负责控制 Ingress 的物件,由於我们可能会因为不同的专案性质建立出不同的 Ingress ,这时候就必须要有一个管理众多 Ingress 的物件,就像管理众多 Node 的 Master 一样。

除了管理 Ingress 之外其实 Controller 最重要的功能就是负载平衡了,这边附上官方文件上的一段文字:

In order for the Ingress resource to work, the cluster must have an ingress controller running.

所以读者如果要使用 Ingress 的话还是建立一下 Controller 吧XD

最後加了 Ingress Controller 後整体架构就会像这样:

Ingress Controller 形式

接下来讲讲 Ingress Controller 是利用哪两个形式来实现负载平衡,一个是 GCE 另一个是 nginx 。

  • GCE

    利用 GCP 上的 Load Balancer 来实现负载平衡,但我们只是在本机上练习而已,所以就不用 GCE 了,不然还要多收费XD

  • nginx

    利用 nginx 进行负载平衡,其实 nginx 本身就是一个反向代理服务器,所以本身就可以用来做负载平衡了,为了不让文章篇幅过长,这里笔者就不细谈 nginx 了。

Ingress Controller 建立

官网很好心一开始就有把需要先建立起来的物件写成一份 yaml 档,读者可以直接复制底下的指令安装即可,但笔者还是建议把管网写好的档案复制一份到专案内,这样後续如果要重建也比较快。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/mandatory.yaml

可以看到建立了非常多的东西,有些读者可能目前还不清楚是在做什麽的,像是 configmapnamespacedeployment 等等,这些笔者後续的文章都会提到,读者可以先藉由官网创的名字来了解这几个物件是可能是用来做什麽事情。

Ingress Controller 细谈

上面建立的过程中应该可以发现 Ingress Controller 其实是一个大杂烩,利用了非常多的内容来实践,其实 Ingress Controller 是有产生一个 Pod 来处理负载平衡的工作,这边可以下 kubectl get pods -n ingress-nginx 来查看。

接下来可以利用 exec 这个参数进入 Pod 里面查看内容,这边可以下 kubectl exec -ti -n ingress-nginx PodName -- /bin/sh

可以发现熟悉的 nginx.conf 在这个资料夹里面,所以可以猜测其实真正在做负载平衡的还是 nginx。

接下来可以下 cat nginx.conf 来查看内容,里面会发现这段设定

可以发现在上一篇文章设定好的 Ingress 内容全部转成 nginx 设定了,路径变成 location 网域变成 server_name 而 Service 内容也全部被包在 location 区块内,所以我们可以推断当今天有一个 Request 进来,一开始会透过 nginx 进行转发,而转发条件就是根据 nginx.conf 的内容,至於详细的 nginx.conf 的内容会在之後的文章介绍给大家。

Ingress Controller Annotation

还记得笔者在 Label 文章中提到,其实 Annotation 并不是完全没用处,在 Ingress Controller 里 Annotation 可是非常重要的设定,由於这个 nginx.conf 是官方自己创的,为了让整体变得更弹性,因此我们可以在 Ingress 里面加上 Annotation ,里面撰写 nginx 的相关设定,这样 Controller 就会把这些设定套用进 nginx.conf 内,而官网也把 Annotation 内的写法讲得很清楚,有兴趣的读者可以参考这个网页

Demo

最後再来简单的 Demo 一下,其实 Controller 就只是个管理众多 Ingress 的集大成而已,真正做事情还是要依靠 Ingress 去做 Service 的串接,所以跟之前一样只要输入 Ingress 设定好的网域就可以看到结果了。

小结

今天介绍了 Ingress Controller ,终於把整个 Ingress 讲完了,各位读者如果要建立 Ingress 也别忘了把 Controller 顺便建立起来,这样才能够让整个网站後续运作得更顺利喔!但相信读者还是会想要自己手动设定 nginx.conf 这个档案,这些设定的内容都会在之後的文章一一介绍给大家,可以敬请期待。

接下来的文章会再重新以 Pod 为基础扩充一些内容进去,如果对於文章有任何问题都欢迎留言给我,那我们就下篇文章见~


<<:  Dungeon Mizarka 014

>>:  第 11 天 范本驱动表单的动态检核讯息|ngSubmit

Git ll & Github

Branch 在团队协作中,不可能全部人都同时使用同一支档案,也就代表我们需要各个击破,这就是分支的...

关於 position 属性

position 属性可以设定元素在网页中的位置,属性值有以下: static ( 预设值 ) re...

【Day08】条件渲染 Conditional Rendering

在 JSX 中,可以使用 JavaScript 中 if 陈述式 或条件运算子如 三元运算子(ter...

day6_Windows,Linux, MacOs 的虚拟化方案

什麽是虚拟化? 这里泛指模拟不同 os 与 cpu 架构的模拟器,所以包含小时候常玩的 GBA,GB...

【没钱买ps,PyQt自己写】Day 6 – 我们的第一个 output 手段 – Qlabel

看完这篇文章你会得到的成果图 前言 我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构...