配置 NGINX 负载均衡器

将 NGINX 配置为四层负载均衡器(TCP),用于将连接转发到 Rancher 节点。

在此配置中,负载均衡器位于节点的前面。负载均衡器可以是任何能运行 NGINX 的主机。

配置 NGINX 负载均衡器 - 图1备注

不要使用 Rancher 节点作为负载均衡器。

这些示例中,负载均衡器将流量转发到三个 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 中,将所有(端口 80 和端口 443)的 <IP_NODE_1><IP_NODE_2><IP_NODE_3> 替换为你节点的 IP 地址。

    配置 NGINX 负载均衡器 - 图2备注

    参见 NGINX 文档:TCP 和 UDP 负载均衡了解所有配置选项。

示例 NGINX 配置

  1. worker_processes 4;
  2. worker_rlimit_nofile 40000;
  3. events {
  4. worker_connections 8192;
  5. }
  6. stream {
  7. upstream rancher_servers_http {
  8. least_conn;
  9. server <IP_NODE_1>:80 max_fails=3 fail_timeout=5s;
  10. server <IP_NODE_2>:80 max_fails=3 fail_timeout=5s;
  11. server <IP_NODE_3>:80 max_fails=3 fail_timeout=5s;
  12. }
  13. server {
  14. listen 80;
  15. proxy_pass rancher_servers_http;
  16. }
  17. upstream rancher_servers_https {
  18. least_conn;
  19. server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
  20. server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
  21. server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
  22. }
  23. }
  24. http {
  25. server {
  26. listen 443 ssl;
  27. proxy_pass rancher_servers_https;
  28. ssl_certificate /path/to/tls.crt;
  29. ssl_certificate_key /path/to/key.key;
  30. location / {
  31. proxy_pass https://rancher_servers_https;
  32. proxy_set_header Host <rancher UI URL>;
  33. proxy_ssl_server_name on;
  34. proxy_ssl_name <rancher UI URL>
  35. }
  36. }
  37. }
  1. nginx.conf 保存到你的负载均衡器的 /etc/nginx/nginx.conf 路径上。

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

    1. # nginx -s reload

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

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

  1. docker run -d --restart=unless-stopped \
  2. -p 80:80 -p 443:443 \
  3. -v /etc/nginx.conf:/etc/nginx/nginx.conf \
  4. nginx:1.14