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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10421.shtml

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

相关文章

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Method3.1 Motion Enhanced Module3.2 Temporal Interaction Module3.3 TEINet 4 Experiments5 Conclusion阅读总结 文章信息; 原文链接&#xff1a;https:…

做题杂记666

[XYCTF2024] 铜匠 题目描述&#xff1a; from Crypto.Util.number import * from secrets import flagm bytes_to_long(flag) m1 getRandomRange(1, m) m2 getRandomRange(1, m) m3 m - m1 - m2def task1():e 149p getPrime(512)q getPrime(512)n p * qd inverse(e,…

Redis基础面试知识点(1)

相比于C字符串&#xff0c;SDS的优势&#xff1a; O(1)获取字符串的长度不会缓冲区溢出减少修改字符串时所需的内存重新分配的次数&#xff08;空间预分配、惰性空间释放&#xff09;二进制API安全&#xff08;通过len获取长度&#xff09;兼容部分C字符串函数 Redis hash策略…

干货分享:AI知识库-从认识到搭建

随着知识库的出现&#xff0c;人工智能也逐渐加入进来&#xff0c;形成了“AI知识库”。也许将AI和知识库拆开&#xff0c;你能理解是什么意思&#xff0c;但是当两个词结合在一起时&#xff0c;你又真的能理解它是做什么的吗&#xff1f;这就是今天我们要来聊的话题&#xff0…

全网最详细IOS系统APP上架教程(二)

上一篇讲解了IOS系统APP上架注册苹果开发者账号需要的材料、邓白氏编码的注册等&#xff0c;本文将继续讲解后续流程。 详细步骤 三、申请苹果开发者账号 在苹果手机上安装Apple Developer 打开Apple Developer&#xff0c;用之前注册好的Apple ID登录&#xff0c;输入姓名身…

J1019基于SpringBoot的护肤品推荐系统设计与实现(源码+包运行+技术指导)

项目描述 临近学期结束&#xff0c;开始毕业设计制作&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉的困难吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的护…

QT+网络调试助手+TCP服务器

一、UI界面设计 二、单线程 代码设计 1、 查找合法的本地地址&#xff0c;用于当作服务器的IP地址 #include <QThread> #include <QTcpSocket> #include <QNetworkInterface> #include <QMessageBox>QList<QHostAddress> ipAddressesList QNe…

排序算法之希尔排序(缩小增量排序)

希尔排序是插入排序的优化&#xff0c;如果不了解插入排序可以看排序算法之插入排序-CSDN博客这篇博客&#xff0c;希尔排序算法通过对原始数据集使用 gap 分组的方法&#xff0c;先将数据分组进行插入排序&#xff0c;随着排序的进行&#xff0c;逐渐减小 gap 的值&#xff0c…

怎样的跨网软件,可以实现网间数据的安全收发?

网络隔离已是较为常见的网络安全保护措施&#xff0c;比如防火墙、网闸、VLAN&#xff0c;云桌面虚拟环境等方面进行隔离。像一些科技研发型企业&#xff0c;不仅仅是内外网隔离&#xff0c;甚至还划分办公网、研发网、测试网、生产网等&#xff0c;防止研发资料、设计资料等敏…

Redis——缓存雪崩、缓存穿透、缓存击穿

在项目中&#xff0c;通常会使用数据库比如 MySQL 存储应用数据&#xff0c;但是当数据太多之后&#xff0c;比如多了几十万条或上百万条的商品信息&#xff0c;这个时候查询商品数据的速度会很慢&#xff0c;影响用户体验。此时一般我们会选择将部分商品信息缓存起来&#xff…

JavaSE基础小知识Ⅱ(很容易错!!!)

1. 变量被final修饰后不能再指向其他对象&#xff0c;但可以重写 如果是引用变量被final修饰&#xff0c;那么的确如此&#xff1b; 基本变量不能重写 2. 下列代码的输出结果是&#xff1f; public class Test {static {int x 5; }static int x,y; public static void ma…

java--io流(二)

一、打印流&#xff08;PrintStream[字节]、PrintWriter[字符]&#xff09; &#xff08;基本上可以代替前面所学的字节、字符输出流&#xff09;&#xff0c;二者关于打印数据功能相同&#xff08;都方便且高效&#xff09;&#xff0c;但是关于数据写出不同&#xff0c;前者…

数据的均匀化分割算法(网格划分法、四叉树法(含C++代码))

数据的均匀化分割主要是指在分割过程中尽可能均匀地将数据点分布在各个子区域中&#xff0c;以保持数据分布的平衡和优化数据结构的性能。以下是几种可以实现数据均匀化分割的方法&#xff1a; 一. 网格划分法 1. 基本概念 虽然传统的网格划分法不是动态调整的&#xff0c;但通…

3款超好用的智能AI写作神器,不容错过!

在当代写作领域&#xff0c;人工智能&#xff08;AI&#xff09;辅助的写作工具已显著地改变了创作过程&#xff0c;不仅优化了撰写效率还提高了内容质量。为了协助读者更好地了解并利用这些先进的工具&#xff0c;本文将详细评述3种卓越的AI驱动的写作辅助软件&#xff0c;每一…

AJ65SBT2B-64DA 三菱CC-Link D/A转换模块

AJ65SBT2B-64DA 是将数字值(16位有符号BIN数据)转换为模拟值(电压或电流)的模块。 AJ65SBT2B-64DA参数说明&#xff1a;4通道&#xff1b;输入分辨率0~12000&#xff0c;-12000~12000&#xff0c;-16000~16000&#xff1b;输出DC-10~10V&#xff0c;DC0~20mA&#xff1b;转换速…

028.实现 strStr()

题意 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 难度 简单 示例 例 1 输入&#xff1a;hays…

【Win10点击任务栏刷屏,卡死转圈(亲测有效)】

计算机疑难杂症001 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效)1、问题状况2、问题原因3、问题解决 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效) 1、问题状况 在偶然间&#xff0c;发现任务栏点不动了&#xff0c;点击无反应&#xff0c;再多点击几次&#x…

网络爬虫概述与原理

网络爬虫概述与原理 网络爬虫简介狭义上理解功能上理解常见用途总结 网络爬虫分类通用网络爬虫聚焦网络爬虫增量网络爬虫深度网络爬虫 网络爬虫流程网络爬虫采集策略深度有限搜索策略广度优先搜索策略 网络爬虫简介 通过有效地获取网络资源的方式&#xff0c;便是网络爬虫。网…

Threejs Shader动态修改Merge合并几何体中单个Mesh的颜色

目录 Merge合并 现象 思路 实现 为单个geometry添加映射 通过id检索Merge后的Geometry映射属性&#xff0c;获取顶点坐标 onBeforeCompile修改编译前材质的着色代码 编译前材质的顶点着色代码 编译前材质的片元着色代码 着色器代码 注意 效果 Merge合并 mergeBuf…