本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

在 Kubernetes 集群上安装/升级 SUSE Rancher Prime

在本节中,您将学习如何使用 Helm CLI 在 Kubernetes 集群上部署 Rancher。

先决条件

Kubernetes 集群

设置 Rancher 服务器的本地 Kubernetes 集群。

Rancher 可以安装在任何 Kubernetes 集群上。该集群可以使用上游 Kubernetes,或者可以使用 Rancher 的 Kubernetes 发行版,或者可以是来自 Amazon EKS 等提供商的托管 Kubernetes 集群。

有关设置 Kubernetes 集群的帮助,我们提供以下教程:

  • *K3s:*有关安装 K3s Kubernetes 集群的教程,请参阅 此页面。有关设置高可用性 K3s 集群基础设施的帮助,请参阅 此页面

  • *RKE2:*有关安装 RKE2 Kubernetes 集群的教程,请参阅 此页面。有关设置高可用性 RKE2 集群基础设施的帮助,请参阅 此页面

  • *Amazon EKS:*有关如何在 Amazon EKS 上安装 Rancher 的详细信息,包括如何安装 Ingress 控制器以便访问 Rancher 服务器,请参阅 此页面

  • *AKS:*有关如何使用 Azure Kubernetes Service 安装 Rancher 的详细信息,包括如何安装 Ingress 控制器以便访问 Rancher 服务器,请参阅 此页面

  • *GKE:*有关如何使用 Google Kubernetes Engine 安装 Rancher 的详细信息,包括如何安装 Ingress 控制器以便访问 Rancher 服务器,请参阅 此页面。 GKE 在创建 Kubernetes 集群时有两种操作模式:Autopilot 和标准模式。自动驾驶模式的集群配置对编辑 kube-system 命名空间有限制。然而,Rancher 在安装过程中需要在 kube-system 命名空间中创建资源。因此,您将无法在以 Autopilot 模式创建的 GKE 集群上安装 Rancher。

Ingress 控制器

Rancher UI 和 API 通过 Ingress 暴露。这意味着您安装 Rancher 的 Kubernetes 集群必须包含一个 Ingress 控制器。

对于 RKE2 和 K3s 安装,您不必手动安装 Ingress 控制器,因为默认已安装一个。

对于默认不包含 Ingress 控制器的发行版,例如 EKS、GKE 或 AKS 等托管 Kubernetes 集群,您必须先部署一个 Ingress 控制器。请注意,Rancher Helm 图表默认不在 ingress 上设置 ingressClassName。因此,您必须配置 Ingress 控制器以监视没有 ingressClassName 的 ingress。

示例包含在上述 Amazon EKSAKSGKE 教程中。

CLI 工具

设置 Kubernetes 集群需要以下 CLI 工具。请确保这些工具已安装并在您的 $PATH 中可用。

安装 Rancher Helm 图表

Rancher 是使用 Helm 包管理器为 Kubernetes 安装的。Helm图表为Kubernetes YAML清单文档提供模板语法。使用 Helm,我们可以创建可配置的部署,而不仅仅是使用静态文件。

对于没有直接互联网访问的系统,请参见 隔离:Kubernetes 安装。Kubernetes 安装]。

要选择要安装的 Rancher 版本,请参考 xref:[选择 Rancher 版本。]

要选择一个 Helm 版本以安装 Rancher,请参考 Helm 版本要求

安装说明假设您正在使用 Helm 3。

要设置 Rancher,

1.添加 Helm 图表储存库

使用 helm repo add 命令添加包含安装 Rancher Prime 的图表的 Helm 图表储存库。

helm repo add rancher-prime <helm-chart-repo-url>

To learn more about the Rancher Prime Helm chart repository URL, see our Prime-only documentation. Authentication is required. Use your SUSE Customer Center (SCC) credentials to log in.

2.为 Rancher 创建一个名称空间

我们需要定义一个 Kubernetes 名称空间,以便 Chart 创建的资源安装在其中。这应该始终是 cattle-system

kubectl create namespace cattle-system

3.选择您的 SSL 配置

Rancher 管理服务器默认设计为安全,并需要 SSL/TLS 配置。

如果您想在外部终止 SSL/TLS,请参见 在外部负载均衡器上终止 TLS。正如该页面所述,此选项确实有额外的 TLS 验证要求。

对于在 Rancher 服务器上进行 TLS 终止所使用的证书来源,推荐三种选项:

  • *Rancher 生成的 TLS 证书:*在这种情况下,您需要将`cert-manager`安装到集群中。Rancher 利用 cert-manager 来颁发和维护其证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。cert-manager 随后负责管理该证书。当 agent-tls-mode 设置为严格时,无需额外操作。有关此设置的更多信息,请参见 代理 TLS 强制执行

  • *Let’s Encrypt:*Let’s Encrypt 选项也使用 cert-manager。然而,在这种情况下,cert-manager 与 Let’s Encrypt 的特殊发行者结合,执行获取 Let’s Encrypt 颁发证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有公共 DNS 记录,并且可以从互联网访问。在将 agent-tls-mode 设置为 strict 时,您还必须指定 --privateCA=true 并上传 Let’s Encrypt CA,如 添加 TLS 密钥中所述。有关此设置的更多信息,请参见 代理 TLS 强制执行

  • *自带证书:*此选项允许您自带公共或私有CA签名的证书。Rancher将使用该证书来保护websocket和HTTPS流量。在这种情况下,您必须将此证书(及相关密钥)作为PEM编码文件上传,文件名为`tls.crt`和`tls.key`。如果您使用的是私有 CA,您还必须上传该证书。这是因为该私有 CA 可能不被您的节点信任。Rancher 将获取该 CA 证书,并从中生成一个校验和,各个 Rancher 组件将使用该校验和来验证与 Rancher 的连接。如果 agent-tls-mode 设置为 strict,则必须上传 CA,以便下游集群能够成功连接。有关此设置的更多信息,请参见代理TLS强制执行

配置 Helm Chart 选项 需要 cert-manager

Rancher 生成的证书(默认)

ingress.tls.source=rancher

Let’s Encrypt

ingress.tls.source=letsEncrypt

来自文件的证书

ingress.tls.source=secret

4.安装 cert-manager

如果您使用自己的证书文件(选项 ingress.tls.source=secret),或者使用 外部负载均衡器上的 TLS 终止,则应跳过此步骤。

此步骤仅在使用 Rancher 生成的 CA (ingress.tls.source=rancher) 颁发的证书或请求 Let’s Encrypt 颁发的证书 (ingress.tls.source=letsEncrypt) 时需要。

点击展开
重要说明:

对 cert-manager 的最近更改需要进行升级。如果您正在升级 Rancher,并且使用的 cert-manager 版本低于 v0.11.0,请参阅我们的 升级文档

这些说明改编自 官方 cert-manager 文档

要查看如何自定义 cert-manager 安装的选项(包括在集群使用 PodSecurityPolicies 的情况下),请参阅 cert-manager 文档

# If you have installed the CRDs manually, instead of setting `installCRDs` or `crds.enabled` to `true` in your Helm install command, you should upgrade your CRD resources before upgrading the Helm chart:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml

# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io

# Update your local Helm chart repository cache
helm repo update

# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set crds.enabled=true

安装 cert-manager 后,您可以通过检查 cert-manager 的名称空间中正在运行的 Pod 来验证其是否已正确部署。

kubectl get pods --namespace cert-manager

NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5c6866597-zw7kh               1/1     Running   0          2m
cert-manager-cainjector-577f6d9fd7-tr77l   1/1     Running   0          2m
cert-manager-webhook-787858fcdb-nlzsq      1/1     Running   0          2m

5.使用 Helm 和您选择的证书选项安装 Rancher

安装 Rancher 的确切命令取决于证书配置。

但是,无论证书配置如何,cattle-system 名称空间中 Rancher 安装的名称应始终为 rancher

测试和开发:

此最终命令安装 Rancher 需要一个将流量转发到 Rancher 的域名。如果您使用 Helm CLI 设置概念验证,可以在传递 hostname 选项时使用一个虚假的域名。虚假域名的一个示例是 <IP_OF_LINUX_NODE>.sslip.io,它将暴露 Rancher 在其运行的 IP 上。生产安装需要一个真实的域名。

  • Rancher 生成的证书

  • Let’s Encrypt

  • 来自文件的证书

默认情况下,Rancher 会生成一个 CA,并使用 cert-manager 来颁发访问 Rancher 服务器界面的证书。

因为 rancheringress.tls.source 的默认选项,所以在运行 ingress.tls.source 命令时我们不指定 helm install

  • hostname 设置为您指向负载均衡器的 DNS 名称。

  • bootstrapPassword 设置为 admin 用户的唯一值。

  • 要安装特定的 Rancher 版本,请使用 --version 标志,例如:--version 2.7.0

helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set bootstrapPassword=admin

等待 Rancher 部署完成:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

此选项使用 cert-manager 自动请求和续订 Let’s Encrypt 证书。这是一个免费服务,提供有效证书,因为 Let’s Encrypt 是一个受信任的 CA。

您需要打开 80 端口,因为 HTTP-01 挑战只能在 80 端口上进行。

在以下命令中,

  • hostname 设置为公共 DNS 记录,

  • bootstrapPassword 设置为 admin 用户的唯一值。

  • ingress.tls.source 设置为 letsEncrypt

  • letsEncrypt.email 设置为用于与您证书相关的通信的电子邮件地址(例如,过期通知)

  • letsEncrypt.ingress.class 设置为您的入口控制器,例如 traefiknginxhaproxy 等。

agent-tls-mode 设置为 strict(从 v2.9.0 开始的新安装的默认值)时,您必须提供 privateCA=true 图表值(例如通过 --set privateCA=true),并按照 添加 TLS 秘密 上传 Let’s Encrypt 证书颁发机构。有关识别 Let’s Encrypt 根 CA 的信息可以在 Let’s Encrypt docs 中找到。如果您不上传 CA,则 Rancher 可能无法连接到新的或现有的下游集群。

helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set bootstrapPassword=admin \
  --set ingress.tls.source=letsEncrypt \
  --set letsEncrypt.email=me@example.org \
  --set letsEncrypt.ingress.class=nginx

等待 Rancher 部署完成:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

在此选项中,Kubernetes 密钥是从您自己的证书中创建的,以供 Rancher 使用。

当您运行此命令时,hostname 选项必须与服务器证书中的 Common NameSubject Alternative Names 条目匹配,否则入口控制器将无法正确配置。

尽管 Subject Alternative Names 中的条目在技术上是必需的,但拥有匹配的 Common Name 可以最大限度地提高与旧版浏览器和应用程序的兼容性。

如果您想检查您的证书是否正确,请参见 我如何检查服务器证书中的通用名称和主题备用名称?

  • 设置 hostname

  • bootstrapPassword 设置为 admin 用户的唯一值。

  • ingress.tls.source 设置为 secret

helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set bootstrapPassword=admin \
  --set ingress.tls.source=secret

如果您使用的是私有 CA 签名的证书,请将 --set privateCA=true 添加到命令中:

helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set bootstrapPassword=admin \
  --set ingress.tls.source=secret \
  --set privateCA=true

现在 Rancher 已经部署,请参见 添加 TLS 密钥 以发布证书文件,以便 Rancher 和入口控制器使用它们。

Rancher 图表配置有许多选项,可以根据您的特定环境自定义安装。以下是一些常见的高级场景。

请参见 图表选项 获取完整的选项列表。

6.验证 Rancher 服务器是否成功部署

添加密钥后,检查 Rancher 是否成功部署:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

如果您看到以下错误:error: deployment "rancher" exceeded its progress deadline,您可以通过运行以下命令检查部署状态:

kubectl -n cattle-system get deploy rancher
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
rancher   3         3         3            3           3m

它应该显示 DESIREDAVAILABLE 的相同计数。

7.保存您的选项

确保您保存了使用的 --set 选项。在升级 Rancher 到新版本时,您需要使用相同的选项。

完成

就这些。您应该有一个功能正常的 Rancher 服务器。

在网页浏览器中,访问转发流量到您的负载均衡器的 DNS 名称。然后您应该会看到五彩缤纷的登录页面。

不工作?查看 故障排除 页面