在本文中,我们将演示如何将为Kubernetes集群中部署的应用程序配置nginx负载平衡。众所周知,NGINX是高度评价的开源Web服务器之一,但它也可以用作TCP和UDP负载平衡器。与HAProxy相比,使用nginx作为负载均衡器的主要好处之一是它还可以负载均衡基于UDP的流量。
我假设Kubernetes集群已经设置好并且已经启动并正在运行,我们将为NGINX创建基于CentOS / RHEL的VM。
以下是实验室设置的详细信息:
让我们跳到NGINX的安装和配置,在我的情况下,我将最少的CentOS 8用于NGINX。
登录到您的CentOS 8系统并启用epel存储库,因为nginx软件包在CentOS / RHEL的默认存储库中不可用。
[linuxtechi@nginxlb ~]$ sudo dnf install epel-release -y运行以下dnf命令以安装nginx,
[linuxtechi@nginxlb ~]$ sudo dnf install nginx -y通过在rpm命令下运行来验证NGINX详细信息,
#rpm -qi nginx通过在命令下运行,在防火墙中允许NGINX端口
[root@nginxlb ~]# firewall-cmd --permanent --add-service=http[root@nginxlb ~]# firewall-cmd --permanent --add-service=https[root@nginxlb ~]# firewall-cmd –reload使用以下命令将SELinux设置为许可模式,
[root@nginxlb ~]# sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config[root@nginxlb ~]# setenforce 0[root@nginxlb ~]#在Kubernetes中,nginx入口控制器用于处理已定义资源的传入流量。当我们部署入口控制器时,那时还将创建一个服务,该服务将主机节点端口映射到端口80和443。这些主机节点端口从每个工作节点打开。要获取此详细信息,请登录到kube主节点或控制计划并运行,
$ kubectl get all -n ingress-nginx正如我们可以看到上面的输出,NodePort 32760每个工人节点被映射到端口80和NodePort 32375被映射到443端口。我们将在Nginx配置文件中使用这些节点端口来平衡TCP通信量。
编辑nginx配置文件,并向其中添加以下内容,
[root@nginxlb ~]# vim /etc/nginx/注释掉“服务器”部分的行(从38到57),并添加以下几行,
upstream backend { server 192.168.1.41:32760; server :32760;} server { listen 80; location / { proxy_read_timeout 1800; proxy_connect_timeout 1800; proxy_send_timeout 1800; send_timeout 1800; proxy_set_header Accept-Encoding ""; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://backend; } location /nginx_status { stub_status; }}
保存并退出文件。
按照上述变化,当任何请求进入端口80上的nginx服务器IP那么它将被路由到Kubernetes工作节点的IP(上NodePort()32760)。
让我们使用以下命令启动并启用NGINX服务:
[root@nginxlb ~]# systemctl start nginx[root@nginxlb ~]# systemctl enable nginx要测试nginx作为Kubernetes的TCP负载平衡器是否工作正常,请部署基于nginx的部署,通过服务公开部署,并为nginx部署定义入口资源。我已经使用以下命令和yaml文件来部署这些Kubernetes对象,
[kadmin@k8s-master ~]$ kubectl create deployment nginx-deployment --image=nginxdeployment.apps/nginx-deployment created[kadmin@k8s-master ~]$ kubectl expose deployments nginx-deployment --name=nginx-deployment --type=NodePort --port=80service/nginx-deployment exposed[kadmin@k8s-master ~]$[kadmin@k8s-master ~]$ vi nginx-ingress.yaml[kadmin@k8s-master ~]$ kubectl create -f nginx-ingress.yamlingress.networking.k8s.io/nginx-ingress-example created[kadmin@k8s-master ~]$运行以下命令以获取部署,svc和入口详细信息:
完美,让我们更新系统的主机文件,以便指向nginx服务器的IP地址 ()
让我们尝试对网址进行ping操作,以确认它指向NGINX服务器IP,
# ping Pinging [] with 32 bytes of data:Reply from : bytes=32 time<1ms TTL=64Reply from : bytes=32 time<1ms TTL=64现在,尝试通过网络浏览器访问URL,
很好,上面证实了NGINX作为TCP负载平衡器可以正常工作,因为它可以负载平衡K8s工作节点之间端口80上的TCP通信量。
假设我们在Kubernetes内部运行了一个基于UDP的应用程序,该应用程序以UDP端口31923作为NodePort类型公开。我们将配置NGINX以平衡从端口1751到k8s工作节点的NodePort的UDP流量。
假设我们已经运行了一个名为“ l inux-udp-port ”的容器,其中有nc命令可用,并通过服务在UDP端口10001上将其作为NodePort类型公开。
[kadmin@k8s-master ~]$ kubectl expose pod linux-udp-pod --type=NodePort --port=10001 --protocol=UDPservice/linux-udp-pod exposed[kadmin@k8s-master ~]$[kadmin@k8s-master ~]$ kubectl get svc linux-udp-podNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGElinux-udp-pod NodePort 10.96.6.216 <none> 10001:31923/UDP 19m[kadmin@k8s-master ~]$要将NGINX配置为UDP负载平衡器,请编辑其配置文件,并在文件末尾添加以下内容
[root@nginxlb ~]# vim /etc/nginx/……stream { upstream linux-udp { server 192.168.1.41:31923; server :31923; } server { listen 1751 udp; proxy_pass linux-udp; proxy_responses 1; } ……保存并退出文件,然后使用以下命令重启nginx服务,
[root@nginxlb ~]# systemctl restart nginx通过运行以下命令在防火墙中允许UDP端口1751
[root@nginxlb ~]# firewall-cmd --permanent --add-port=1751/udp[root@nginxlb ~]# firewall-cmd --reload登录到POD并启动一个虚拟服务,该服务侦听UDP端口10001,
[kadmin@k8s-master ~]$ kubectl exec -it linux-udp-pod -- bashroot@linux-udp-pod:/# nc -l -u -p 10001保持原样,从要测试UDP负载平衡的计算机登录,确保该计算机可以访问NGINX服务器,运行以下命令以连接到NGINX服务器IP上的udp端口(1751),然后尝试输入字符串
#nc -u 1751
[root@linux-client ~]# nc -u 1751Hello, this UDP LB testing现在转到POD的ssh会话,在那里我们应该看到相同的消息,
root@linux-udp-pod:/# nc -l -u -p 10001Hello, this UDP LB testing上面的完美输出确认,NGNNX可以正常使用UDP负载平衡。这就是本文的全部内容,希望您能从中找到有用的信息,并帮助您设置NGINX负载均衡器。请随时在下面的评论部分中分享您的技术反馈。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删