自定义资源定义 (CRD) 是扩展 Kubernetes 功能的强大工具。不过,如果 CRD 在其转换 webhook 配置 spec.conversion.webhook.clientConfig.caBundle
中包含无效或格式错误的证书授权机构 (CA) 软件包,则可能会中断集群操作。这可能会在资源创建、更新或删除期间表现为错误。Google Kubernetes Engine (GKE) 会监控集群,并使用 Recommender 服务来提供有关如何优化平台使用的指导。
为了帮助您确保集群保持稳定和高性能,请参阅 GKE 针对运行但具有无效 CA 软件包的 CRD 的建议。您可以按照本指南检查可能配置错误的 CRD,并在必要时进行更新。如需详细了解如何管理分析洞见和 Recommender 建议,请参阅利用分析洞见和建议优化 GKE 使用。
确定受影响的集群
如需获得可识别受 CA 软件包无效的 CRD 影响的集群的分析洞见,请按照说明查看分析洞见和建议(针对子类型 K8S_CRD_WITH_INVALID_CA_BUNDLE
)。您可以通过以下方式获取分析洞见:
- 使用 Trusted Cloud 控制台。
- 使用 Google Cloud CLI 或 Recommender API 并使用子类型
K8S_CRD_WITH_INVALID_CA_BUNDLE
进行过滤。
通过分析洞见确定 CRD 后,请按照说明排查配置错误的 CA 软件包。
GKE 检测到错误配置的 CRD 时
如果 GKE 集群有一个或多个 CRD 在 spec.conversion.webhook.clientConfig
中报告了 webhook 客户端配置的 caBundle
错误配置,GKE 会生成 K8S_CRD_WITH_INVALID_CA_BUNDLE
子类型的分析洞见和建议。
按照说明检查 CA 软件包配置错误的 CRD。
排查检测到的 CRD 的问题
以下部分指导您对 GKE 检测到可能配置错误的 CRD 进行问题排查。
实施相关说明并且正确配置 CRD后,建议将在 24 小时内解决,并且不再显示在控制台中。如果自您实施建议的指导后不到 24 小时,您可以将建议标记为已解决。如果您不想实施此建议,则可以忽略。
识别集群中受影响的 CRD
查看子类型为
K8S_CRD_WITH_INVALID_CA_BUNDLE
的分析洞见和建议,一次选择一个分析洞见进行问题排查。GKE 会为每个存在损坏的 CRD 的集群生成一条分析洞见。运行以下命令以描述服务,从而查找可能存在问题的 CA 软件包的 CRD:
kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundle
输出包括以下内容:
- 名称:CRD 的名称。
- CaBundle:与 CRD 的转换 webhook 关联的 CA 软件包(如果有)。检查输出。如果您知道某个 CRD 使用了转化 webhook,但该 CRD 的 caBundle 列为空,则表示 caBundle 可能存在问题。
重新创建 CRD
如需解决此错误,请使用有效的 CA 软件包重新创建受影响的 CRD:
备份与此存在问题的 CRD 关联的现有自定义资源(如果有)。运行以下命令以导出现有资源:
kubectl get <crd-name> -o yaml > backup.yaml
删除现有 CRD:
kubectl delete crd <crd-name>
确保 CRD 的
caBundle
字段包含格式正确且采用 base64 编码的 PEM 证书。您可以通过直接修改 CRD 或与 CRD 作者联系来执行此操作。修改 CRD YAML 定义,使用有效的 CA 软件包数据更新
spec.conversion.webhook.clientConfig.caBundle
字段。结果应该类似如下所示:spec: conversion: webhook: clientConfig: caBundle: <base64-encoded-ca-bundle>
应用更正后的 CRD:
kubectl apply -f <corrected-crd-file.yaml>
恢复自定义资源:
kubectl apply -f backup.yaml