我们将使用 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 配置示例

    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. server {
    24. listen 443;
    25. proxy_pass rancher_servers_https;
    26. }
    27. }
  3. nginx.conf保存到/etc/nginx/nginx.conf

  4. 运行以下命令重新加载 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