如果要在基础设施中对 TLS 进行终结,请使用 7 层负载均衡器。7 层负载均衡可以提供基于 HTTP 属性(例如 cookie 等)的路由决策能力,这是 4 层负载均衡器无法实现的。

本文将引导您使用单个容器完成 Rancher 的部署,并且提供了一个 7 层 Nginx 负载均衡器的示例配置。

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

安装概要

根据 Rancher 的要求设置一台 Linux 主机,以启动 Rancher Server。

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

为了安全起见,使用 Rancher 时需要 SSL。SSL 保护所有 Rancher 网络通信的安全,例如在您登录集群或与集群交互时。

选择下面的一个选项:

如果选择使用自签名证书来加密通信,则必须在负载均衡器(稍后再做)和 Rancher 容器上安装证书。运行 Docker 命令以部署 Rancher,将其指向您的证书。

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

选项 B - 使用机构颁发的证书

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

基于机构颁发证书安装 Rancher:

如果您使用由公认的 CA 签署的证书,则无需在 Rancher 容器中安装证书。我们必须确保没有生成和存储默认的 CA 证书,您可以通过将参数传递给容器来实现。

  1. 输入下面的命令

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

在 Rancher 容器前面使用负载均衡器时,不需要该容器从端口 80 或端口 443 重定向端口通信。通过传递 HeaderX-Forwarded-Proto:https ,可以禁用此重定向。

负载均衡器或代理必须配置为支持以下各项:

  • WebSocket 连接

  • SPDY / HTTP/2 协议

  • 可以传递以下 HTTP 头:

Nginx 配置示例

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

  • rancher-server替换为运行 Rancher 容器的节点的 IP 地址或主机名。
  • /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. server {
  14. listen 443 ssl http2;
  15. server_name FQDN;
  16. ssl_certificate /certs/fullchain.pem;
  17. ssl_certificate_key /certs/privkey.pem;
  18. location / {
  19. proxy_set_header Host $host;
  20. proxy_set_header X-Forwarded-Proto $scheme;
  21. proxy_set_header X-Forwarded-Port $server_port;
  22. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  23. proxy_pass http://rancher;
  24. proxy_http_version 1.1;
  25. proxy_set_header Upgrade $http_upgrade;
  26. proxy_set_header Connection $connection_upgrade;
  27. # This allows the ability for the execute shell window to remain open for up to 15 minutes. Without this parameter, the default is 1 minute and will automatically close.
  28. proxy_read_timeout 900s;
  29. }
  30. }
  31. server {
  32. listen 80;
  33. server_name FQDN;
  34. return 301 https://$server_name$request_uri;
  35. }
  36. }

相关链接

  • 推荐阅读: 。尽管您现在没有任何数据需要备份,但是我们建议您在常规 Rancher 使用之后创建备份。
  • 创建 Kubernetes 集群

您可以通过以下特征识别 PEM 格式:

  • 该文件以以下标头开头:-----BEGIN CERTIFICATE-----
  • 标头后跟一长串字符。
  • 该文件以页脚结尾:

PEM 证书例子:

  1. ----BEGIN CERTIFICATE-----
  2. MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
  3. ... more lines
  4. VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
  5. -----END CERTIFICATE-----

PEM 证书密钥例子:

如果您的密钥看起来像下面的例子,请查看

  1. -----BEGIN PRIVATE KEY-----
  2. MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
  3. ... more lines
  4. VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
  5. -----END PRIVATE KEY-----

如何将证书密钥从 PKCS8 转换为 PKCS1?

如果您使用的是 PKCS8 证书密钥文件,Rancher 将打印以下日志:

  1. ListenConfigController cli-config [listener] failed with : failed to read private key: asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true})

为了使它正常工作,您需要使用以下命令将密钥从 PKCS8 转换为 PKCS1:

  1. openssl rsa -in key.pem -out convertedkey.pem

您现在可以将convertedkey.pem用作 Rancher 的证书密钥文件。

如果我想添加中间证书,证书的顺序是什么?

添加证书的顺序如下:

您可以使用 openssl 二进制文件来验证证书链。如果命令的输出(请参见下面的命令示例)以Verify return code: 0 (ok),则您的证书链有效。ca.pem文件必须与您添加到rancher/rancher容器中的文件相同。使用由公认的证书颁发机构签名的证书时,可以省略-CAfile参数。

命令:

  1. openssl s_client -CAfile ca.pem -connect rancher.yourdomain.com:443
  2. ...
  3. Verify return code: 0 (ok)

高级选项

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 \

离线安装

如果要访问此页面以完成,则在您运行安装命令时,必须在 server 镜像之前添加私有镜像库的 URL。例如在您的rancher/rancher:latest前面添加带有您的私有镜像库的 URL<REGISTRY.DOMAIN.COM:PORT>

示例:

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

Rancher 使用 etcd 作为数据存储。使用 Docker 安装时,将使用嵌入式 etcd。持久数据位于容器中的以下路径中:。您可以将主机卷挂载到该位置,以将数据保留在运行 Rancher Server 容器的主机上。使用 RancherOS 时,请检查哪些持久性存储目录可用。