一文读懂如何将 Rancher 下游集群升级到 Kubernetes v1.25

news/2024/11/25 19:19:34/

介 绍

最初在 Kubernetes v1.21 中被弃用的 PodSecurityPolicy API,已经在 Kubernetes v1.25 中被完全删除。由于 API 被移除,你无法在 Kubernetes v1.25 集群中创建、编辑或查询 PodSecurityPolicy 资源。此外,由于其准入控制器已被移除,所以你的集群无法再强制执行在 Kubernetes v1.24 及之前版本中创建的任何 PodSecurityPolicy 规则。因此,你必须将工作负载安全迁移到新的 Pod Security Admission 控制器、补充策略引擎或两者的组合中。

本文将讨论如何将 Rancher 管理的下游集群升级到 Kubernetes v1.25,包括如何使用 Rancher 特定的机制来应用 Pod Security Admission 配置,以及如何从 Rancher 维护的工作负载中删除 PodSecurityPolicies。本文是一个示例教程,建议先在非生产环境中运行这些步骤来熟悉流程,然后再决定你的生产环境需要如何操作。

要 求

将集群升级到 Kubernetes v1.25 之前,请确保:

  • 你正在运行 Rancher v2.7.2 或更高版本。
  • 你的下游集群正在运行 Kubernetes v1.24。
  • 你已完成了 Kubernetes 文档中概述的从 PodSecurityPolicies 迁移到内置的 Pod Security Admission 控制器的步骤,将 PodSecurityPolicies 映射到 Pod Security Admission 配置或 Pod Security Standard 标签中。
  • 你已经评估过 Pod Security Admission 是否满足你的需求。在本文最后有一些关于补充策略引擎的资源,如果 Pod Security Admission 不足以满足你的使用需求,你可能需要将它添加到你的集群中。

配置 Pod Security Admission 控制器

第一步是配置新的 Pod Security Admission 控制器。在 Kubernetes v1.24 中,这个准入控制器已经在 kube-apiserver 中默认启用。有几种方法可以配置这个准入控制器,其中一种选择是通过 kube-apiserver 命令行参数部署集群范围的 AdmissionConfiguration。从 2.7.2 版本开始,Rancher 提供了两个开箱即用的 AdmissionConfigurations,或者你也可以通过 Rancher UI 创建自己的 Pod Security Admission 配置。下面将更详细地介绍这些功能。

审查 Pod Security Admission 配置预设

要查看 Rancher 附带的 Pod Security Admission 配置预设,请使用管理员身份登录 Rancher 时导航至 Cluster Management → Advanced → Pod Security Admissions。你将看到两个可用的预设:rancher-privileged 和 rancher-restricted。 rancher-restricted 将 enforce、warn 和 audit 值设置为restricted 并包含一些命名空间豁免,用来允许 Rancher 在你的集群中正常工作。 rancher-privileged 预设等同于 Kubernetes 文档中提供的示例 AdmissionConfiguration,并且不提供任何特定的安全保证。你可以在 Rancher 文档上关于 Pod Security Admission 和 Pod Security Standard 的信息。

(可选)创建自定义 Pod Security Admission 配置

你还可以创建自己的 Pod Security Admission 配置。为此,请导航至 Cluster Management → Advanced → Pod Security Admissions,然后单击 Create

为你的新 Pod Security Admission 配置选择一个名称,并选择应用于执行、审计和警告的规则。你还可以指定是否有豁免来满足你的需求。填写表单后,单击Create

配置集群使用 Pod Security Admission 配置

你可以利用 Rancher UI 来应用集群范围的 Pod Security Admission 配置。在 Rancher Manager 的 Cluster Management 选项卡中,选择要配置的集群的汉堡菜单,然后选择 Edit Config 选项:

然后针对不同的下游集群启用 Pod Security Admission :

  • RKE:导航到 Advanced Options,然后在 Pod SecurityAdmissionConfiguration Template 字段中选择你的首选选项。

  • RKE2 或 K3S:导航到 Cluster Configuration 面板。在 Basics 窗格中的 Security 部分下,在 Pod Security Admission Configuration Template 字段中选择你的首选选项。

完成配置后,请确保保存并测试。

手动配置单个命名空间

要使用 Pod Security Standard 标签单独配置命名空间,请参考Kubernetes 文档。请注意,当 Pod Security Admission 配置与 Pod Security Standard 标签结合使用时,准入控制器将忽略任何应用于在 Pod Security Admission 配置中标记为豁免的资源的 Pod Security Standard 标签。

删除 PodSecurityPolicies

本节假设你已经将 PodSecurityPolicies 映射到 Pod Security Admission 配置和 Pod Security Standard 命名空间标签,并且你的集群符合要求。如果你还没有这样做,请查看有关从 PodSecurityPolicies 迁移到内置 PodSecurity Admission Controller 的 Kubernetes 文档。

不要手动删除 PodSecurityPolicies。通过 kubectl delete 删除由 Helm chart 添加的 PodSecurityPolicies 不会从 Helm 版本中删除它们的引用,并且可能导致无法升级甚至删除 Helm chart 的情况。要了解有关如何防止出现这种情况的更多信息,请继续阅读本节。

升级你的 Apps & Marketplace chart 以删除 PodSecurityPolicies。之前安装 PodSecurityPolicies 的 Rancher 维护的工作负载增加了一个格式为 v102.x.y 的新版本,允许你删除这些资源。显著的变化包括:

  • 创建了一个新的 PodSecurityPolicy 开关:global.cattle.psp.enabled。以前的 PodSecurityPolicy 开关已被这个新开关取代。
  • 在 chart 安装前,增加了 PodSecurityPolicies 的集群能力验证。如果你尝试在打开 PodSecurityPolicy 开关的情况下将这些新 chart 安装到 Kubernetes v1.25 集群中,你将看到一条错误消息,要求你在继续之前禁用 PodSecurityPolicies。

为了顺利升级到 Kubernetes v1.25,你必须删除使用 Helm 部署的 PodSecurityPolicy 资源。为此,请将每个 chart 的安装升级到最新版本 v102.0.0,并确保将 PodSecurityPolicy 开关 global.cattle.psp.enabled 的值设置为 false。

验证集群中的所有工作负载都已迁移到 Pod Security Admission

验证集群中的其他工作负载是否也已从 PodSecurityPolicies 迁移到 Pod Security Admission 和 Standards。你可以通过运行 kubectl get podsecuritypolicies 检查集群中存在哪些 PodSecurityPolicies。请注意,集群中存在 PodSecurityPolicy 资源并不意味着有工作负载在使用它。

要检查哪些 PodSecurityPolicies 仍在使用中,你可以运行以下命令。请注意,此策略可能会遗漏当前未运行的工作负载,例如 CronJobs、当前副本数为 0 的工作负载或其他尚未推出的工作负载:

kubectl get pods --all-namespaces \--output jsonpath="{.items[*].metadata.annotations.kubernetes\.io\/psp}" \| tr " " "\n" | sort -u

要了解有关检查正在使用的 PodSecurityPolicies 的策略的更多信息,请参见 Kubernetes 的 PodSecurityPolicy 迁移文档的确定适当的 Pod 安全级别章节。

将集群升级到 Kubernetes v1.25

在前面的步骤完成并且集群中没有剩余的 PodSecurityPolicies 之后,就可以将集群升级到 Kubernetes v1.25 了。对于下游集群,你可以通过 Rancher UI 执行升级。

要升级集群,请导航至 Cluster Management。在 Clusters 页面中,单击要升级到 Kubernetes v1.25 的集群对应的汉堡菜单,然后选择 Edit Config 选项。根据你的集群类型更改 Kubernetes 版本:

  • RKE:导航到 Cluster Options → Kubernetes options。在 Kubernetes 版本字段中,选择你要升级到的 v1.25 版本。
  • RKE2 或 K3S:导航到 Cluster Configuration 面板并选择 Basics 窗格。在 Basics 部分下,找到 Kubernetes Version 字段,选择你要升级到的 v1.25 版本。

保存选择的配置。你将看到集群从 Active 过渡到 Upgrading 的状态。升级可能需要一些时间,完成后集群状态将再次变为 Active 状态。

细粒度的策略

由于 Pod Security Admission 和 Pod Security Standards 不像 PodSecurityPolicies 那样细化,并且不提供突变功能来确保 Pod 符合规则,你可能希望通过在集群中安装单独的准入控制器来补充功能。在 Kubernetes 领域,有一些准入控制器提供可变准入和更细粒度的验证功能,例如 Kubewarden、Kyverno、Neuvector 和 OPA Gatekeeper 等等。你可以在本文末尾找到有关这些补充策略引擎的文档链接。

故障排查

升级到 Kubernetes v1.25 后,如果你忘记检查是否存在 PodSecurityPolicies(或其他已停用的 API),你可能会注意到某些 Helm 版本无法升级或卸载。如果发生这种情况,你可以使用 helm-mapkubeapis 插件将你的版本恢复到工作状态。此插件读取 Helm 发布数据并用新版本替换被取代的 API,或删除引用已从 Kubernetes 中完全删除的 API 的资源。

请注意,Helm 插件是在运行命令的机器上安装的。因此,请确保在你打算运行清理步骤的同一台机器上运行安装步骤。

安装 helm-mapkubeapis

  1. 请确保你已经安装了 Helm,执行 helm version 会得到类似如下的输出:
version.BuildInfo{Version:"v3.10.2", GitCommit:"50f003e5ee8704ec937a756c646870227d7c8b58", GitTreeState:"clean", GoVersion:"go1.18.8"}
  1. 安装 helm-mapkubeapis 插件:
helm plugin install https://github.com/helm/helm-mapkubeapis

输出应类似于:

Downloading and installing helm-mapkubeapis v0.4.1 …
https://github.com/helm/helm-mapkubeapis/releases/download/v0.4.1/helm-mapkubeapis_0.4.1_darwin_amd64.tar.gz
Installed plugin: mapkubeapis
  1. 检查插件是否正确安装:
helm mapkubeapis --help

输出应类似于:

Map release deprecated or removed Kubernetes APIs in-place
Usage:mapkubeapis [flags] RELEASE
Flags:--dry-run               simulate a command-h, --help              help for mapkubeapis--kube-context string   name of the kubeconfig context to use--kubeconfig string     path to the kubeconfig file--mapfile string        path to the API mapping file--namespace string      namespace scope of the release

确保安装的 helm-mapkubeapis 版本为 v0.4.1 或更高版本,因为早期版本不支持删除资源。

清理 PodSecurityPolicies

  1. 运行 kubectl cluster-info 确保可以访问目标集群。
  2. 列出集群中安装的所有版本
helm list --all-namespaces
  1. 使用 helm mapkubeapis --dry-run <release-name> --namespace <namespace-name> 对你想清理的每一个版本进行模拟运行,输出会告知你哪些资源将被替换或移除。
  2. 查看更改后,执行完整命令:
helm mapkubeapis <release-name> --namespace <namespace-name>.

将你的工作负载升级到支持 Kubernetes v1.25 的版本

清理损坏的版本后,你需要将工作负载升级到 Kubernetes v1.25 中支持的版本。不能跳过这个步骤,因为清理后的版本不能保证正常工作或具有 Kubernetes v1.25 所需的安全性。

对于 Rancher 维护的工作负载,请按照本文删除 PodSecurityPolicies 部分中介绍的步骤进行操作。对于其他工作负载,请参阅对应的供应商的文档。

下一步

  • 详细了解 Pod Security Admission控制器和 Pod Security Standard 。
  • 详细了解补充策略引擎:Kubewarden、Kyverno、NeuVector 和 OPAGatekeeper。
  • 查看如何将 PodSecurityPolicies 迁移到 Kubewarden 策略。
  • 详细了解如何使用 helm-mapkubeapis。

http://www.ppmy.cn/news/82483.html

相关文章

现代C++技术研究(7)---std::move的使用场景

支持移动语义&#xff0c;是现代C的主要语言特性之一&#xff0c;std::move本质上就是把一个变量强转成右值引用。在gcc的源码中&#xff0c;std::move的实现如下&#xff1a; template<typename _Tp>_GLIBCXX_NODISCARDconstexpr typename std::remove_reference<_Tp…

redis缓存神器:@Cacheable注解

在之前的文章中&#xff0c;我们写了redis结合springboot做缓存分页的方法&#xff1a; 在 Spring Boot 中结合 Redis 进行缓存分页数据&#xff0c;可以通过以下步骤实现&#xff1a; 在 pom.xml 文件中添加 Redis 相关依赖&#xff1a; <dependency><groupId>…

科研热点|国家自然科学基金项目评审请托行为禁止清单正式发布!

5月24日&#xff0c;《国家自然科学基金项目评审请托行为禁止清单》正式发布&#xff01;与5月16日发布的《国家自然科学基金项目评审请托行为禁止清单(征求意见稿)》相比&#xff0c;新增了多项内容&#xff0c;如一&#xff08;四&#xff09;、二&#xff08;五&#xff09;…

清除浮动的方法

目录 清除浮动 2.1 清除浮动的方法 — ① 直接设置父元素高度 2.2 清除浮动的方法 — ② 额外标签法 2.3 清除浮动的方法 — ③ 单伪元素清除法 2.4 清除浮动的方法 — ④ 双伪元素清除法 2.5 清除浮动的方法 — ⑤ 给父元素设置overflow : hidden 清除浮动 ➢ 含义&#…

简单分享在微信上扫码点餐小程序怎么做

目前市场上有很多扫码点餐的小程序系统&#xff0c;制作方法有三种&#xff1a; 1、使用微信商家推出的扫码点餐小程序&#xff0c;上传营业执照和食品经营许可证就可以开通使用&#xff0c;然后上传自己的菜品信息就可以了&#xff0c;功能相对比较简单。 2、购买餐饮系统公司…

Http协议网络读卡器Aspx网页Request获取刷卡数据Response回应驱动显示

中文液晶显示http协议网络读卡器是一款能利用现有的计算机网络&#xff0c;不需要独立布线就可以组成一个高性能低成本实时联网ID卡管理系统的端终设备&#xff0c;刷卡后即时向远程计算机传送卡号信息&#xff0c;电脑对刷卡信息处理后可即时向读卡器发送相应的显示及响应提示…

巧用bash的eval命令解析配置文件

背景 最近工作上经常需要导出硬件模块的寄存器&#xff0c;而导出脚本在HAPS&#xff08;一种FPGA仿真平台&#xff09;的执行速度很慢&#xff0c;一开始我以为是执行导出的定制版lookat命令有问题&#xff0c;加了每个步骤的时间戳后没发现问题&#xff0c;于是转而寻找整个…

Cisco Identity Services Engine (ISE) 3.2 Patch2 发布 - 思科身份服务引擎

Cisco Identity Services Engine (ISE) 3.2 Patch2 发布 - 思科身份服务引擎 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-ise-3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 工作场所零信任安全的核心所在 …