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

如何用Terraform Helm provider覆盖默认Chart值配置内部负载均衡器

实现方案

Istio官方Gateway Helm Chart原生支持通过Values配置覆盖Service的注解、属性等参数,不需要手动修改渲染后的Kubernetes清单,直接在现有helm_release资源块中追加对应配置,即可将默认公网负载均衡器替换为内网负载均衡器。

切换内网LB的核心逻辑,是给Chart自动创建的LoadBalancer类型Service添加对应云服务商的内网LB注解,不同云厂商的注解键存在差异,常见环境的对应注解如下:

  • 阿里云ACK:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
  • 腾讯云TKE:service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: "<内网子网ID>"、service.kubernetes.io/loadbalance-type: "Internal"
  • AWS EKS:service.beta.kubernetes.io/aws-load-balancer-internal: "true"
  • GCP GKE:cloud.google.com/load-balancer-type: "Internal"
  • Azure AKS:service.beta.kubernetes.io/azure-load-balancer-internal: "true"

配置方式

你可以直接在原有helm_release资源中添加set块,将对应注解传入service.annotations配置路径,修改后的完整资源代码参考如下(示例为AWS EKS环境,替换为你所用云厂商的注解即可):

resource "helm_release" "istio-ingress" {
  repository        = local.istio_charts_url
  chart             = "gateway"
  name              = "istio-ingress-gateway"
  namespace         = kubernetes_namespace.istio_system.metadata.0.name
  version           = ">= 1.12.1"
  timeout           = 500
  cleanup_on_fail   = true
  force_update      = false
  depends_on        = [helm_release.istiod]

  # 新增内网LB注解配置
  set {
    name  = "service.annotations.service\\.beta\\.kubernetes\\.io/aws-load-balancer-internal"
    value = "true"
  }

  # 如需指定内网LB绑定的子网,可追加对应配置,例:
  # set {
  #   name  = "service.annotations.service\\.beta\\.kubernetes\\.io/aws-load-balancer-subnets"
  #   value = "subnet-xxxxxx,subnet-yyyyyy"
  # }
}

注意事项:因为注解键本身包含.符号,在set块中写注解键时,需要用双反斜杠对.做转义,否则会被Helm Provider识别为多层级配置路径,导致传值不生效。

如果不想处理转义逻辑,也可以把自定义配置写到独立的Values文件中,通过helm_release的values参数加载文件,这种写法不需要转义特殊字符,适合配置项较多的场景。

Values文件传入的参考写法:

  1. 新建istio-gateway-values.yaml配置文件:
service:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    # 其余自定义配置可按需追加
  1. 在Terraform资源中引用该文件:
resource "helm_release" "istio-ingress" {
  # 此处省略原有固定配置项
  values = [
    file("${path.module}/istio-gateway-values.yaml")
  ]
}

配置执行terraform apply后,Helm会自动更新Istio Ingress对应的Service资源,云厂商侧会自动完成公网LB到内网LB的替换,不需要手动重建相关工作负载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:51:22