LabHub
学习 学习路径 课程

CNPA — 云原生平台工程助理

亲眼看 API Server 真的拒绝掉什么

在 LabHub 中继续学习

本实验运行在真实 API 服务器上

CRD 的作用是“把 API 服务器已有的能力借给自定义类型”。 这些能力包括模式验证、默认值、RBAC、审计与 watch

但伪造的集群没有这些能力。无论放入什么内容都会接受,因此无法看到错误值被拒绝,也无法看到默认值得到填充。 只有真正被拒绝过,才能理解契约是什么。

首次启动大约需要两分钟。

目标

为开发者设计一个平台 API,并确认它能真正充当边界。

步骤

  1. 创建 CRD,并把 API 服务器接受它的证据保存到 /root/cnpa/crd.txt
  2. 把模式拒绝错误值的证据保存到 /root/cnpa/validate.txt
  3. 默认值得到填充的证据保存到 /root/cnpa/defaults.txt
  4. 添加输出列,让 kubectl get 的结果真正实用,并保存到 /root/cnpa/columns.txt
  5. 使用 RBAC 规定开发者能够执行的操作,并把证据保存到 /root/cnpa/rbac.txt
  6. 使用配额建立资源边界,并把证据保存到 /root/cnpa/quota.txt
  7. 根据部署台账计算 DORA 指标,并保存到 /root/cnpa/dora.txt
  8. /root/cnpa/report.md 中写入 crd_kind=rejected=yesdeploy_freq= 三行及说明。

参考

把自定义类型注册到 API

创建 CRD,并把 API 服务器接受它的证据保存到 /root/cnpa/crd.txt

需要 groupnamesversions 三项,也请同时查看 servedstorage

只有被拒绝过,才能理解契约

把模式拒绝错误值的证据保存到 /root/cnpa/validate.txt

尝试省略必填字段、使用错误类型,以及加入不存在的字段。

由 API 服务器填充遗漏值

默认值得到填充的证据保存到 /root/cnpa/defaults.txt

default: 放在模式中,保存时就会填充。请使用 kubectl get -o yaml 确认。

kubectl get 必须实用,用户才会采用

添加输出列,让 kubectl get 的结果真正实用,并保存到 /root/cnpa/columns.txt

additionalPrinterColumns 放在 versions 下。

规定开发者能够执行的操作

使用 RBAC 规定开发者能够执行的操作,并把证据保存到 /root/cnpa/rbac.txt

CRD 与其他资源一样受 RBAC 控制。请使用 kubectl auth can-i --as 确认。

资源边界

使用配额建立资源边界,并把证据保存到 /root/cnpa/quota.txt

ResourceQuota 限制整个命名空间的资源总量,LimitRange 则规定单个 Pod 的默认值与上限。

指标取决于如何计算

根据部署台账计算 DORA 指标,并保存到 /root/cnpa/dora.txt

请根据部署台账直接计算四项指标。改变答案的不是定义,而是实际统计了什么

学到了什么

/root/cnpa/report.md 中写入 crd_kind=rejected=yesdeploy_freq= 三行及说明。

请写入 crd_kind=rejected=yesdeploy_freq= 三行及说明。