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

Terraform Helm Provider部署Redis遇Azure Firewall拦截问题求助

问题描述

使用Terraform的Helm Provider部署Bitnami Redis Helm Chart时,Helm Release已创建,但redis-app命名空间下的Pod启动失败,Pod日志报错:

► checking prerequisites
✗ Kubernetes API call failed: Get "https://10.0.0.3:443/version": EOF

经排查,问题源于Azure Firewall拦截了Pod对K8s API服务器内部IP(10.0.0.3)的访问流量,若将API地址替换为AKS集群的FQDN(如clustername-c2122e83.hcp.eastus.azmk8s.io),流量即可正常放行。

对应的Terraform配置如下:

provider "helm" {
  kubernetes {
    host = azurerm_kubernetes_cluster.aks.kube_config.0.host
    cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate)

    exec {
      api_version = "client.authentication.k8s.io/v1beta1"
      args = [
        "get-token",
        "--environment", "AzurePublicCloud",
        "--server-id", "6dae42f8-4368-4678-94ff-3960e28e3630", # AKS托管AAD的固定服务器应用ID
        "--client-id", "${yamldecode(azurerm_kubernetes_cluster.aks.kube_config_raw).users[0].user.auth-provider.config.client-id}",
        "--tenant-id", data.azurerm_client_config.current.tenant_id,
        "--login", "devicecode"
      ]
      command = "kubelogin"
    }
  }
}

resource "helm_release" "redis" {
  name             = "redis"
  repository       = "https://charts.bitnami.com/bitnami"
  chart            = "redis"
  version          = "16.11.2"
  namespace        = "redis-app"
  create_namespace = true

  set {
    name  = "cluster.enabled"
    value = "true"
  }
}
解决方案

1. 修改Helm Chart配置,指定K8s API服务器FQDN

Bitnami Redis Helm Chart支持通过kubeApiServer参数指定K8s API服务器的访问地址,直接将其设置为AKS集群的FQDN即可让Pod使用该地址访问API服务器,绕过内部IP被拦截的问题。

在Terraform的helm_release.redis资源中添加新的set块:

set {
  name  = "kubeApiServer"
  value = azurerm_kubernetes_cluster.aks.fqdn
}

修改后的完整helm_release资源如下:

resource "helm_release" "redis" {
  name             = "redis"
  repository       = "https://charts.bitnami.com/bitnami"
  chart            = "redis"
  version          = "16.11.2"
  namespace        = "redis-app"
  create_namespace = true

  set {
    name  = "cluster.enabled"
    value = "true"
  }

  set {
    name  = "kubeApiServer"
    value = azurerm_kubernetes_cluster.aks.fqdn
  }
}

2. 配置Azure Firewall规则(可选)

如果Azure Firewall当前未允许AKS节点子网到API服务器FQDN的443端口流量,需要添加对应的应用规则:

  • 源地址:AKS节点的子网范围
  • 目标地址:AKS集群的FQDN
  • 目标端口:443
  • 协议:HTTPS
  • 动作:允许

3. 重新部署Redis

执行以下Terraform命令重新部署:

terraform plan
terraform apply

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:55:24