Rancher 2.x 负载均衡并绑定域名对外提供服务

Docker & K8S 1135 字

ingress 暴露服务

在上一篇中,我们部署了一个 Go 应用,在这一小节中,我们将增加其副本并且做负载均衡。

在最开始我们一共有三台节点,其中一台跑 Rancher,一台 Master 和一台 Node,既然是负载,那肯定是需要将 pod 运行在两个节点上,所以我们需要新增一个主机节点,由于我的电脑内存即将吃紧所以对其配置进行了调整。

机器ip配置备注
CentOS7192.168.0.1992cpu 4G ramRancher
CentOS7192.168.0.2102cpu 4G ramMaster
CentOS7192.168.0.2112cpu 2G ramNode
CentOS7192.168.0.2121cpu 2G ramNode

我的那一台电脑一共是有 16G 已经无法再增加节点了,所以我们为了模拟多节点,我们只能通过削减其他虚拟机的配置空闲出来一些资源,然后新建一个虚拟机。

我们重复第一章的内容,然后将其加入节点。

2023-03-04T12:00:55.png

我们找到集群,然后点击编辑,在页面的最下方,还有增加节点的方法。

2023-03-04T12:01:05.png

2023-03-04T12:01:13.png

当皆甜增加完成后,我们来调整在上一章节中部署的 goapi 应用。

2023-03-04T12:01:26.png

我们 Deployment 部署位 2 个 Pods,同时将端口映射修改为了 NodePort

2023-03-04T12:01:36.png

我们可以看到在两个节点上都调度了 pod,但是出现了报错,这是因为在 worker 宿主机上没有我们设置的目录,我们只需要将可执行文件以相同位置上传上去即可,后续更好的解决方案肯定是 CICD,我会在后面的章节进行讲解。

2023-03-04T12:01:55.png

上传完成后,很快就完成了部署。

2023-03-04T12:02:05.png

由于节点选择的事 NodePort 我们只能通过节点的 IP 地址来对应用进行访问,这很明显不是我们想要的效果,我们一般对外提供服务都是使用域名的形式,然后通过反向代理进行负载均衡到我们的后台计算节点。

在 k8s 中如果想要实现这一效果我们就需要使用 ingress 对外暴露我们的服务。

Ingress 相当于一个 7 层的负载均衡,我们可以理解为是一个反向代理并定义规则的一个 api 对象。Ingress Controller 通过监听 ingress api 转换为各自的配置(常用的有 nginx-ingress,trafik-ingress)。

我们点击负载均衡,然后添加规则。

2023-03-04T12:02:15.png
2023-03-04T12:02:35.png

k8s 为我们提供了一个域名后缀,但是我们通常不会使用,我们来使用自定义域名,其中端口号就是我们要暴露的 80 的端口,我们对外访问的时候,选择的也是这个。

由于是在虚拟集中创建的集群,所以我们绑定域名最简单的方案是修改本地 host 文件,域名直接指向任意一个 worker 节点(Ingress 通过边缘节点对外提供服务,所以如果在生产环境,建议利用 keeplived + lvs 对外提供服务,避免单点故障)。

# maksim.website vitralbox
192.168.0.211 goapi.maksim.website

新件号 ingress 后我们等待完成状态。

2023-03-04T12:02:50.png

2023-03-04T12:02:58.png

2023-03-04T12:03:07.png

我们特意将 woker2 节点上的代码进行了修改,为的就是能够演示出 worker 的样子。

配置 SSL 证书

我们的线上服务一般都会有配置证书的需求,在 Rancher 中配置证书非常容易,我们只需要在资源中选择密文,在选择证书,添加证书即可。

2023-03-05T08:16:05.png

这里需要注意,我们需要进入到 project 下才可以看到资源文件夹。

2023-03-05T08:16:15.png

作用域我们需要注意,这里选择为整个项目或者单个命名空间生效,在这里,我们选择了 myweb。

证书的神情,可以到阿里云免费的 SSL 证书。

添加完证书后,我们修改 goapi 的负载均衡,找到 SSL/TLS 证书选项卡,点击添加证书。

2023-03-05T08:16:33.png

2023-03-05T08:16:51.png

选择我们的证书后,填写对应的域名。点击保存。

2023-03-05T08:15:21.png

当我们访问后就会发现证书已经生效了,在浏览器中显示以增强安全性。

路径重写

当我们要去做路径重写的时候,其实只需要做两项配置即可,如果在 nginx 中我们还需要修改配置文件,然后在 reload,其实 k8s 中的重写和 nginx 基本一致,因为其底层使用的就是 nginx。

例如我们的 goapi这个项目,如果我们想通过 https://goapi.maksim.website/api 来访问我们的接口。我们可以像下面这样操作。

2023-03-05T08:31:25.png

我们先是增加重写规则,表示将 /api/转发到项目上 (.*)代表了分组,也就是我们的重写部分,然后在标签和注释中增加注释。

2023-03-05T08:31:51.png

nginx.ingress.kubernetes.io/rewrite-target = /$1

我们去访问项目。

2023-03-05T08:32:03.png

这个时候我们发现已经是 404 状态了,增加 /api/ 再来看一下。

2023-03-05T08:32:12.png

项目可以访问了。

maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见