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

如何在Kubernetes中从ConfigMap传递ARN到TargetGroupBinding?

三种实现TargetGroupBinding与AWS目标组绑定的方案

方案一:用Terraform直接生成并部署TargetGroupBinding(推荐,最简洁)

既然你已经用Terraform管理AWS资源,直接用Terraform创建Kubernetes的TargetGroupBinding资源是最直接的方式,无需中间的ConfigMap或Kustomize替换:

  1. 在你的Terraform配置中,添加kubernetes_manifest资源,直接引用目标组的ARN:
resource "kubernetes_manifest" "nginx_proxy_tgb" {
  manifest = {
    apiVersion = "elbv2.k8s.aws/v1beta1"
    kind       = "TargetGroupBinding"
    metadata = {
      name      = "nginx-proxy-tgb"
      namespace = "nginx-proxy"
    }
    spec = {
      serviceRef = {
        name = "nginx-proxy-service"
        port = 443
      }
      targetGroupARN = aws_lb_target_group.nginx-proxy.arn
    }
  }
}
  1. 执行terraform apply,Terraform会自动将TargetGroupBinding部署到你的EKS集群,同时自动填入正确的目标组ARN。

注意:确保你的Terraform已配置EKS集群的访问权限(比如通过aws eks update-kubeconfig生成kubeconfig,或Terraform的kubernetes provider配置正确)。

方案二:用Kustomize从ConfigMap读取ARN并替换

如果坚持用Kustomize管理K8s资源,可以用Kustomize的replacements特性(需Kustomize 4.1+版本)从ConfigMap提取ARN并替换到TargetGroupBinding:

  1. 准备kustomization.yaml文件:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - targetgroupbinding.yaml # 你的TargetGroupBinding模板文件

replacements:
- source:
    kind: ConfigMap
    name: proxy-cm
    namespace: nginx-proxy
    fieldPath: data.targetgroup_arn
  targets:
  - select:
      kind: TargetGroupBinding
      name: nginx-proxy-tgb
      namespace: nginx-proxy
    fieldPaths:
    - spec.targetGroupARN
  1. 你的targetgroupbinding.yaml保持模板即可(无需占位符):
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
  name: nginx-proxy-tgb
  namespace: nginx-proxy
spec:
  serviceRef:
    name: nginx-proxy-service
    port: 443
  targetGroupARN: "" # 留空,由Kustomize替换
  1. 执行kustomize build . | kubectl apply -f -,Kustomize会自动从ConfigMap读取ARN并替换到目标字段。

方案三:Shell脚本临时替换(适合快速测试)

如果只是临时需求,用简单的Shell命令就能完成替换:

  1. 先从ConfigMap提取ARN:
TARGETGROUP_ARN=$(kubectl get configmap proxy-cm -n nginx-proxy -o jsonpath='{.data.targetgroup_arn}')
  1. 替换TargetGroupBinding模板中的占位符并部署:
sed "s/\$(TARGETGROUP_ARN)/$TARGETGROUP_ARN/" targetgroupbinding-template.yaml | kubectl apply -f -

注意:你的模板文件targetgroupbinding-template.yaml中要保留$(TARGETGROUP_ARN)这个占位符。

额外注意事项

  • 确保你的Nginx Pod标签app: nginx-proxy和Service的spec.selector匹配,否则TargetGroupBinding无法找到正确的Pod IP。
  • 目标组的target_type设置为ip是正确的,因为TargetGroupBinding会直接把Pod的IP注册到目标组,无需NodePort或LoadBalancer类型的Service。

内容的提问来源于stack exchange,提问作者mathrixx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:45