You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找适配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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:16:17