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
相关产品推荐
相关产品推荐

