- Kubernetes——使用Rinetd进行service的负载均衡
- 一、使用Rinetd进行service的负载均衡
- 1.1 访问集群
- 1.2 改写service.yml,支持负载均衡
- 1.2.1 修改service.yml内容
- 1.2.2 重启service
- 1.2.3 查看是否生效
- 1.3 使用Rinetd对外暴露8000端口
- 1.3.1 端口转发工具-Rinetd
- 1.3.2 安装、配置Rinetd
- 1.3.2.1 下载Rinetd
- 1.3.2.2 安装Rinetd
- 1.3.3 测试外部是否能访问
- 1.3.4 缺陷
- Kubernetes其他文档列表
利用yml部署一个tomcat集群后,客户端访问,需要指定端口去访问,结构图如下
此时就会发现一个问题,每次访问tomcat分布式集群,都需要指定节点的ip,而且现在要上分布式的情况,都是因为单一的节点不够用,才需要上集群,所以这套结构,显然缺点啥,而且Master节点的service8000端口,似乎只有服务器内部可用,有那么点浪费了。那么改进之后的结构图就出来了。
由Master节点去做这个负载均衡,让他随机的去挑选Node1或者Node2即可,第二个问题又来了,如何去做这个负载均衡?
其实kubernetes的service自身就可以做到负载均衡
1.2 改写service.yml,支持负载均衡 1.2.1 修改service.yml内容apiVersion: v1
kind: Service
metadata:
name: tomcat-service
labels:
app: tomcat-service
spec:
# 注释掉这行
# type: NodePort
selector:
app: tomcat-cluster
ports:
- port: 8000
targetPort: 8080
# 注释掉这行,等于所有节点都不暴露32500了,都由8000来接收
# nodePort: 32500
1.2.2 重启service
kubectl apply -f service.yml1.2.3 查看是否生效
[root@k8s-master tomcat-service]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.11.3 使用Rinetd对外暴露8000端口443/TCP 17d # IP是10.111.212.119,端口号是8000 tomcat-service ClusterIP 10.111.212.119 8000/TCP 12m [root@k8s-master tomcat-service]# kubectl describe service tomcat-service Name: tomcat-service Namespace: default Labels: app=tomcat-service Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"tomcat-service"},"name":"tomcat-service","namespace":"de... Selector: app=tomcat-cluster Type: ClusterIP IP: 10.111.212.119 Port: 8000/TCP TargetPort: 8080/TCP Endpoints: 10.244.1.23:8080,10.244.2.20:8080 Session Affinity: None Events: [root@k8s-master tomcat-service]# curl 10.111.212.119:8000 HTTP Status 404 – Not Found body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}HTTP Status 404 – Not Found Type Status Report
Description The origin server # 此处观看的并不清晰,所以创建一个web页面去查看 # 此处的知识,需要基于NFS文件集群共享来实现 # 在主节点上操作 [root@k8s-master tomcat-service]# cd /usr/local/data/www-data/ [root@k8s-master www-data]# mkdir test [root@k8s-master www-data]# cd test/ [root@k8s-master test]# vim index.jsp # 写入如下内容 <%=request.getLocalAddr()%> # 保存退出 # 再次执行curl请求 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.2.20 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.1.23 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.2.20 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.1.23 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.2.20 [root@k8s-master test]# curl 10.111.212.119:8000/test/index.jsp 10.244.2.20 # 就可以发现请求的节点ip是随机的了
通过10.111.212.119确实可以做到负载均衡的访问,但是我们的客户端浏览器并不能访问啊,这个ip一看就是内网ip,而我们的ip肯定是要192.168.8.64:8000/test/index.jsp,这样子才能被我们的客户端访问,此时就需要用到Linux系统中的端口转发组件——Rinetd了
1.3.1 端口转发工具-Rinetd-
Rinetd是Linux操作系统中为重定向传输控制协议工具
-
可将源IP端口数据转发至目标IP端口
-
在Kubernetes中用于将Service服务对外暴露
# 可以直接下载 链接: https://pan.baidu.com/s/1otUETTg87HJHQi7VzzhF9w 提取码: 36fw # 也可以去官方下载 http://www.boutell.com/rinetd/http/rinetd.tar.gz1.3.2.2 安装Rinetd
# 进入/usr/local目录,因为我把rinetd.tar.gz放在这里面了 cd /usr/local # 解压rinetd.tar.gz tar -zxvf rinetd.tar.gz # 进入解压后的目录 cd rinetd # 修改rinetd.c中的内容 sed -i 's/65536/65535/g' rinetd.c # 创建/usr/man目录,这个目录是rinetd官方强制要求的 mkdir -p /usr/man/ # 安装、更新gcc yum install -y gcc # 编译安装Rinetd make && make install # 配置端口映射 vim /etc/rinetd.conf # 写入以下内容,0.0.0.0表示针对任意的IP开放,10.100.22.231表示需要开放的IP,第一个8000表示对外开放8000,映射的是第二个8000端口 0.0.0.0 8000 10.100.22.231 8000 # 挂载配置 rinetd -c /etc/rinetd.conf # 查看是否挂载成功 netstat -tulpn [root@k8s-master test]# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ... tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26449/rinetd ... # 重新挂载 pkill rinetd rinetd -c /etc/rinetd.conf # 设置开机自启 rinetd -c /etc/rinetd.conf 把这条命令加到/etc/rc.local里面就可以开机自动运行1.3.3 测试外部是否能访问 1.3.4 缺陷
一旦删除service,再重新create这个service,那么就需要重新查询service的IP,再重新挂载
Kubernetes其他文档列表- 初学Kubernetes——k8s简介
- 初学Kubernetes——Kubernetes的安装
- 初学Kubernetes——使用Dashboard部署Tomcat集群
- 初学Kubernetes——使用Deployment脚本部署Tomcat集群
- 初学Kubernetes——使用NodePort的方式让外部访问Tomcat集群
- 初学Kubernetes——基于NFS文件文件集群共享
- 初学Kubernetes——使用NFS映射的目录
- 初学Kubernetes——使用Rinetd进行service的负载均衡
- 初学Kubernetes——设置资源限定



