当前位置: 首页 > news >正文

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&#xff1f; What is Kubewarden? | Kubewarden 1、就是容器集群的准入策略引擎。 1、使用的策略其实就是k8s原生的security context. 2、使用WebAssembly来编写策略。 1、WebAssembly&#xff0c;可以使用擅长的开发语言来编写策略。&#xff08;下面的…...

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)

一、理解引用折叠 &#xff08;一&#xff09;引用折叠 1. 在C中&#xff0c;“引用的引用”是非法的。像 auto& &rx x;&#xff08;注意两个&之间有空格&#xff09;这种直接定义引用的引用是不合法的&#xff0c;但是编译器在通过类型别名或模板参数推导等语境…...

西部首个全域直播基地,打造西部直播基地领军形象

天府锋巢直播产业基地作为西部直播产业的领军者&#xff0c;以其前瞻性的战略布局和卓越的服务体系&#xff0c;正加速推动全域直播的快速发展&#xff0c;助力直播产业实现新升级。该基地作为成都规模最大的直播基地&#xff0c;以加快全域直播为核心目标&#xff0c;通过促进…...

钟表——蓝桥杯十三届2022国赛大学B组真题

问题分析 这个问题的关键有两点&#xff1a;1.怎么计算时针&#xff0c;分针&#xff0c;秒针之间的夹角&#xff0c;2.时针&#xff0c;分针&#xff0c;秒针都是匀速运动的&#xff0c;并非跳跃性的。问题1很好解决看下面的代码就能明白&#xff0c;我们先考虑问题2&#xf…...

CSS 之 圆形波浪进度条效果

一、简介 ​ 本篇博客讲述了如何实现一个圆形波浪进度条的样式效果&#xff0c;具体效果参考下方GIF图。该样式的加载进度条可以用在页面跳转或数据处理等情况下的加载动画&#xff0c;比起普通的横条进度条来说&#xff0c;样式效果更生动美观。 实现思路&#xff1a; ​ 这…...

按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)

需求如下&#xff1a; 按下鼠标进行拖拽&#xff0c;让元素跟随鼠标进行移动&#xff0c;鼠标抬起&#xff0c;元素停止移动。 解析&#xff1a; 鼠标按下事件&#xff1a;onmousedown 鼠标移动事件&#xff1a;onmousemove 鼠标抬起事件&#xff1a;onmouseup <!DOCT…...

第十二章 项目采购管理

12.1 规划采购管理 12.2 实施采购 12.3 控制采购 项目经理通常没有签订合同的权限&#xff0c;但必须熟悉正规的采购流程&#xff1b; 协议是采购的核心文件&#xff0c;关于协议我们要知道&#xff1a; 协议包括&#xff1a;合同、服务水平协议、谅解、协议备忘录或采购订单 ❗…...

PSFR-GAN复现

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言快速开始安装依赖权重下载及复原 训练网络数据集训练脚本 代码详解训练BaseOptio…...

函数和数组

一、函数 1.函数使用方法 定义函数再引用函数 2.基本函数格式 基本格式1&#xff1a; function 函数名{ ​ 命令序列 } 基本格式2&#xff1a; 函数名&#xff08;&#xff09;{ 命令序列 } 基本格式3&#xff1a; function func_name &#xff08;&#xff09; {…...

docker安装时报错:Error: Nothing to do

安装docker时报以下错误 解决方法&#xff1a; 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…...

白盒测试:覆盖测试及测试用例设计

白盒测试&#xff1a;覆盖测试及测试用例设计 一、实验目的 1、掌握白盒测试的概念。 2、掌握逻辑覆盖法。 二、实验任务 某工资计算程序功能如下&#xff1a;若雇员月工作小时超过40小时&#xff0c;则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过…...

Java高级开发2024高频面试提问题目

1、请先简单自我介绍一下自己&#xff1f;&#xff08;一般不超过5min&#xff09; 2、你最熟悉的项目是哪一个&#xff0c;讲一下用了哪些技术栈&#xff1f;&#xff08;尽量讲出系统架构图使用到的技术组件和为什么选型这个组件&#xff1f;&#xff09; 3、你项目中使用什…...

Kamailio openssl 3.0.x 需要注意的事项

我们留意到 Debian Bookworm 安装的 openssl 版本是 3.0.x 这里有几个地方要注意&#xff1a; modparam("tls", "init_mode", 1)核心参数 tls_threads_mode 配置为 1 或者 配置为 2&#xff0c;默认为 0版本建议用 5.8.1&#xff0c;貌似 5.7.x 也行 参…...

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列&#xff0c;该队列新增了消费者 不再是一个&#xff0c;所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…...

一分钟带你了解什么是等保测评

等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是依据国家信息安全等级保护制度规定&#xff0c;对信息系统进行安全技术测评和安全管理测评&#xff0c;以确定系统的安全保护水平是否达到预定的安全等级要求。以下是等保测评的相关知识点总结&#xff1a; 测评概述&…...

宝塔面板怎么解决nginx跨域问题

1.找到宝塔的nginx配置文件 宝塔有一点不同&#xff0c;nginx配置文件不在nginx的安装目录中&#xff0c;应当去/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实现自动化任务的&#xff0c;文章末尾介绍了一个简单的自动化脚本&#xff0c;因此今天编号从2开始。顺便附上昨天的文章链接&#xff1a; Python 自动化脚本系列&#xff1a;介绍 欢迎关注博主&#xff0c;持续输出更多Python相关内容&#…...

基于PHP开发的图片高清无损在线压缩源码系统 带完整源代码以及搭建教程

系统概述 高清无损在线压缩源码系统基于PHP语言开发&#xff0c;结合GD库和ImageMagick等图像处理工具&#xff0c;实现了对JPEG、PNG、GIF等多种图片格式的高清无损压缩。系统采用B/S架构&#xff0c;用户只需通过浏览器访问系统界面&#xff0c;即可实现图片的上传、压缩、预…...

Linux提权--SUDO(CVE-2021-3156)Polkit(CVE-2021-4034)

免责声明:本文仅做技术学习与交流... 目录 SUDO(CVE-2021-3156) 影响版本 -判断&#xff1a; -利用&#xff1a; Polkit(CVE-2021-4034&#xff09; ​ -判断&#xff1a; -利用: 添加用户 SUDO(CVE-2021-3156) another: SUDO权限配置不当. 影响版本 由系统的内核和发…...

nodejs里面的 http 模块介绍和使用

Node.js的HTTP模块是一个核心模块&#xff0c;它提供了很多功能来创建HTTP服务器和发送HTTP请求。 http.Server是一个基于事件的http服务器&#xff0c;内部是由c实现的&#xff0c;接口是由JavaScript封装。 http.request是一个http客户端工具。 用户向服务器发送数据。 创…...

MVC框架简易实现【精细】

目录 mvc 的架构 MVC 框架 传统web开发的弊端 1.创建一个maven项目 2.添加maven依赖 3.创建TomCatService类 3.1 创建TomcatService类 3.2 TomcatService类讲解 3.3 安装项目到本地仓库&#xff0c;给其他项目使用 4.测试启动Tomcat 4.1 创建一个新的maven项目 4.2 引用…...

Java入门基础学习笔记18——赋值运算符

赋值运算符&#xff1a; 就是“”&#xff0c;就是给变量赋值的&#xff0c;从右边往左边看。 int a 10; // 把数据赋值给左边的变量a存储。 扩展赋值运算符&#xff1a; 注意&#xff1a;扩展的赋值运算符隐含了强制类型转换。 package cn.ensource.operator;public class…...

csv 可视化 python代码

excel查看csv后,csv就被锁定了,不能修改,用pyqt写一个csv查看工具,拖拽查看,非常方便 目录 第2版,提升加载速度 选中单元格统计个数,求和,平均值...

HashMap 和 Hashtable区别的底层原理

一、容器键值对&#xff1a; 1.HashMap 的 key 和 value 都允许为 null &#xff0c; HashMap 在 key 为 null 的时候&#xff0c;值必须为null。 2.Hashtable 的 key 和 value 都不允许为 null 。 Hashtable 遇到key或value为 null时 &#xff0c;将抛出 NullPointerException…...

代码随想录35期Day32-Java

Day32题目 LeetCode122.买股票的最佳时机 核心思想&#xff1a;很简单&#xff0c;只要第二天比第一天贵&#xff0c;就第一天买入&#xff0c;第二天卖出 class Solution {public int maxProfit(int[] prices) {// 只要后一天比这一天价钱高就买&#xff0c;然后第二天卖出…...

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言 在上篇中我们搭建了一个机器人模型(其由各个关节&#xff08;joint&#xff09;和连杆&#xff08;link&#xff09;组成)&#xff0c;此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中&#xff0c;关节一般有无限旋转&#xff08;continuous&#xff09;,有限旋转…...

【第66例】IPD体系进阶:华为IPD发展历程

目录 简介 样例 作者简介 简介 想要引入 IPD,首先就要思考一些问题: 跟我的企业适配吗? 流程会不会太重了? 一定要引入吗,有没有其他方式? 从目前大的环境来说。 中国制造业正在由“中国制造”向“中国创造”转变。 这也是企业价值转移的趋势。 宏碁集团创始人施振…...