5.6.7. 定义 webhook
Webhook 允许 Operator 作者在资源被保存到对象存储并由 Operator 控制器处理之前,拦截、修改、接受或拒绝资源。当 webhook 与 Operator 一同提供时,Operator Lifecycle Manager(OLM)可以管理这些 webhook 的生命周期。
Operator 的集群服务版本(CSV)资源可能包含 webhookdefinitions 部分,以定义以下 Webhook 类型:
- Admission webhook(validating and mutating)
- webhook 转换
流程
在 Operator 的
spec部分添加webhookdefinitions部分,并使用ValidatingAdmissionWebhook、MutatingAdmissionWebhook或ConversionWebhooktype包括任何 webhook 定义。以下示例包含所有三种类型的 Webhook:包含 Webhook 的 CSV
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: webhook-operator.v0.0.1 spec: customresourcedefinitions: owned: - kind: WebhookTest name: webhooktests.webhook.operators.coreos.io1 version: v1 install: spec: deployments: - name: webhook-operator-webhook ... ... ... strategy: deployment installModes: - supported: false type: OwnNamespace - supported: false type: SingleNamespace - supported: false type: MultiNamespace - supported: true type: AllNamespaces webhookdefinitions: - type: ValidatingAdmissionWebhook2 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook failurePolicy: Fail generateName: vwebhooktest.kb.io rules: - apiGroups: - webhook.operators.coreos.io apiVersions: - v1 operations: - CREATE - UPDATE resources: - webhooktests sideEffects: None webhookPath: /validate-webhook-operators-coreos-io-v1-webhooktest - type: MutatingAdmissionWebhook3 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook failurePolicy: Fail generateName: mwebhooktest.kb.io rules: - apiGroups: - webhook.operators.coreos.io apiVersions: - v1 operations: - CREATE - UPDATE resources: - webhooktests sideEffects: None webhookPath: /mutate-webhook-operators-coreos-io-v1-webhooktest - type: ConversionWebhook4 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook generateName: cwebhooktest.kb.io sideEffects: None webhookPath: /convert conversionCRDs: - webhooktests.webhook.operators.coreos.io5 ...
5.6.7.1. 针对 OLM 的 Webhook 注意事项 复制链接链接已复制到粘贴板!
使用 Operator Lifecycle Manager(OLM)部署带有 webhook 的 Operator 时,您必须定义以下内容:
-
type字段必须设置为ValidatingAdmissionWebhook、MutatingAdmissionWebhook或ConversionWebhook,否则 CSV 会进入失败的阶段。 -
CSV 必须包含一个部署,它的名称相当于
webhookdefinition的deploymentName字段中提供的值。
创建 webhook 时,OLM 确保 webhook 仅在与 Operator 部署的 Operator 组相匹配的命名空间上操作。
证书颁发机构限制
将 OLM 配置为为每个部署提供一个单独的证书颁发机构(CA)。将 CA 生成并挂载到部署的逻辑最初由 API 服务生命周期逻辑使用。因此:
-
TLS 证书文件挂载到部署的
/apiserver.local.config/certificates/apiserver.crt。 -
TLS 密钥文件挂载到部署的
/apiserver.local.config/certificates/apiserver.key。
Admission webhook 规则约束
为防止 Operator 将集群配置为无法恢复的状态,OLM 如果准入 webhook 中定义的规则拦截了以下请求中的规则,则 OLM 会将 CSV 放置到失败的阶段:
- 请求目标所有组
-
请求以
operators.coreos.com组为目标 -
请求目标为
ValidatingWebhookConfigurations或MutatingWebhookConfigurations资源
转换 Webhook 约束
如果转换 Webhook 定义未遵循以下限制,OLM 会将 CSV 放置到失败的阶段:
-
带有转换 Webhook 的 CSV 只能支持
AllNamespaces安装模式。 -
转换 Webhook 的目标 CRD 必须将其
spec.preserveUnknownFields字段设置为false或nil。 - CSV 中定义的转换 webhook 必须针对拥有的 CRD。
- 在整个集群中,给定 CRD 只能有一个转换 Webhook。