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

news2024/12/23 18:18:24

介 绍

最初在 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.coloradmin.cn/o/567252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA-类隔离机制

一、类加载&#xff1a; 1、类加载&#xff1a;Java源程序经过编译器编译后变成字节码&#xff0c;字节码由虚拟机解释执行&#xff0c;虚拟机将每一条要执行的字节码加载到内存&#xff0c;发给解释器&#xff0c;解释器将其翻译成特定机器上的机器码&#xff0c;然后在特定的…

Windows 上安装和启动 Nacos 2.2.2 最新版本

文章目录 前言版本声明本地启动1. 下载 Nacos2. 开启鉴权配置3. 持久化数据库4. 启动 Nacos5. 启动测试 联系我 前言 本文旨在为您详细介绍如何安装和启动 Nacos 2.2.2 的最新版本&#xff0c;以及为 youlai-mall 开源商城版本的升级做好准备工作。 版本声明 名称版本操作系…

企业工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

【IP技术】IP地址详细解释

大家知道如何查看本机的 IP 吗&#xff1f;这个问题&#xff0c;即便是没有专业学过计算机的人&#xff0c;只要折腾过电脑&#xff0c;重装过系统&#xff0c;大多都会知道答案&#xff1a;在 Windows 下是 ipconfig&#xff0c;在 linux 下是 ifconfig。 在 Windows 下输入 i…

Activity的onCreate方法是怎样被调用的?

Activity的onCreate方法是怎样被调用的&#xff1f; 按前面源码分析的介绍&#xff0c;在Activity的onCreate方法中&#xff0c;添加如下的log&#xff1a; android.util.Log.i("wztest", "Activity onCreate", new Exception());重新编译后&#xff0c;…

移动云COCA架构,重新定义下一代云

当前&#xff0c;算力已经成为 全球科技竞争的焦点 为此&#xff0c;移动云重磅发布 「移动云COCA&#xff08;Compute on chip Architecture&#xff09;软硬一体片上计算架构」 以下简称移动云COCA架构 以此打造国家级自主可控的 高性能算力底座 带动国产化智算产业成熟…

10款实用高效的网页版PS插件推荐!

PS是设计界适用范围广、应用次数多的基础性设计工具&#xff0c;PS的功能之强大&#xff0c;常常令新手望而却步。其实&#xff0c;为了对PS的功能进行补充和优化&#xff0c;这些年来陆续开发出了许许多多的功能性PS插件&#xff0c;在网页版 PS ——即时设计上有很多PS插件使…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间&#xff0c;获得超一亿用户&#xff0c;成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线&#xff0c;其AI性能和完善程度再度提升&#xff0c;深受用户和…

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容&#xff0c;说是敏捷混合题型占到了 50%&#xff0c;但是这次318的考试&#xff0c;敏捷题占了大半&#xff0c;都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒&#xff0c;题目读不懂&#xff0c;或者觉得4个选项都不对或…

深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

xxs跨站之原理分类及攻击手法(25)

xss跨站达到原理&#xff0c;危害和特点 他和语言没有太大关系&#xff0c;它大部分都是属于一个前端的漏洞&#xff0c;搭建一个简易的php网站存在xss跨站漏洞 访问这个网站&#xff0c;x1&#xff0c;就输出1&#xff0c; 如果我们把x<script>alert(1)</script&g…

图解LeetCode——24. 两两交换链表中的节点

一、题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 二、示例 2.1> 示例 1&#xff1a; 【输入】head [1,2,3,4] 【…

Linux——gdb调试器

目录 前言&#xff1a; 二.gdb定义及指令&#xff1a; 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试&#xff1a; 调试指令1&#xff1a;l指令(小写L) run指令&#xff1a;运行程序&#xff0c;相当于VS中的直接运行不调试——可简化输入r break指令&#xff1…

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算) 目录 时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)预测效果基本介绍模型描述程序设计参考资料预测效果

基于yolov5全系列模型【n/s/m/l/x】开发构建汉字检测识别系统,调整图像尺寸分别对别416x416和640x640不同分辨率下的性能结果

汉字检测对我来说不是什么新鲜的内容了&#xff0c;因为早在之前的时候就已经有开发过相关的项目了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于轻量级YOLOv5开发构建汉字检测识别分析系统》 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《超轻…

港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为

港股市场新一轮改革举措渐次落地。特别是港交所推出特专科技公司上市机制&#xff0c;吸引符合资格的科技企业申请赴港上市&#xff0c;成为这一轮港股市场改革的“重头戏”。 作为香港资本市场的重要参与者&#xff0c;内资券商立足香港、背靠内地、辐射全球&#xff0c;走出一…

万国数据财报:股价暴跌51%,盈利能力下滑,万国数据前景黯淡

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入增长前景 万国数据&#xff08;GDS&#xff09;在3月中旬发布2022财年财务业绩时&#xff0c;为该公司提供了2023财年全年的收入指引。考虑到市场对万国数据的预期和其股价历史表现&#xff0c;猛兽财经认为&#xff0…

【zmq】ZeroMQ安装与入门案例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ZeroMQ的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

java原生LinkedList详解

java原生LinkedList详解 实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的节点中&#xff0c;然后通过引用将节点连接起来了&#xff0c;因此在在任意位置插入或者删除元素时&#xff0c;…

DMA控制两路DAC同时输出指定波形

0. 实验目标 使用 DMA 控制 DAC1 和 DAC2 同时输出不一样的波形&#xff0c;实验平台STM32F407ZG 1. 原理部分 1.1 DMA DMA 全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保…