TT Lab
开始
学习 学习路径 课程

CNPA — 云原生平台工程助理

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

在 TT Lab 中继续学习

本实验运行在真实 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=yes、deploy_freq= 三行及说明。

参考

把自定义类型注册到 API

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

需要 group、names、versions 三项,也请同时查看 served 与 storage。

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

把模式拒绝错误值的证据保存到 /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=yes、deploy_freq= 三行及说明。

请写入 crd_kind=、rejected=yes、deploy_freq= 三行及说明。