7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装)

如果你的开发或测试环境要求在负载均衡器上终止 TLS/SSL,而不是在 Rancher Server 上,请部署 Rancher 并配置负载均衡器。

如果要在基础设施中对 TLS 集中进行终止,请使用 7 层负载均衡器。7 层负载均衡还能让你的负载均衡器基于 HTTP 属性(例如 cookie 等)做出决策,而 4 层负载均衡器则不能。

本文中的安装步骤将引导你使用单个容器部署 Rancher,并提供 7 层 NGINX 负载均衡器的示例配置。

操作系统,Docker,硬件和网络要求

请确保你的节点满足常规的安装要求

安装概要

1. 配置 Linux 主机

根据我们的要求配置一个 Linux 主机来启动 Rancher Server。

2. 选择一个 SSL 选项并安装 Rancher

出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信(如登录和与集群交互)的安全。

7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) - 图1你是否需要:

  • 完成离线安装。
  • 记录所有 Rancher API 的事务。

继续之前,请参见高级选项

选择以下的选项之一:

选项 A:使用你自己的证书 - 自签名

如果要使用自签名证书来加密通信,你必须在负载均衡器(后续步骤)和 Rancher 容器上安装证书。运行 Docker 命令部署 Rancher,将 Docker 指向你的证书。

7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) - 图2先决条件:

创建自签名证书。

  • 证书文件的格式必须是 PEM。

使用自签名证书安装 Rancher

  1. 在运行 Docker 命令部署 Rancher 时,将 Docker 指向你的 CA 证书文件。

    docker run -d --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /etc/your_certificate_directory/cacerts.pem:/etc/rancher/ssl/cacerts.pem \ rancher/rancher:latest 选项 B:使用你自己的证书 - 可信 CA 签名的证书

如果你的集群面向公众,则最好使用由公认 CA 签署的证书。

7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) - 图3先决条件:

  • 证书文件的格式必须是 PEM。

使用授信 CA 签发的证书安装 Rancher

如果你使用授信 CA 签发的证书,你无需在 Rancher 容器中安装证书。但是,请确保不要生成和存储默认的 CA 证书(你可以通过将 --no-cacerts 参数传递给容器来实现)。

  1. 输入以下命令:

    1. docker run -d --restart=unless-stopped \
    2. -p 80:80 -p 443:443 \
    3. rancher/rancher:latest --no-cacerts

3. 配置负载均衡器

在 Rancher 容器前使用负载均衡器时,容器无需从端口 80 或端口 443 重定向端口通信。你可以通过传递 X-Forwarded-Proto: https 标头禁用此重定向。

负载均衡器或代理必须支持以下内容:

  • WebSocket 连接

  • SPDY / HTTP/2 协议

  • 传递/设置以下标头:

    标头描述
    Host用于访问 Rancher 的主机名。识别客户端所请求的服务器。
    X-Forwarded-Protohttps识别客户端连接负载均衡器或代理时所用的协议。

    注意:如果此标头存在,rancher/rancher 不会将 HTTP 重定向到 HTTPS。
    X-Forwarded-Port用于访问 Rancher 的端口。识别客户端连接到负载均衡器或代理时所用的端口。
    X-Forwarded-For客户端 IP 地址识别客户端的原始 IP 地址。

示例 NGINX 配置

此 NGINX 配置已在 NGINX 1.14 上进行了测试。

7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) - 图4备注

此 NGINX 配置只是一个示例,可能不适合你的环境。如需查阅完整文档,请参见 NGINX 负载均衡 - HTTP 负载均衡

  • rancher-server 替换为运行 Rancher 容器的节点的 IP 或主机名。
  • 将两处的 FQDN 均替换为 Rancher 的 DNS 名称。
  • /certs/fullchain.pem/certs/privkey.pem 分别替换为服务器证书和服务器证书密钥的位置。
  1. worker_processes 4;
  2. worker_rlimit_nofile 40000;
  3. events {
  4. worker_connections 8192;
  5. }
  6. http {
  7. upstream rancher {
  8. server rancher-server:80;
  9. }
  10. map $http_upgrade $connection_upgrade {
  11. default Upgrade;
  12. '' close;
  13. }
  14. server {
  15. listen 443 ssl http2;
  16. server_name FQDN;
  17. ssl_certificate /certs/fullchain.pem;
  18. ssl_certificate_key /certs/privkey.pem;
  19. location / {
  20. proxy_set_header Host $host;
  21. proxy_set_header X-Forwarded-Proto $scheme;
  22. proxy_set_header X-Forwarded-Port $server_port;
  23. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  24. proxy_pass http://rancher;
  25. proxy_http_version 1.1;
  26. proxy_set_header Upgrade $http_upgrade;
  27. proxy_set_header Connection $connection_upgrade;
  28. # 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
  29. proxy_read_timeout 900s;
  30. proxy_buffering off;
  31. }
  32. }
  33. server {
  34. listen 80;
  35. server_name FQDN;
  36. return 301 https://$server_name$request_uri;
  37. }
  38. }

后续操作

  • 推荐:检查单节点备份恢复。你可能暂时没有需要备份的数据,但是我们建议你在常规使用 Rancher 后创建备份。
  • 创建 Kubernetes 集群:配置 Kubernetes 集群

常见问题和故障排除

如果你需要对证书进行故障排除,请参见此章节

高级选项

API 审计

如果你需要记录所有 Rancher API 事务,请将以下标志添加到安装命令中,从而启用 API 审计功能。

  1. -e AUDIT_LEVEL=1 \
  2. -e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \
  3. -e AUDIT_LOG_MAXAGE=20 \
  4. -e AUDIT_LOG_MAXBACKUP=20 \
  5. -e AUDIT_LOG_MAXSIZE=100 \

离线环境

如果你访问此页面是为了完成离线安装,则在运行安装命令时,先将你的私有镜像仓库 URL 附加到 Server 标志中。也就是说,在 rancher/rancher:latest 前面添加 <REGISTRY.DOMAIN.COM:PORT> 和私有镜像仓库 URL。

示例

  1. <REGISTRY.DOMAIN.COM:PORT>/rancher/rancher:latest

持久化数据

Rancher 使用 etcd 作为数据存储。如果 Rancher 是使用 Docker 安装的,Rancher 会使用嵌入式 etcd。持久化数据位于容器的 /var/lib/rancher 路径中。

你可以将主机卷挂载到该位置,来将数据保留在运行它的主机上:

  1. docker run -d --restart=unless-stopped \
  2. -p 80:80 -p 443:443 \
  3. -v /opt/rancher:/var/lib/rancher \
  4. --privileged \
  5. rancher/rancher:latest

此操作需要 privileged 访问

这个 7 层 NGINX 配置已经在 NGINX 1.13(Mainline)和 1.14(Stable)版本上进行了测试。

7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) - 图5备注

此 NGINX 配置只是一个示例,可能不适合你的环境。如果需要查阅完整文档,请参见 NGINX 负载均衡 - TCP 和 UDP 负载均衡器

  1. upstream rancher {
  2. server rancher-server:80;
  3. }
  4. map $http_upgrade $connection_upgrade {
  5. default Upgrade;
  6. '' close;
  7. }
  8. server {
  9. listen 443 ssl http2;
  10. server_name rancher.yourdomain.com;
  11. ssl_certificate /etc/your_certificate_directory/fullchain.pem;
  12. ssl_certificate_key /etc/your_certificate_directory/privkey.pem;
  13. location / {
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Forwarded-Proto $scheme;
  16. proxy_set_header X-Forwarded-Port $server_port;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. proxy_pass http://rancher;
  19. proxy_http_version 1.1;
  20. proxy_set_header Upgrade $http_upgrade;
  21. proxy_set_header Connection $connection_upgrade;
  22. # 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
  23. proxy_read_timeout 900s;
  24. proxy_buffering off;
  25. }
  26. }
  27. server {
  28. listen 80;
  29. server_name rancher.yourdomain.com;
  30. return 301 https://$server_name$request_uri;
  31. }