升级你的Rancher下游集群到Kubernetes v1.25

这个文档(000021053)是根据免责声明在本文档的最后。

情况

最初在Kubernetes v1.21中弃用的PodSecurityPolicy API是完全移除n Kubernetes v1.25由于API被删除,您无法在Kubernetes v1.25集群中创建、编辑或查询PodSecurityPolicy资源。此外,由于它的准入控制器被删除,您的集群不能再执行在Kubernetes v1.24和更早版本中创建的任何PodSecurityPolicy规则。因此,必须将工作负载安全性迁移到新的Pod security Admission控制器、补充策略引擎或两者的组合。

本文讨论如何将Rancher下游集群准备到Kubernetes v1.25,包括如何使用特定于Rancher的机制来应用Pod安全许可配置,以及如何从下游集群中安装的由Rancher维护的工作负载中删除PodSecurityPolicies。它的结构是半教程。在非生产环境中运行这些步骤以熟悉流程,然后确定生产环境需要什么。

决议

需求

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

  • 您正在运行Rancher v2.7.2或更高版本。

  • 下游集群运行的是Kubernetes v1.24。

  • 你已经完成了大纲中列出的步骤从PodSecurityPolicies迁移到内置Pod安全准入控制器Kubernetes文档将您的PodSecurityPolicies映射到Pod安全许可配置或Pod安全标准标签。

  • 您已经评估了Pod Security Admission是否适合您的需求。在本文的最后,有一些关于补充策略引擎的链接资源,如果Pod Security Admission不足以满足您的用例,您可能希望添加到集群中。

配置Pod安全准入控制器

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

查看Pod安全准入配置预设

要查看随Rancher发货的Pod安全准入配置预设,请导航到集群管理->高级-> Pod安全准入同时以管理员身份登录Rancher。您将看到两个可用的预设:rancher-privilegedrancher-restricted。的rancher-restricted将强制、警告和审计值设置为限制并且包括一些名称空间豁免,以允许Rancher在您的集群中正常工作而无需进一步干预。的rancher-privileged预设相当于示例AdmissionConfiguration可在Kubernetes文档中获得也没有提供任何具体的安全保证。您可以阅读更多关于Pod安全准入和Pod安全标准的内容牧场主文档

(可选)创建自定义Pod安全准入配置

您还可以创建自己的Pod Security Admission配置。为此,导航到集群管理->高级-> Pod安全准入,并按创建


图形用户界面描述自动生成


为您的新Pod安全许可配置选择一个名称,以及您希望应用于强制执行、审计和警告的规则。如果适用于您的用例,您还可以指定豁免。填完表格后,一定要点击创建

配置集群以使用Pod安全准入配置

您可以利用Rancher用户界面来应用集群范围的Pod安全准入配置。在你的集群管理选项卡,选择您想要配置的集群的汉堡包菜单,然后选择编辑配置选择:

图形用户界面描述自动生成


按照特定于集群的步骤来启用它:

  • 驾驶台:导航到高级选项,然后在。中选择您的首选选项Pod安全准入配置模板字段。

  • RKE2k3:导航到集群配置面板。在基础知识窗格,在安全节中选择您的首选选项Pod安全准入配置模板字段。
完成配置后,请确保保存并测试它。

手动配置单个名称空间

要使用Pod Security Standards标签单独配置名称空间,请按照Kubernetes文档关于这个话题。请注意,当Pod安全准入配置与Pod安全标准标签结合使用时,任何应用于Pod安全准入配置中标记为豁免的资源的Pod安全标准标签都将被准入控制器忽略。

删除PodSecurityPolicies

本节假设您已经将您的PodSecurityPolicies映射到Pod安全准入配置和Pod安全标准名称空间标签中您的集群符合要求。如果您还没有这样做,请浏览关于从PodSecurityPolicies迁移到内置PodSecurity Admission Controller的Kubernetes文档

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

升级你的应用程序和市场图表,删除PodSecurityPolicies

以前安装了PodSecurityPolicies的牧场主维护的工作负载有一个新版本,格式为v102.x。Y,它允许你移除那些资源。值得注意的变化包括:

  • 创建一个新的PodSecurityPolicy开关:global.cattle.psp.enabled。以前的PodSecurityPolicy开关已被这个新开关所取代。

  • 在安装图表之前为PodSecurityPolicies添加集群功能验证。如果您尝试在打开PodSecurityPolicy开关的情况下将这些新图表安装到Kubernetes v1.25集群中,您将看到一条错误消息,要求您在继续之前禁用PodSecurityPolicies。

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

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

验证集群中的其他工作负载也已从PodSecurityPolicies迁移到PodSecurity Admission and Standards。您可以通过运行kubectl get PodSecurityPolicies来检查集群中仍然存在哪些podsecuritypolicy。请注意,集群中存在PodSecurityPolicy资源并不意味着有工作负载在使用它。

要检查哪些PodSecurityPolicies仍在使用,可以运行下面的命令。请注意,此策略可能会忽略当前未运行的工作负载,例如CronJobs、当前伸缩为零的工作负载或其他尚未推出的工作负载:

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

要了解更多关于检查正在使用的PodSecurityPolicies的策略,请参阅小节3.。确定适当的Pod安全级别Kubernetes的PodSecurityPolicy迁移文档。

将集群升级到Kubernetes v1.25

在完成前面的步骤并且集群中没有剩余的PodSecurityPolicies之后,是时候将集群升级到Kubernetes v1.25了。对于下游集群,可以通过用户界面进行操作。

要升级集群,请导航到集群管理。在集群页面,单击希望升级到Kubernetes v1.25的集群的汉堡包菜单,然后选择编辑配置选择。根据您的集群类型更改Kubernetes版本:

  • 驾驶台:导航到集群选项-> Kubernetes选项。在Kubernetes版本字段中,选择要升级到的v1.25补丁。

  • RKE2k3:导航到集群配置面板,并选择基础知识窗格。下基础知识节,找到Kubernetes版本字段。选择要升级到的v1.25补丁。

保存选择的配置。您将看到群集转换的状态活跃的升级。升级可能需要一些时间,并将反映在集群管理列表视图,就像您的集群状态一样活跃的

我的用例需要细粒度的策略

由于Pod安全准入和Pod安全标准不像PodSecurityPolicies那样精细,并且不提供可变特性来确保Pod遵守规则,因此您可能希望通过在集群中安装单独的准入控制器来补充功能。在Kubernetes领域,有一些准入控制器提供变异的准入和更细粒度的验证功能,比如Kubewarden、Kyverno、Neuvector和OPA Gatekeeper。您可以在本文末尾找到有关这些补充策略引擎的文档的链接。

故障排除

我忘了检查我的工作量是否存在挥之不去的PodSecurityPolicies

升级到Kubernetes v1.25后,如果您忘记检查遗留的PodSecurityPolicies(或其他停止使用的api),您可能会注意到一些Helm版本无法升级或卸载。如果发生这种情况,您可以使用helm-mapkubeapis插件将发布恢复到工作状态。这个插件读取Helm发布的数据,用新版本替换被取代的api,或者删除那些引用Kubernetes中完全删除的api的资源。

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

安装helm-mapkubeapis

  1. 在您选择的终端中,确保运行Helm版本来安装Helm。您应该看到类似以下的输出:

    Version . buildinfo {Version:"v3.10.2", GitCommit:"50f003e5ee8704ec937a756c646870227d7c8b58", GitTreeState:"clean", GoVersion:"go1.18.8"}
  1. 安装helm-mapkubeapis插件:

    Helm插件安装https://github.com/helm/helm-mapkubeapis

    输出应该类似于:

    下载和安装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已安装的插件:mapkubeapis
  1. 检查插件是否正确安装:

    Helm mapkubeapis——救命

    输出应该类似于:

    Map release已弃用或移除Kubernetes API。用法:mapkubeapis [flags] release标志:——干式运行模拟命令——h,——帮助mapkubeapis——kube-context string kubecconfig上下文的名称——kubecconfig string kubecconfig文件路径——mapfile string API映射文件路径——namespace string发布的命名空间范围

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

使用挥之不去的PodSecurityPolicies清理发布

  1. 打开您选择的终端,并确保通过运行来访问目标集群

    kubectl cluster-info
  1. 列出集群中安装的所有版本

    Helm list——所有名称空间
  1. 对希望使用helm清理的每个版本执行一次演练

    Helm mapkubeapis——dry-run ——namespace < namspace -name>

    输出将告诉您哪些资源将被替换或删除。

  1. 在检查更改之后,使用helm执行一次完整的运行

    Helm mapkubeapis ——namespace < namspace -name>

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

清理完所有不完整的版本后,您需要将工作负载升级到Kubernetes v1.25支持的版本。这是一个不应该跳过的必要步骤,因为清理后的版本不能保证工作或具有Kubernetes v1.25中所需的安全性。

对于rancher维护的工作负载,请遵循删除PodSecurityPolicies本文的第一部分。对于其他工作负载,请参阅供应商文档。

下一个步骤

免责声明

这个支持知识库为SUSE客户和对我们的产品和解决方案感兴趣的各方提供了一个有价值的工具,以获取信息、想法和相互学习。beplay体育官方app下载本材料仅供信息、个人或非商业用途,并按“原样”呈现,不作任何形式的保证。

  • 文档ID:000021053
  • 创建日期:2023年5月- 03 -
  • 修改日期:2023年5月- 03 -
    • SUSE牧场主

<返回支持搜索

有关SUSE知识库的问题或关注,请联系:tidfeedback[at]suse.com

SUSE支持论坛

让经验丰富的Sys Ops为您解答问题,或者与其他SUSE社区专家进行互动。

加入我们的社区

支持资源

了解如何充分利用您通过SUSE订阅、高级支持、学术计划或合作伙伴计划获得的技术支持。


SUSE客户支持快速参考指南 SUSE技术支持手册 更新报告
支持常见问题解答

打开事件

通过SUSE技术支持打开事件、管理订阅、下载补丁或管理用户访问。

去客户中心beplay官网首页