Rancher Helm Chart 选项

本文提供了 Rancher Helm Chart 的配置参考。

如需选择 Helm Chart 版本,请参见本页

了解开启实验性功能的详情,请参见本页

常用选项

选项默认值描述
bootstrapPassword“ “string - 为第一个管理员用户设置引导密码。登录后,管理员需要重置密码。如不设置,会使用随机生成的引导密码。
hostname“ “string - 你的 Rancher Server 的完全限定的域名(FQDN)
ingress.tls.source“rancher”string - 从哪里获取 Ingress 的证书- “rancher, letsEncrypt, secret”
letsEncrypt.email“ “string - 你的邮箱地址
letsEncrypt.environment“production”string - 可选项:”staging, production”
privateCAfalsebool - 如果你的证书是由私有 CA 签发的,把这个值设置为 true

高级选项

选项默认值描述
additionalTrustedCAsfalsebool - 请参见额外的授信 CA
addLocal“true”string - 让 Rancher 检测并导入 “local” Rancher Server 集群。注意:此选项在 2.5.0 中已不可用。你可考虑使用 restrictedAdmin 选项,来避免用户修改本地集群。
antiAffinity“preferred”string - Rancher Pod 的反亲和性规则 - “preferred, required”
auditLog.destination“sidecar”string - 发送审计日志到 Sidecar 容器的控制台或 hostPath 卷 - “sidecar, hostPath”
auditLog.hostPath“/var/log/rancher/audit”string - 主机上的日志文件目标地址(仅当auditLog.destination 的值是 hostPath 时生效)
auditLog.level0int - 设置 API 审计日志等级。0 代表关闭。[0-3]
auditLog.maxAge1int - 旧审计日志文件最多可保留的天数(仅当auditLog.destination 的值是 hostPath 时生效)
auditLog.maxBackup1int - 审计文件最大可保留的个数(仅当 auditLog.destination 的值是 hostPath 时生效)
auditLog.maxSize100int - 在审计日志被轮换前的最大容量,单位是 MB(仅当 auditLog.destination 的值是 hostPath 时生效)
auditLog.image.repository“registry.suse.com/bci/bci-micro”string - 用于收集审计日志的镜像的位置。
auditLog.image.tag“15.4.14.3”string - 用于收集审计日志的镜像的标签。
auditLog.image.pullPolicy“IfNotPresent”string - 覆盖 auditLog 镜像的 imagePullPolicy - “Always”、“Never”、“IfNotPresent”。
busyboxImage“”string - 用于收集审计日志的 busybox 镜像位置。注意:此选项已弃用,请使用 auditLog.image.repository 来控制审计 sidecar 镜像
certmanager.version“”string - 设置 cert-manager compatibility
debugfalsebool - 在 Rancher Server 设置 debug 参数
extraEnv[]list - 为 Rancher 额外设置环境变量
imagePullSecrets[]list - 私有镜像仓库凭证的密文名称列表
ingress.configurationSnippet“”string - 添加额外的 Nginx 配置。可用于代理配置。
ingress.extraAnnotations{}map - 用于自定义 Ingress 的额外注释
ingress.enabledtrue如果值为 false,Helm 不会安装 Rancher Ingress。你可把值设为 false 以部署你自己的 Ingress。
letsEncrypt.ingress.class“”string - cert-manager acmesolver ingress 的可选 ingress 类,用于响应 Let’s Encrypt ACME 质询。选项:traefik,nginx。
noProxy“127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,cattle-system.svc”string - 不使用代理的主机名或 IP 地址的逗号分隔列表
proxy“”string - 给 Rancher 配置的 HTTP[S] 代理
rancherImage“rancher/rancher”string - Rancher 镜像源
rancherImagePullPolicy“IfNotPresent”string - 覆盖 Rancher Server 镜像的 imagePullPolicy - “Always”, “Never”, “IfNotPresent”
rancherImageTag和 Chart 版本一致string - rancher/rancher 镜像标签
replicas3int - Rancher Server 副本数。如果设为 -1,会根据集群中的可用节点数自动选择 1,2或3。
resources{}map - Rancher Pod 资源请求和限制
restrictedAdminfalsebool - 如果值为 true,初始的 Rancher 用户访问本地 Kubernetes 集群会受到限制,以避免权限升级。详情请参见 restricted-admin 角色
systemDefaultRegistry“”string - 用于所有系统容器镜像的私有仓库,例如 http://registry.example.com/
tls“ingress”string - 详情请参见外部 TLS 终止。- “ingress, external”
useBundledSystemChartfalsebool - 选择 Rancher Server 打包的 system-charts。此参数用于离线环境安装。

引导密码

Rancher 首次启动时,会为第一个管理员用户随机生成一个密码。当管理员首次登录 Rancher 时,用于获取引导密码(Bootstrap)的命令会在 UI 上显示。管理员需要运行命令并使用引导密码登录。然后 Rancher 会让管理员重置密码。

如果你想指定引导密码而不使用随机生成的密码,请参考以下命令设置密码。

  1. --set bootstrapPassword="rancher"

无论你是使用提供的密码还是生成的密码,密码均存储在 Kubernetes 密文中。安装 Rancher 后,如何使用 kubectl 获取密码的说明将会在 UI 中显示:

  1. kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{ .data.bootstrapPassword|base64decode}}{{ "\n" }}'

API 审计日志

启用 API 审计日志

你可以像收集其他容器日志一样收集此日志。在 Rancher Server 集群上为 System 项目启用 Logging

  1. --set auditLog.level=1

默认情况下,启用审计日志会在 Rancher pod 中创建一个 Sidecar 容器。这个容器(rancher-audit-log)会把日志流传输到 stdout。你可以像收集其他容器日志一样收集此日志。如果你使用 Sidecar 作为审计日志的目标时, hostPathmaxAgemaxBackupsmaxSize 选项不会生效。建议使用你的操作系统或 Docker Daemon 的日志轮换功能来控制磁盘空间的使用。请为 Rancher Server 集群或 System 项目启用 Logging

auditLog.destination 的值设为 hostPath,可以将日志转发到与主机系统共享的卷,而不是传输到 Sidecar 容器。如果目标设置为 hostPath,你可能需要调整其他 auditLog 参数以进行日志轮换。

额外设置环境变量

你可以使用 extraEnv 为 Rancher Server 额外设置环境变量。该列表使用与容器清单定义相同的 namevalue 键。记住需要给值加上引号。

  1. --set 'extraEnv[0].name=CATTLE_TLS_MIN_VERSION'
  2. --set 'extraEnv[0].value=1.0'

TLS 设置

当你在 Kubernetes 集群内安装 Rancher 时,TLS 会在集群的 Ingress Controller 上卸载。支持的 TLS 设置取决于使用的 Ingress Controller。

参见 TLS 设置了解更多信息和选项。

导入 local 集群

默认情况下,Rancher Server 会检测并导入其所在的 local 集群。有权访问 local 集群的用户对 Rancher Server 管理的所有集群具有“root”访问权限。

Rancher Helm Chart 选项 - 图1警告

如果你关闭 addLocal,大多数 Rancher 2.5 功能都不能使用,包括 EKS Provisioner。

如果这在你的环境中是一个问题,你可以在初始安装时将此选项设置为“false”。

此选项仅在首次安装 Rancher 时有效。详情请参见 Issue 16522

  1. --set addLocal="false"

自定义 Ingress

要自定义或使用 Rancher Server 的其他 Ingress,你可以设置自己的 Ingress annotations。

设置自定义证书颁发者的示例:

  1. --set ingress.extraAnnotations.'cert-manager\.io/cluster-issuer'=issuer-name

以下是使用 ingress.configurationSnippet设置静态代理头的实例。该值像模板一样进行解析,因此可以使用变量。

  1. --set ingress.configurationSnippet='more_set_input_headers X-Forwarded-Host {{ .Values.hostname }};'

HTTP 代理

Rancher 的一些功能(Helm Chart)需要使用互联网才能使用。使用 proxy 来设置你的代理服务器。

noProxy 列表中添加例外的 IP。确保你已添加了 Pod 集群 IP 范围(默认:10.42.0.0/16),服务集群 IP 范围(默认:10.43.0.0/16),内部集群域名(默认:.svc,.cluster.local)和所有 worker 集群 controlplane 节点。Rancher 支持在此列表中使用 CIDR 表示法范围。

  1. --set proxy="http://<username>:<password>@<proxy_url>:<proxy_port>/"
  2. --set noProxy="127.0.0.0/8\,10.0.0.0/8\,172.16.0.0/12\,192.168.0.0/16\,.svc\,.cluster.local"

额外的授信 CA

如果你有私有镜像仓库(registries)、应用商店(catalogs)或拦截证书的代理,则可能需要向 Rancher 添加额外的授信 CA。

  1. --set additionalTrustedCAs=true

创建完 Rancher deployment 后,将 pem 格式的 CA 证书复制到一个名为 ca-additional.pem 的文件中,并使用 kubectlcattle-system 命名空间中创建 tls-ca-additional 密文。

  1. kubectl -n cattle-system create secret generic tls-ca-additional --from-file=ca-additional.pem=./ca-additional.pem

私有仓库和离线安装

有关使用私有仓库安装 Rancher 的详情,请参见离线安装

外部 TLS 终止

我们建议将负载均衡器配置为 4 层均衡,将普通 80/tcp 和 443/tcp 转发到 Rancher Management 集群节点。集群上的 Ingress Controller 会将端口 80 上的 HTTP 流量重定向到端口 443 上的 HTTPS。

你可以在 Rancher 集群(Ingress)外部的 L7 负载均衡器上终止 SSL/TLS。使用 --set tls=external 选项,将负载均衡器指向所有 Rancher 集群节点上的端口 HTTP 80。这将在 HTTP 端口 80 上暴露 Rancher 接口。请注意,允许直接连接到 Rancher 集群的客户端不会被加密。如果你选择这样做,我们建议你将网络级别的直接访问限制为仅你的负载均衡器。

Rancher Helm Chart 选项 - 图2备注

如果你使用的是私有 CA 签名的证书,请添加 --set privateCA=true 并参见添加 TLS 密文 - 使用私有 CA 签名证书,为 Rancher 添加 CA 证书。

你的负载均衡器必须支持长期存在的 Websocket 连接,并且需要插入代理头,以便 Rancher 可以正确传送链接。

使用 NGINX v0.25 为外部 TLS 配置 Ingress

在 NGINX 0.25 中,NGINX 关于转发头和外部 TLS 终止的行为已更改。因此,如果你同时使用 NGINX 0.25 和外部 TLS 终止配置,你必须编辑 cluster.yml 来为 Ingress 启用 use-forwarded-headers 选项。

  1. ingress:
  2. provider: nginx
  3. options:
  4. use-forwarded-headers: 'true'

必须的 Header

  • Host
  • X-Forwarded-Proto
  • X-Forwarded-Port
  • X-Forwarded-For

建议的超时时间

  • 读超时:1800 seconds
  • 写超时:1800 seconds
  • 连接超时:30 seconds

健康检查

Rancher 将对 /healthz 端点的健康检查响应200

示例 NGINX 配置

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

Rancher Helm Chart 选项 - 图3警告

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

  • IP_NODE1IP_NODE2IP_NODE3 替换为你集群中节点的 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 IP_NODE_1:80;
  9. server IP_NODE_2:80;
  10. server IP_NODE_3:80;
  11. }
  12. map $http_upgrade $connection_upgrade {
  13. default Upgrade;
  14. '' close;
  15. }
  16. server {
  17. listen 443 ssl http2;
  18. server_name FQDN;
  19. ssl_certificate /certs/fullchain.pem;
  20. ssl_certificate_key /certs/privkey.pem;
  21. location / {
  22. proxy_set_header Host $host;
  23. proxy_set_header X-Forwarded-Proto $scheme;
  24. proxy_set_header X-Forwarded-Port $server_port;
  25. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  26. proxy_pass http://rancher;
  27. proxy_http_version 1.1;
  28. proxy_set_header Upgrade $http_upgrade;
  29. proxy_set_header Connection $connection_upgrade;
  30. # 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
  31. proxy_read_timeout 900s;
  32. proxy_buffering off;
  33. }
  34. }
  35. server {
  36. listen 80;
  37. server_name FQDN;
  38. return 301 https://$server_name$request_uri;
  39. }
  40. }