栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kubernetes——使用Rinetd进行service的负载均衡

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kubernetes——使用Rinetd进行service的负载均衡

文章目录
  • 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其他文档列表

Kubernetes——使用Rinetd进行service的负载均衡 一、使用Rinetd进行service的负载均衡 1.1 访问集群

利用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.yml
1.2.3 查看是否生效
[root@k8s-master tomcat-service]# kubectl get service
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes       ClusterIP   10.96.0.1                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 Foundbody {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是随机的了

1.3 使用Rinetd对外暴露8000端口

通过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服务对外暴露

1.3.2 安装、配置Rinetd 1.3.2.1 下载Rinetd
# 可以直接下载
链接: https://pan.baidu.com/s/1otUETTg87HJHQi7VzzhF9w 提取码: 36fw
# 也可以去官方下载
http://www.boutell.com/rinetd/http/rinetd.tar.gz
1.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——设置资源限定
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/592209.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号