Skip to main content

配置 NGINX 负载均衡

我们将使用 NGINX 作为L4层负载均衡器(TCP),它将请求轮训转发到后端的 Rancher server 节点。在此配置中,负载均衡器位于 Rancher server 节点的前面。负载均衡器可以是任何能够运行 NGINX 的主机。我们不建议使用任意一个 Rancher server 节点作为负载均衡器节点,因为默认配置下每个 K8S 节点都会运行 ingress 控制器,而 ingress 控制器以为host网络模式运行,并默认监听了80443端口,所以默认情况下会出现端口冲突。如果一定要将 NGINX 安装在 Rancher server 某个节点上,那么可以编辑 ingress 控制器配置文件,在args中添加参数,端口根据实际情况修改 --http-port=8880 --http-port=8443。 ingress 控制器修改默认端口后,nginx 配置中代理的后端 server 端口也需要一并修改。

image-20200515141942435

说明:在这些示例中,负载均衡器将被配置为将流量定向到三个 Rancher Server 节点。如果将 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果将 Rancher 安装在 K3s Kubernetes 集群上,则仅需要两个节点。

安装 NGINX#

首先在负载均衡器主机上安装 NGINX,NGINX 具有适用于所有已知操作系统的软件包。我们测试了1.141.15版本。有关安装 NGINX 的帮助,请参阅安装文档

stream模块是必需的,在 NGINX 官方安装包中包含了这个模块。请参阅您的操作系统文档来了解如何在操作系统上安装和启用 NGINX stream模块。

创建 NGINX 配置#

安装 NGINX 之后,您需要使用节点的 IP 地址更新 NGINX 配置文件nginx.conf

  1. 将下面的配置示例复制并粘贴到您喜欢的文本编辑器中,保存为nginx.conf

  2. 在 nginx.conf 配置中,用之前准备的节点的 IP 替换 <IP_NODE_1><IP_NODE_2><IP_NODE_3>

    注意: 有关所有配置选项,请参见NGINX 文档:TCP 和 UDP 负载均衡。

    NGINX 配置示例
    worker_processes 4;
    worker_rlimit_nofile 40000;
    events {
    worker_connections 8192;
    }
    stream {
    upstream rancher_servers_http {
    least_conn;
    server <IP_NODE_1>:80 max_fails=3 fail_timeout=5s;
    server <IP_NODE_2>:80 max_fails=3 fail_timeout=5s;
    server <IP_NODE_3>:80 max_fails=3 fail_timeout=5s;
    }
    server {
    listen 80;
    proxy_pass rancher_servers_http;
    }
    upstream rancher_servers_https {
    least_conn;
    server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
    server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
    server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
    }
    server {
    listen 443;
    proxy_pass rancher_servers_https;
    }
    }
  3. nginx.conf保存到/etc/nginx/nginx.conf

  4. 运行以下命令重新加载 NGINX 配置:

    # nginx -s reload

可选 - 将 NGINX 作为 Docker 容器运行#

除了可以将 NGINX 作为软件包安装在操作系统上外,您也可以将其作为 Docker 容器运行。将已编辑的示例 NGINX 配置另存为/etc/nginx.conf并运行以下命令启动 NGINX 容器:

docker run -d --privileged --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /etc/nginx.conf:/etc/nginx/nginx.conf \
nginx:1.14
Last updated on by yzeng25