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

如何通过HCP完成AKS集群认证以部署Helm及K8s资源?

问题描述

我尝试在AKS集群上部署Helm Chart及K8s资源,采用了Terraform示例中的如下provider配置:

data "azurerm_kubernetes_cluster" "info" {
  depends_on          = [module.aks]
  name                = "${var.app}-${var.environment_prefix}-aks"
  resource_group_name = module.resource_group.name
}

provider "helm" {
  kubernetes {
    host                   = data.azurerm_kubernetes_cluster.info.kube_config.0.host
    client_certificate     = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.client_certificate)
    client_key             = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.client_key)
    cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.cluster_ca_certificate)
  }
}

provider "kubernetes" {
  host                   = data.azurerm_kubernetes_cluster.info.kube_config.0.host
  client_certificate     = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.client_certificate)
  client_key             = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.client_key)
  cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.cluster_ca_certificate)
}

同时使用如下Helm Chart示例配置:

resource "helm_release" "soc_loki" {
  name       = "loki"
  repository = "https://grafana.github.io/helm-charts"
  chart      = "loki"
  version    = "6.22.0"
  namespace  = "soc-loki"

  values = [
    "${file("./helm_charts_values/loki/values.yaml")}",
    "${file("./helm_charts_values/loki/env/${var.environment_prefix}.yaml")}"
  ]
}

但在HCP上执行Terraform apply时,持续出现错误:Error: Kubernetes cluster unreachable: the server has asked for the client to provide credentials。我的AKS采用Entra ID authentication with Azure RBAC认证方式,请问该问题是否与AKS认证相关?如何解决?

解决方案

这个问题确实和AKS的Entra ID + Azure RBAC认证方式直接相关。你当前使用的Terraform provider配置基于AKS服务账号证书认证,但启用Entra ID认证的AKS集群已禁用这种证书访问方式,必须改用Azure AD令牌完成身份验证。

具体修复步骤:

  1. 更新Kubernetes和Helm Provider配置
    移除原有证书相关配置,改用Azure AD令牌获取方式,推荐配置如下:
data "azurerm_kubernetes_cluster" "info" {
  depends_on          = [module.aks]
  name                = "${var.app}-${var.environment_prefix}-aks"
  resource_group_name = module.resource_group.name
}

# 获取当前Azure AD客户端配置
data "azuread_client_config" "current" {}

# 获取AKS集群的用户凭证令牌
data "azurerm_kubernetes_cluster_user_credentials" "aks" {
  name                = data.azurerm_kubernetes_cluster.info.name
  resource_group_name = data.azurerm_kubernetes_cluster.info.resource_group_name
  client_id           = data.azuread_client_config.current.client_id
}

provider "kubernetes" {
  host                   = data.azurerm_kubernetes_cluster.info.kube_config.0.host
  cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.cluster_ca_certificate)
  token                  = data.azurerm_kubernetes_cluster_user_credentials.aks.kube_config.0.token
}

provider "helm" {
  kubernetes {
    host                   = data.azurerm_kubernetes_cluster.info.kube_config.0.host
    cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.info.kube_config.0.cluster_ca_certificate)
    token                  = data.azurerm_kubernetes_cluster_user_credentials.aks.kube_config.0.token
  }
}
  1. 配置HCP执行环境的身份权限
  • 运行Terraform的HCP服务主体(或身份)必须拥有AKS集群的Azure RBAC权限,比如Azure Kubernetes Service Cluster User Role,或自定义权限以允许访问集群资源。
  • 确认HCP环境已正确配置Azure身份验证,可通过服务主体密钥、托管身份等方式获取有效的Azure AD令牌。
  1. 验证权限有效性
    在本地使用拥有对应权限的账号执行az aks get-credentials --resource-group <资源组名> --name <AKS集群名> --admin,再运行kubectl get nodes验证权限是否正常,确保HCP使用的身份拥有相同权限。

核心原因说明:

启用Entra ID + Azure RBAC的AKS集群会禁用默认服务账号证书认证,所有集群访问请求必须携带Azure AD签发的有效令牌,且令牌对应的身份必须拥有集群RBAC权限。你之前的配置使用证书,不符合该认证模式要求,因此被集群拒绝访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:28:20