如何查找适配K8s集群的Ambassador CRD正确版本
问题:K8s v1.31.1安装Ambassador Edge Stack时CRD版本不兼容错误
authservices.getambassador.io failed to create kubernetes rest client for update of resource: resource [apiextensions.k8s.io/v1beta1/CustomResourceDefinition] isn't valid for cluster, check the APIVersion and Kind fields are valid
问题原因
你的K8s集群版本是v1.31.1,从K8s v1.22开始,apiextensions.k8s.io/v1beta1版本的CRD已被完全移除,必须使用apiextensions.k8s.io/v1版本。但你手动引入的CRD文件(尤其是ambassador/1.14.4的旧版本CRD)仍在使用废弃的v1beta1,导致集群无法识别。
解决步骤
1. 删除手动导入的旧CRD资源
移除Terraform中手动获取并应用旧版本CRD的代码块:
# 以下代码全部删除 data "http" "aes_crds_yaml" { url = "https://app.getambassador.io/yaml/edge-stack/3.12.2/aes-crds.yaml" } resource "kubectl_manifest" "aes_crds" { yaml_body = data.http.aes_crds_yaml.response_body } data "http" "ambassador_crds_yaml" { url = "https://app.getambassador.io/yaml/ambassador/1.14.4/ambassador-crds.yaml" } resource "kubectl_manifest" "ambassador_crds" { yaml_body = data.http.ambassador_crds_yaml.response_body }
同时修改helm_release的依赖配置,去掉旧CRD的依赖:
resource "helm_release" "ambassador" { count = 1 name = "edge-stack" namespace = "ambassador" repository = "https://s3.amazonaws.com/datawire-static-files/charts" chart = "edge-stack" version = "8.12.2" timeout = 300 create_namespace = true cleanup_on_fail = true dependency_update = true verify = true # 移除旧CRD的依赖项 # depends_on = [kubectl_manifest.aes_crds, kubectl_manifest.ambassador_crds] }
2. 让Helm Chart自动安装兼容的CRD
你使用的edge-stack 8.12.2版本Helm Chart已内置适配K8s v1.22+的v1版本CRD,只需开启自动安装配置即可。在helm_release中添加以下set参数:
resource "helm_release" "ambassador" { count = 1 name = "edge-stack" namespace = "ambassador" repository = "https://s3.amazonaws.com/datawire-static-files/charts" chart = "edge-stack" version = "8.12.2" timeout = 300 create_namespace = true cleanup_on_fail = true dependency_update = true verify = true set { name = "crds.install" value = "true" } }
3. 验证CRD版本
执行terraform apply后,用kubectl检查CRD的API版本:
kubectl get crd authservices.getambassador.io -o jsonpath='{.apiVersion}'
输出应为apiextensions.k8s.io/v1,表示版本兼容。
额外提示
- 你引入的
ambassador/1.14.4是非常老旧的版本,完全不适配v1.31.1集群,直接废弃即可。 - 若需要手动获取CRD文件,可先拉取对应版本的Helm Chart到本地:
helm pull datawire/edge-stack --version 8.12.2,解压后查看crds目录下的文件,这些都是适配当前集群的v1版本CRD。
内容的提问来源于stack exchange,提问作者Alex A.
相关产品推荐
相关产品推荐

