欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

K8S入门到精通06-基于Rinted的Service负载均衡

程序员文章站 2024-01-28 16:02:22
...

Service提供负载均衡实现

K8S入门到精通06-基于Rinted的Service负载均衡

这里我们直接使用Service的负载均衡,不再将端口直接暴露在宿主机节点上,集群内部通过k8s内部网络相互访问。由tomcat-service这个特殊的pod来实现流量转发与负载均衡。

修改tomcat-service.yml如下:

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  labels:
    app: tomcat-service # Service也是一个特殊的pod,需要设置lables
spec:
#  type: NodePort # Service类型
  selector:
    app: tomcat-cluster # 指定绑定的pod
  ports:
  - port: 8000 # Service在k8s集群内部暴露的端口
    targetPort: 8080 # 被映射的容器暴露端口
#    nodePort: 32500 # 集群每个Node节点上对外暴露的端口

仅需注释如下两行内容

#  type: NodePort # Service类型
#    nodePort: 32500 # 集群每个Node节点上对外暴露的端口

变更service

kubectl apply -f tomcat-service.yml

在NFS共享目录中增加测试index.jsp,验证负载均衡效果

# 在Master节点(NFS Server)中执行如下命令
mkdir /data/www-data/test/
echo "IP:<%=request.getLocalAddr()%>" > /data/www-data/test/index.jsp
# 查看Service内部IP
kubectl get service tomcat-service
# 使用curl测试,10.103.113.6为上一步中获取的ClusterIP
curl 10.103.113.6:8000/test/index.jsp
# 返回处理请求的pod容器的ip
# IP:10.244.1.17

端口转发工具-Rinetd

上一步中10.*段的IP为K8S集群内部通信使用的IP,如何将这些IP提供的端口映射到外部呢?

  • Rinetd是Linux操作系统中为重定向传输控制协议工具
  • 可将源IP端口数据转发至目标IP端口
  • 在Kubernetes中用于将service服务对外暴露

rinted安装

rinted源码无法从官网下载,资源以事先准备好

这里我们使用Master节点作为端口转发宿主机,所有rinted安装在Master节点(192.168.0.31)上,以下命令均在该节点执行。

# 解压rinted源码
tar -zxf rinetd.tar.gz
cd rinetd/
# 修改rinted运行映射的端口范围
sed -i 's/65536/65535/g' rinted.c
# 创建rinted依赖目录
mkdir -p /usr/man/
# 安装C语言编译器
yum install -y gcc
# 编译并安装
make && make install

配置rinted

增加配置文件/etc/rinetd.conf

# 宿主机映射监听的IP+端口(0.0.0.0表示所有IP)、映射目的IP+端口
# 10.103.113.6即tomcat-service使用的ClusterIP
0.0.0.0 8000 10.103.113.6 8000

运行rinted

rinetd -c /etc/rinetd.conf

查看映射情况

使用netstat -nptl可以看到rinetd开启了8000端口

使用如下地址可在浏览器中访问rinted+service提供的服务

http://192.168.0.31:8000/test/index.jsp
K8S入门到精通06-基于Rinted的Service负载均衡

总结

目前我们已经学习了k8s集群对外暴露服务的两种方式

  1. 使用Service提供的NodePort,在每一个Node节点开启端口映射,实现流量的转发
  2. Rinted+Service,使用Rinted设置对外暴露的IP+端口,通过Service实现访问的负载均衡

一般而言,Rinted+Service性能上会略胜一筹,大型集群应用优先考虑选择该种方式。

版权说明

本文章内容为马士兵教育《架构师高级技能kubernetes入门到精通》课程的学习笔记

百度网盘上相关源码资料包 提取码:xdji