nginx安装手册
LVS,Nginx和HAProxy负载均衡对比
Nginx支持TCP代理和负载均衡-stream模块
该 ngx_stream_core_module 模块自1.9.0版开始提供。默认情况下不构建此模块,应使用 --with-stream 配置参数启用它。
IPv6地址在方括号中指定:
UNIX域套接字使用“ unix: ”前缀指定:
该 ssl 参数允许指定此端口上接受的所有连接都应在SSL模式下工作。
该 udp 参数配置一个侦听套接字以处理数据报(1.9.13)。
的 proxy_protocol 参数(1.11.4)允许指定这个端口上接受的所有连接应使用 代理服务器协议 。
该 listen 指令可以有几个特定于与套接字相关的系统调用的附加参数。
不同的服务器必须监听不同的 address : port 对。
可以将地址指定为域名或IP地址,以及可选端口。如果未指定端口,则使用端口53。以循环方式查询名称服务器。
默认情况下,nginx将在解析时查找IPv4和IPv6地址。如果不需要查找IPv6地址,则 ipv6=off 可以指定参数。
默认情况下,nginx使用响应的TTL值缓存答案。可选 valid 参数允许覆盖它:
该 ngx_stream_core_module 模块支持自1.11.2以来的变量。
启动nginx,发现nginx已经开始监听2018端口了
在客户端通过telnet连接realserver的2018端口:
在realserver上查看网络连接:
可以正常连接
在客户端通过telnet连接nginx所在服务器的2018端口
在nginx机器上查看网络连接
在realserver上查看网络连接
nginx是给做了一个TCP连接的中转。
client和nginx有一个tcp长连接,nginx和realserver有一个tcp长连接,但是client和realserver之间并没有tcp长连接,仅由nginx服务器负责数据中转。
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡根据所采用的设备对象( 软/硬件负载均衡 ),应用的OSI网络层次( 网络层次上的负载均衡 ),及应用的地理结构( 本地/全局负载均衡 )等来分类。根据应用的 OSI 网络层次来分类的两个负载均衡类型。
网络模型图,包含了 OSI 模型及 TCP/IP 模型,两个模型虽然有一点点区别,但主要的目的是一样的,模型图描述了通信是怎么进行的。它解决了实现有效通信所需要的所有过程,并将这些过程划分为逻辑上的层。层可以简单地理解成数据通信需要的步骤。
根据负载均衡所作用在 OSI 模型的位置不同,负载均衡可以大概分为以下几类:
在实际应用中,比较常见的就是四层负载及七层负载。这里也重点说下这两种负载。
所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
有时候我们需要从外部网络访问内部网络的服务的时候,可能需要使用到tcp代理,比如从外部连接内部网络的redis,这些服务有时候是没有提供外网地址的,比如腾讯云的redis服务器,但是有时候我们为了调试方便,需要能在外网访问云中的redis服务器,这个时候就可以利用nginx提供的tcp代理功能。
具体操作如下:
打开/etc/nginx/nginx.conf,正常情况下是这个地址
在最后添加
保存退出
nginx -t
检查修改是否正确
nginx -s reload
重新加载nginx配置。
这个时候就可以在外部通过这台机器的9999端口连接内网的redis。
但是这里是由安全风险的,在不使用的情况下,尽量关闭端口。
Nginx是比较不错的开源Web服务器之一,但它也可以用作TCP和UDP负载均衡器。使用Nginx作为HAProxy的负载均衡器的主要好处之一是,它还可以负载均衡基于UDP的流量。在本文中,我们将演示如何将NGINX配置为Kubernetes集群中部署的应用程序的负载均衡。
假设Kubernetes集群已经配置好,我们将基于 CentOS 为Nginx创建一个虚拟机。
以下是实验种设置的详细信息:
Nginx (CenOS8 Minimal) - 192.168.1.50
Kube Master - 192.168.1.40
Kube Worker 1 - 192.168.1.41
Kube Worker 2 - 192.168.1.42
步骤1)安装epel仓库
因为nginx软件包在CentOS系统默认仓库里面没有,所以需要安装epel仓库:
[root@nginxlb ~]# dnf install epel-release -y
步骤2)安装Nginx
运行以下 命令 安装nginx:
[root@nginxlb ~]# dnf install nginx -y
使用rpm 命令 验证Nginx包的详细信息:
[root@nginxlb ~]# rpm -qi nginx
配置防火墙,允许访问nginx的http和https服务:
[root@nginxlb ~]# firewall-cmd --permanent --add-service=http
[root@nginxlb ~]# firewall-cmd --permanent --add-service=https
[root@nginxlb ~]# firewall-cmd –reload
使用以下命令将SE Linux 设置为permissive模式,并重启系统使selinux关闭生效:
[root@nginxlb ~]# sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config
[root@nginxlb ~]# reboot
步骤3)从Kubernetes中获取应用程序的NodePort详细信息
[kadmin@k8s-master ~]$ kubectl get all -n ingress-nginx
从上面的输出中可以看到,每个工作节点的NodePort 32760映射到端口80,NodePort 32375映射到443端口。我们将在Nginx配置文件中使用这些节点端口来做负载均衡。
步骤4)将Nginx配置负载均衡
编辑nginx配置文件,并添加以下内容:
[root@nginxlb ~]# vim /etc/nginx/nginx.conf
注释掉“server”部分(从38到57行):
并添加以下几行:
upstream backend {
server 192.168.1.41:32760
server 192.168.1.42: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
}
}
保存配置文件,并退出。
根据上述更改,所有向nginx的80端口的请求,都将被路由到的Kubernetes工作节点(192.168.1.41和192.168.1.42)的NodePort(32760)端口上。
使用以下命令启用Nginx服务:
[root@nginxlb ~]# systemctl start nginx
[root@nginxlb ~]# systemctl enable nginx
测试Nginx的 TCP负载均衡器
要测试nginx作为Kubernetes的TCP负载均衡是否工作正常,请部署基于nginx的deployment,将deployment的端口暴露为80端口,并为nginx 的deployment定义入口资源。我已经使用以下命令来部署这些Kubernetes对象:
[kadmin@k8s-master ~]$ kubectl create deployment nginx-deployment --image=nginx
deployment.apps/nginx-deployment created
[kadmin@k8s-master ~]$ kubectl expose deployments nginx-deployment --name=nginx-deployment --type=NodePort --port=80
service/nginx-deployment exposed
运行以下命令以获取deployments,svc和ingress详细信息:
更新本地主机的hosts文件,以便nginx-lb.example.com指向nginx服务器的IP地址(192.168.1.50)
[root@localhost ~]# echo "192.168.1.50 nginx-lb.example.com" >>/etc/hosts
尝试通过浏览器访问nginx-lb.example.com
总结
上面证实了Nginx作为TCP负载均衡器可以正常工作,因为它可以负载平衡K8s工作节点之间端口80上的TCP通信量。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)