写一个会补上默认值的 mutate 策略
目标
以三种方式使用填补缺失值的变体政策,并亲自确认不触动已经指定的值。最后制作对比报告,说明发生了什么变化以及如何变化。
为什么重要
只做阻止的政策将问题推给用户。如果全部拒绝无限制的板块,规则就会得到遵守,但每个团队都会产生“应该投入多少钱”的问题。变体政策会填补组织的基本值,同时遵守规则,没有人阻止。但是这里有一个不能越界的底线——绝对不会覆盖用户指定的值。团队cpu: 500m写着这样,如果政策悄悄地改变了,那支球队就无法相信自己的宣言,从那时起,政策就不再是信任的对象,而是恐惧的对象。所以追加主播+()不是语法装饰,而是合同。仅供参考,在这个环境中不会出现Admission Webhook,所以变形是kyverno用CLI进行本地评估,确认结果配置文件。
阶段
/root/policy/mutate/add-team-label.yaml在kind: ClusterPolicy请制作。spec.background明确,spec.rules[0].mutate.patchStrategicMerge.metadata.labels在下面+(team): unassigned请输入。规则名称是add-default-team,匹配是pol-lab名称空间的Pod是。/root/policy/mutate/add-defaults.yaml制定第二个政策,+(...)作为额外的主播,容器的resources.limits在cpu哇memory请使用填充基本值的规则。还有/root/policy/mutate/out/anchors.md(150字节以上)的条件锚(),追加主播+(),还有=()或者X()请整理一下的差异。- 相同的
add-defaults.yaml在mutate.patchesJson6902请再添加一个使用它的规则。op: add哇path: /spec/containers/0/imagePullPolicy,value: IfNotPresent是形态。还有/root/policy/mutate/out/json6902-note.txt请写下这种方式在处理排序·索引时为什么需要。 add-defaults.yaml在mutate.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.team,spec.containers[0].resources.limits.memory,spec.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.targets在kind: Pod,namespace: pol-lab请写下并修复不是触发的资源。还有/root/policy/mutate/out/existing-note.txt因为这个动作在后台运行,所以请写下需要额外的RBAC权限。/root/policy/mutate/out/mutate-report.json请制作。最高级mutations在排列中包含3件以上,每个项目是field·before·after·rule需要拿你的身高。before哇after请不要放入相同的项目。field在team包含这个的项目after价格是5次制作的mutated.yaml的metadata.labels.team必须与价格完全相同。
参考
- 可以一次性上传多个政策文件:
kyverno apply <정책1> <정책2> --resource <매니페스트>. - 变形结果,manifest可以作为输出选项接收,或者在输出中只截断Pod文档部分保存即可。评分只看该文件是否是正确的Pod YAML。
+()是“没有的话放进去”,()是“只有条件合适时才适用”。两者做的是不同的事情。- 常见的错误1:
team在没有锚的情况下直接写标签。那么在6号platform这个被盖住了,失败了。 - 常见的错误2:在8号报告中填写没有变更价格的字段。不能把不是变形的东西写在报告中。
制定附加标签的变体政策
/root/policy/mutate/add-team-label.yaml在kind: 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.limits在cpu哇memory请使用填充基本值的规则。还有/root/policy/mutate/out/anchors.md(150字节以上)的条件锚(),追加主播+(),还有=()或者X()请整理一下的差异。
有的是单独的,意思是没有的话放进去就放着。必须用文件整理一下三个类型的锚的区别才能通过。
用JSON补丁修复数组项目
相同的add-defaults.yaml在mutate.patchesJson6902请再添加一个使用它的规则。op: add哇path: /spec/containers/0/imagePullPolicy,value: IfNotPresent是形态。还有/root/policy/mutate/out/json6902-note.txt请写下这种方式在处理排序·索引时为什么需要。
用Strategic Merge很难准确定位“第几个容器”。有用op·path·value三个方式指定位置的方法。
写绕过容器列表的规则
add-defaults.yaml在mutate.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.team,spec.containers[0].resources.limits.memory,spec.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.targets在kind: Pod,namespace: pol-lab请写下并修复不是触发的资源。还有/root/policy/mutate/out/existing-note.txt因为这个动作在后台运行,所以请写下需要额外的RBAC权限。
如果不是触发器,而是要修改其他资源,需要单独写下对象。修改政策时,也有决定是否修改现有资源的开关。
制作变形前后对照报告
/root/policy/mutate/out/mutate-report.json请制作。最高级mutations在排列中包含3件以上,每个项目是field·before·after·rule需要拿你的身高。before哇after请不要放入相同的项目。field在team包含这个的项目after价格是5次制作的mutated.yaml的metadata.labels.team必须与价格完全相同。
每个字段都包含前后值和做了哪种规则。值没有变动的项目不是变形,所以不能放进去。