Rancher-Kubewarden-保姆级教学-含Demo测试
一、什么是Kubewarden?
What is Kubewarden? | Kubewarden
1、就是容器集群的准入策略引擎。
1、使用的策略其实就是k8s原生的security context.
2、使用WebAssembly来编写策略。
1、WebAssembly,可以使用擅长的开发语言来编写策略。(下面的Demo)
2、支持写的语言参考:I want to… - WebAssembly
3、编写WebAssembly可以集成在CI/CD的管道中。
二、Kubewarden的安全策略怎么写?
1、首先这个集群的安全交给开发来管,怕是不现实,而我们运维人员最最常用的语言几乎都是Python,那么来写这个安全策略呢?
2、Kubewarden官网有一个ctl工具来帮助生成和管理策略。
kwctl
GitHub - kubewarden/kwctl: Go-to CLI tool for Kubewarden users
3、编写策略的首选语言是(开发人员自己写)
rust
Install Rust - Rust Programming Language
三、Kubewarden的重要组件
1、kubewarden-controller
它与k8s集群的api-server通信,并会监视api-server执行pod “create update ”等动作时,把执行的行为交给policy-server评估,是否符合我们策略的要求。policy-server会返回符合或者不符合。
2、policy-server
负责具体的策略评估,并且支持一个集群部署多个policy-server。
3、ClusterAdmissionPolicy or AdmissionPolicy
具体的策略,顾名思义一个是集群级别的一个是命名空间级别的。
四、Demo演示
1、下载kwctl
wget -o https://github.com/kubewarden/kwctl/releases/download/v1.12.0/kwctl-linux-x86_64.zip
*这是 x86平台的,其余平台请参考项目的Releases · kubewarden/kwctl · GitHub。
2、改名并传递到环境遍历的路径下
mv kwctl-linux-x86_64 kwctl
chmod +x kwctl
cp kwctl /usr/bin
3、安装Kubewarden
1、前提
1、有helm
2、有cert-manager
2、安装
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
$ helm repo add kubewarden https://charts.kubewarden.io
$ helm install --create-namespace -n kubewarden kubewarden-crds kubewarden/kubewarden-crds
$ helm install --wait -n kubewarden kubewarden-controller kubewarden/kubewarden-controller
$ helm install --wait -n kubewarden kubewarden-defaults kubewarden/kubewarden-defaults
3、验证
4、官网有一个测试的策略也可以自己来玩。
kubectl apply -f - <<EOF
---
apiVersion: policies.kubewarden.io/v1alpha2
kind: ClusterAdmissionPolicy
metadata:name: privileged-pods
spec:policyServer: defaultmodule: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9rules:- apiGroups: [""]apiVersions: ["v1"]resources: ["pods"]operations:- CREATE- UPDATEmutating: false
EOF
*就是不允许创建特权容器的策略。
5、那么作为运维人员怎么找合适的策略呢?
https://artifacthub.io/packages/search?kind=13&sort=relevance&page=1
*这个页面有很多官网写好的策略可以直接使用。
例如:
*不允许创建service 类型为NodePort。
2、怎么下载?
1、还记得我们下载安装的kwctl工具吗?现在就可以用了。 
2、使用kwctl 拉取策略
验证:
kwctl policies

检查你拉去策略,是否符合你的想法:
kwctl inspect registry://ghcr.io/kubewarden/policies/disallow-service-nodeport:v0.1.7

因为是要部署到环境中的,我们使用Chart-Gpt逐行来解释:
这条规则是一个 Kubernetes 策略,名为 "disallow-service-nodeport"。它的作用是防止创建类型为 `NodePort` 的 Service 资源。让我们逐条解释其中的一些关键点:
1. **描述和来源:**
- 描述:该策略的目的是防止创建 `NodePort` 类型的 Service 资源。
- 作者:该策略由 Kubewarden 开发人员开发。
- 链接:提供了该策略的 GitHub 页面链接以及源代码链接。
- 许可:该策略采用 Apache-2.0 许可证。
2. **注解:**
- 类别:指出该策略属于 Service 类别。
- 关键词:列出了与该策略相关的关键词。
- 显示名称:给出了该策略的显示名称。
- 严重程度:该策略的严重程度被标记为高。
- OCI URL:提供了该策略在 OCI registry 中的 URL。
- 资源:指出该策略涉及的资源类型。
3. **规则:**
- 该策略规定了针对 Service 资源的操作:
- apiGroups:空字符串表示核心 API 组。
- apiVersions:指定 Kubernetes API 的版本。
- resources:指定操作的资源类型为 services。
- operations:指定了允许的操作,即 CREATE(创建)和 UPDATE(更新)Service 资源。
4. **用途:**
- 该策略的作用是检查 Service 资源的类型,并防止创建类型为 `NodePort` 的 Service。
- 对于 Kubernetes 网络策略而言,无法控制通过这种类型的 Service 暴露的内容。因此,通常更安全的选择是对创建这种类型的 Service 进行更严格的控制。
5. **配置:**
- 该策略不需要任何配置值,意味着它可以直接使用而无需特定的配置。
总的来说,这个策略旨在增强 Kubernetes 的安全性,通过阻止创建 `NodePort` 类型的 Service,从而避免了潜在的安全风险。
*那么现在很清晰了,但你要创建、更新service资源的时候不允许type 为 NodePort.
3、上面是作者的策略自述,我们部署到生产或者测试环境,是肯定要先评估测试的。接下来我们进行Demo评估.
1、评估命令格式:
命令:kwctl run -r <"Kubernetes Admission request" file path> -s <"JSON document" file path> <policy URI>
kwctl run registry://ghcr.io/kubewarden/policies/disallow-service-nodeport:v0.1.7 -r disallow-service-nodeport.json
*-r :disallow-service-nodeport.json
解释一下:1、你的规则是创建或者更新 service的时候不允许类型为NodePort.
2、那么你就要模拟你创建的动作为创建NodePort的service的准入动作。
kube-apiserver Admission (v1) | Kubernetes
*上面为参考文档,了解即可,具体的json文件可以用Chart-Gpt生成。
3、下面为我们测试的json例子,保存为disallow-service-nodeport.json.
{"kind": "AdmissionReview","apiVersion": "admission.k8s.io/v1","request": {"uid": "12345678-1234-1234-1234-1234567890ab","kind": {"group": "","version": "v1","kind": "Service"},"resource": {"group": "","version": "v1","resource": "services"},"namespace": "default","operation": "CREATE","userInfo": {"username": "user","groups": ["system:masters"]},"object": {"kind": "Service","apiVersion": "v1","metadata": {"name": "my-service","namespace": "default"},"spec": {"type": "NodePort","ports": [{"port": 80,"targetPort": 80,"protocol": "TCP"}]}},"oldObject": null}
}
4、测试
rke2-01:~/rust # kwctl run registry://ghcr.io/kubewarden/policies/disallow-service-nodeport:v0.1.7 -r disallow-service-nodeport.json
libunwind: __unw_add_dynamic_fde: bad fde: FDE is really a CIE
{"uid":"12345678-1234-1234-1234-1234567890ab","allowed":false,"status":{"message":"Service of type NodePort are not allowed"},"auditAnnotations":null,"warnings":null}
*策略给拦截了,因为我们创建的是一个类型为NodePort的Service。
*接下来我们把这条规则部署到k8s集群中测试。
5、编写 ClusterAdmissionPolicy or AdmissionPolicy ,我们使用AdmissionPolicy在default命名空间下测试。
vim no_Node_Port_svc.yaml
*不写policy_server字段默认为 default. 的policy-server.
apiVersion: policies.kubewarden.io/v1alpha2
kind: AdmissionPolicy
metadata:name: privileged-podsnamespace: default
spec:module: "registry://ghcr.io/kubewarden/policies/disallow-service-nodeport:v0.1.7"settings: {}rules:- apiGroups:- ""apiVersions:- v1resources:- servicesoperations:- CREATE- UPDATEmutating: false
部署策略。
kubectl apply -f no_Node_Port_svc.yaml
查看验证:
kubectl get admissionpolicy -A

*状态为active则生效,下面开始测试。
5、测试yaml,在default空间下,类型为NodePort
vim demo_svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-nodeport-servicenamespace: default
spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 8080nodePort: 30000 # NodePort的端口号type: NodePort
部署测试:
kubectl apply -f demo_svc.yaml
被策略阻止了,测试成功。
清理:
kubectl delete -f no_Node_Port_svc.yaml
kubectl get admissionpolicy -A
rke2-01:~/rust # kubectl delete -f no_Node_Port_svc.yaml
admissionpolicy.policies.kubewarden.io "privileged-pods" deleted
rke2-01:~/rust # kubectl get admissionpolicy -A
No resources found
清理完毕后就可以创建了,确认为策略阻止了:
总结:
1、Rancher的项目依旧能打。
2、对于不想在pod中写security context的运维同行是福音。
3、控制器和policy-server 分离部署,方便扩展好评。
4、运维人员写不了策略差评,希望后期能给个python的sdk.
相关文章:
Rancher-Kubewarden-保姆级教学-含Demo测试
一、什么是Kubewarden? What is Kubewarden? | Kubewarden 1、就是容器集群的准入策略引擎。 1、使用的策略其实就是k8s原生的security context. 2、使用WebAssembly来编写策略。 1、WebAssembly,可以使用擅长的开发语言来编写策略。(下面的…...
Lumerical Script ------ array 数组类型 和 matrix 矩阵类型
Lumerical Script ------ array 数组类型 和 matrix 矩阵类型 引言正文array 数组类型matrix 矩阵类型引言 这篇仅仅用作个人笔记,因为作者本人比较擅长 Python,每次写 Lumerical Script 总是会写错代码。 正文 array 数组类型 Lumerical Script 脚本有些像 Matlab 脚本,…...
Springboot自动装配源码分析
版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </par…...
Visual Transformer (ViT)模型详解 动图讲解
1 Vit简介 1.1 Vit的由来 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型,虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好),成为了transformer在CV领域应用的里程碑著作,也…...
C++:完美转发(一)(std::forward)
一、理解引用折叠 (一)引用折叠 1. 在C中,“引用的引用”是非法的。像 auto& &rx x;(注意两个&之间有空格)这种直接定义引用的引用是不合法的,但是编译器在通过类型别名或模板参数推导等语境…...
西部首个全域直播基地,打造西部直播基地领军形象
天府锋巢直播产业基地作为西部直播产业的领军者,以其前瞻性的战略布局和卓越的服务体系,正加速推动全域直播的快速发展,助力直播产业实现新升级。该基地作为成都规模最大的直播基地,以加快全域直播为核心目标,通过促进…...
钟表——蓝桥杯十三届2022国赛大学B组真题
问题分析 这个问题的关键有两点:1.怎么计算时针,分针,秒针之间的夹角,2.时针,分针,秒针都是匀速运动的,并非跳跃性的。问题1很好解决看下面的代码就能明白,我们先考虑问题2…...
CSS 之 圆形波浪进度条效果
一、简介 本篇博客讲述了如何实现一个圆形波浪进度条的样式效果,具体效果参考下方GIF图。该样式的加载进度条可以用在页面跳转或数据处理等情况下的加载动画,比起普通的横条进度条来说,样式效果更生动美观。 实现思路: 这…...
按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)
需求如下: 按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移动。 解析: 鼠标按下事件:onmousedown 鼠标移动事件:onmousemove 鼠标抬起事件:onmouseup <!DOCT…...
第十二章 项目采购管理
12.1 规划采购管理 12.2 实施采购 12.3 控制采购 项目经理通常没有签订合同的权限,但必须熟悉正规的采购流程; 协议是采购的核心文件,关于协议我们要知道: 协议包括:合同、服务水平协议、谅解、协议备忘录或采购订单 ❗…...
PSFR-GAN复现
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言快速开始安装依赖权重下载及复原 训练网络数据集训练脚本 代码详解训练BaseOptio…...
函数和数组
一、函数 1.函数使用方法 定义函数再引用函数 2.基本函数格式 基本格式1: function 函数名{ 命令序列 } 基本格式2: 函数名(){ 命令序列 } 基本格式3: function func_name () {…...
docker安装时报错:Error: Nothing to do
安装docker时报以下错误 解决方法: 1.下载关于docker的相关依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…...
白盒测试:覆盖测试及测试用例设计
白盒测试:覆盖测试及测试用例设计 一、实验目的 1、掌握白盒测试的概念。 2、掌握逻辑覆盖法。 二、实验任务 某工资计算程序功能如下:若雇员月工作小时超过40小时,则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过…...
Java高级开发2024高频面试提问题目
1、请先简单自我介绍一下自己?(一般不超过5min) 2、你最熟悉的项目是哪一个,讲一下用了哪些技术栈?(尽量讲出系统架构图使用到的技术组件和为什么选型这个组件?) 3、你项目中使用什…...
Kamailio openssl 3.0.x 需要注意的事项
我们留意到 Debian Bookworm 安装的 openssl 版本是 3.0.x 这里有几个地方要注意: modparam("tls", "init_mode", 1)核心参数 tls_threads_mode 配置为 1 或者 配置为 2,默认为 0版本建议用 5.8.1,貌似 5.7.x 也行 参…...
SpringAMQP Work Queue 工作队列
消息模型: 代码模拟: 相较于之前的基础队列,该队列新增了消费者 不再是一个,所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…...
一分钟带你了解什么是等保测评
等保测评,即网络安全等级保护测评,是依据国家信息安全等级保护制度规定,对信息系统进行安全技术测评和安全管理测评,以确定系统的安全保护水平是否达到预定的安全等级要求。以下是等保测评的相关知识点总结: 测评概述&…...
宝塔面板怎么解决nginx跨域问题
1.找到宝塔的nginx配置文件 宝塔有一点不同,nginx配置文件不在nginx的安装目录中,应当去/www/server/panel/vhost/nginx找到 2.添加你要跨域的地址 location /api {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-…...
Python 自动化脚本系列:第1集
昨天写了一篇介绍如何使用Python实现自动化任务的,文章末尾介绍了一个简单的自动化脚本,因此今天编号从2开始。顺便附上昨天的文章链接: Python 自动化脚本系列:介绍 欢迎关注博主,持续输出更多Python相关内容&#…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
