LabHub
学习 学习路径 课程

策略即代码

写一个会补上默认值的 mutate 策略

在 LabHub 中继续学习

目标

以三种方式使用填补缺失值的变体政策,并亲自确认不触动已经指定的值。最后制作对比报告,说明发生了什么变化以及如何变化。

为什么重要

只做阻止的政策将问题推给用户。如果全部拒绝无限制的板块,规则就会得到遵守,但每个团队都会产生“应该投入多少钱”的问题。变体政策会填补组织的基本值,同时遵守规则,没有人阻止。但是这里有一个不能越界的底线——绝对不会覆盖用户指定的值。团队cpu: 500m写着这样,如果政策悄悄地改变了,那支球队就无法相信自己的宣言,从那时起,政策就不再是信任的对象,而是恐惧的对象。所以追加主播+()不是语法装饰,而是合同。仅供参考,在这个环境中不会出现Admission Webhook,所以变形是kyverno用CLI进行本地评估,确认结果配置文件。

阶段

  1. /root/policy/mutate/add-team-label.yamlkind: ClusterPolicy请制作。spec.background明确,spec.rules[0].mutate.patchStrategicMerge.metadata.labels在下面+(team): unassigned请输入。规则名称是add-default-team,匹配是pol-lab名称空间的Pod是。
  2. /root/policy/mutate/add-defaults.yaml制定第二个政策,+(...)作为额外的主播,容器的resources.limitscpumemory请使用填充基本值的规则。还有/root/policy/mutate/out/anchors.md(150字节以上)的条件锚(),追加主播+(),还有=()或者X()请整理一下的差异。
  3. 相同的add-defaults.yamlmutate.patchesJson6902请再添加一个使用它的规则。op: addpath: /spec/containers/0/imagePullPolicyvalue: IfNotPresent是形态。还有/root/policy/mutate/out/json6902-note.txt请写下这种方式在处理排序·索引时为什么需要。
  4. add-defaults.yamlmutate.foreach请输入规则。list: "request.object.spec.containers"收到容器列表,在内部element变量必须指向当前项目。
  5. 两个政策/opt/lab/fixtures/policy/resources/bad-pod.yaml应用于,变形的Pod Manifest/root/policy/mutate/out/mutated.yaml请保存为。那个文件里有metadata.labels.teamspec.containers[0].resources.limits.memoryspec.containers[0].imagePullPolicy三个值都必须填写完毕。
  6. 同样的两个政策/opt/lab/fixtures/policy/resources/good-pod.yaml应用于/root/policy/mutate/out/preserved.yaml请保存为。这个板子原本team: platform标签和cpu: 500m有限制,变形后也必须保持原样
  7. /root/policy/mutate/mutate-existing.yaml请制作。spec.mutateExistingOnPolicyUpdate: true放在,规则的mutate.targetskind: Podnamespace: pol-lab请写下并修复不是触发的资源。还有/root/policy/mutate/out/existing-note.txt因为这个动作在后台运行,所以请写下需要额外的RBAC权限
  8. /root/policy/mutate/out/mutate-report.json请制作。最高级mutations在排列中包含3件以上,每个项目是field·before·after·rule需要拿你的身高。beforeafter请不要放入相同的项目。fieldteam包含这个的项目after价格是5次制作的mutated.yamlmetadata.labels.team必须与价格完全相同。

参考

制定附加标签的变体政策

/root/policy/mutate/add-team-label.yamlkind: ClusterPolicy请制作。spec.background明确,spec.rules[0].mutate.patchStrategicMerge.metadata.labels在下面+(team): unassigned请输入。规则名称是add-default-team,匹配是pol-lab名称空间的Pod是。

变形写在mutate下面。在地图上添加字段时,使用与对象相同形状的方式最容易阅读。已经有值的pad也会很快被处理,所以请从一开始就使用不覆盖的标记。

用额外的主播填充资源基本值

/root/policy/mutate/add-defaults.yaml制定第二个政策,+(...)作为额外的主播,容器的resources.limitscpumemory请使用填充基本值的规则。还有/root/policy/mutate/out/anchors.md(150字节以上)的条件锚(),追加主播+(),还有=()或者X()请整理一下的差异。

有的是单独的,意思是没有的话放进去就放着。必须用文件整理一下三个类型的锚的区别才能通过。

用JSON补丁修复数组项目

相同的add-defaults.yamlmutate.patchesJson6902请再添加一个使用它的规则。op: addpath: /spec/containers/0/imagePullPolicyvalue: IfNotPresent是形态。还有/root/policy/mutate/out/json6902-note.txt请写下这种方式在处理排序·索引时为什么需要。

用Strategic Merge很难准确定位“第几个容器”。有用op·path·value三个方式指定位置的方法。

写绕过容器列表的规则

add-defaults.yamlmutate.foreach请输入规则。list: "request.object.spec.containers"收到容器列表,在内部element变量必须指向当前项目。

不知道容器数量时,无法使用索引。请确认接收列表的键和指向当前项目的变量名。

将政策反转并保存变形结果

两个政策/opt/lab/fixtures/policy/resources/bad-pod.yaml应用于,变形的Pod Manifest/root/policy/mutate/out/mutated.yaml请保存为。那个文件里有metadata.labels.teamspec.containers[0].resources.limits.memoryspec.containers[0].imagePullPolicy三个值都必须填写完毕。

可以一次性传递两个政策文件。要保存的不是执行摘要,而是变形的板块清单。

确认已经存在的值是否被保存

同样的两个政策/opt/lab/fixtures/policy/resources/good-pod.yaml应用于/root/policy/mutate/out/preserved.yaml请保存为。这个板子原本team: platform标签和cpu: 500m有限制,变形后也必须保持原样

将相同的政策转到填充了值的画布上。如果原来的值变了,说明没有使用或使用错误了锚。

写修补已经存在的资源的政策

/root/policy/mutate/mutate-existing.yaml请制作。spec.mutateExistingOnPolicyUpdate: true放在,规则的mutate.targetskind: Podnamespace: pol-lab请写下并修复不是触发的资源。还有/root/policy/mutate/out/existing-note.txt因为这个动作在后台运行,所以请写下需要额外的RBAC权限

如果不是触发器,而是要修改其他资源,需要单独写下对象。修改政策时,也有决定是否修改现有资源的开关。

制作变形前后对照报告

/root/policy/mutate/out/mutate-report.json请制作。最高级mutations在排列中包含3件以上,每个项目是field·before·after·rule需要拿你的身高。beforeafter请不要放入相同的项目。fieldteam包含这个的项目after价格是5次制作的mutated.yamlmetadata.labels.team必须与价格完全相同。

每个字段都包含前后值和做了哪种规则。值没有变动的项目不是变形,所以不能放进去。