在CDK项目中安装AWS Load Balancer Controller失败排查:基于EKS部署Django应用的CDK构造开发问题
解决AWS CDK中部署AWS Load Balancer Controller的问题
我刚帮你排查了代码里的几个关键问题,下面一步步帮你解决:
1. 修正Helm Chart名称错误
你遇到的chart "eks/aws-load-balancer-controller" version "2.2.0" not found错误,核心原因是指定的chart名称不对。AWS EKS Charts仓库里的AWS Load Balancer Controller chart直接叫做aws-load-balancer-controller,不需要加eks/前缀。
把代码里的chart: 'eks/aws-load-balancer-controller'改成:
chart: 'aws-load-balancer-controller',
2. 提前安装TargetGroupBinding CRDs
官方文档明确要求,安装Helm Chart前必须先安装对应的CRDs。在CDK里可以通过以下两种方式实现:
方法1:用kubectl命令直接安装
在创建Helm Chart的代码之前,添加这段代码来执行官方要求的CRD安装命令:
// 安装AWS Load Balancer Controller所需的CRDs this.cluster.addKubectlApplyCommand({ command: 'apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"', });
方法2:直接加载CRD YAML(更稳定)
如果担心远程拉取的网络问题,你可以手动从官方源下载CRD的YAML内容,用cluster.addManifest直接添加到集群构造中,比如:
// 添加TargetGroupBinding CRD(示例,需替换为完整的官方CRD定义) this.cluster.addManifest('TargetGroupBindingCRD', { apiVersion: 'apiextensions.k8s.io/v1', kind: 'CustomResourceDefinition', metadata: { name: 'targetgroupbindings.elbv2.k8s.aws', }, spec: { // 此处粘贴从官方链接获取的完整CRD spec内容 }, });
3. 验证Helm Chart的其他配置
你现有代码里的values配置是正确的,不过可以额外确认:
clusterName确实指向了你的EKS集群名称serviceAccount.create: false和name: 'aws-load-balancer-controller'和你之前创建的ServiceAccount完全匹配
修正后的核心代码片段
// ... 其余代码保持不变 // 先安装CRDs this.cluster.addKubectlApplyCommand({ command: 'apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"', }); // 安装AWS Load Balancer Controller Helm Chart this.cluster.addHelmChart('aws-load-balancer-controller-helm-chart', { repository: 'https://aws.github.io/eks-charts', chart: 'aws-load-balancer-controller', // 修正后的chart名称 release: 'aws-load-balancer-controller', version: '2.2.0', namespace: 'kube-system', values: { clusterName: this.cluster.clusterName, serviceAccount: { create: false, name: 'aws-load-balancer-controller', }, }, });
额外注意事项
- 确保你的CDK环境使用的kubectl版本和EKS集群版本兼容(v1.19集群对应的kubectl版本建议在v1.19-v1.21之间)
- 检查IAM Policy是否正确绑定到ServiceAccount:你通过
sync-request拉取v2.2.0策略并添加的方式是可行的,不需要调整
内容的提问来源于stack exchange,提问作者briancaffey
相关产品推荐
相关产品推荐

