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

如何在Azure部署的App Service中获取kubeconfig并访问AKS的Kubernetes API

AKS 无个人凭据连接方案及 SSL 报错原因解析

个人 kubeconfig 部署到 App Service 报 SSL 错误的原因

  • 你本地获取的 kubeconfig 中内置的个人 Azure AD 访问令牌有效期通常仅为几小时,令牌过期后与 AKS API 建立 TLS 握手时会被身份校验拦截,错误表现常被归类为 SSL 相关异常
  • kubeconfig 中存储的 AKS CA 证书内容在复制、上传到 App Service 过程中可能出现字符转义、缺失,导致客户端无法正确解析 CA 证书,无法完成服务端证书校验触发 SSL 报错
  • 部分本地生成的 kubeconfig 为适配本地网络环境配置了特殊的 TLS 校验规则,放到 App Service 运行环境后规则不匹配也会触发校验失败

无个人凭据的编程实现方案

核心思路是使用 App Service 托管身份获取 AKS 访问权限,完全避免硬编码或上传包含个人凭据的 kubeconfig 文件,实现步骤如下:

  1. 为目标 App Service 启用系统分配的托管身份,启用后 Azure 会自动为该服务生成专属的服务主体,无需你维护任何凭据
  2. 为托管身份授予 AKS 访问权限,可通过 Azure CLI 执行命令完成授权:
    az role assignment create --assignee <托管身份的客户端ID> --role "Azure Kubernetes Service Cluster User" --scope <AKS资源的完整资源ID>
  3. 在 AKS 中配置对应 RBAC 权限,将托管身份的对象ID绑定到你需要的 ClusterRole/Role,满足业务对 K8S 资源的操作权限要求
  4. 将 AKS API 服务器地址、AKS CA 证书内容(可从本地 kubeconfig 的 certificate-authority-data 字段获取)配置到 App Service 的应用配置(环境变量)中,避免硬编码
  5. 代码改造,引入 Azure.Identity 和 KubernetesClient 两个 NuGet 包,直接通过托管身份获取访问令牌构造 K8S 客户端:
using Azure.Identity;
using k8s;
using System.Security.Cryptography.X509Certificates;

// 从App Service环境变量读取配置
var aksApiHost = Environment.GetEnvironmentVariable("AKS_API_HOST");
var aksCaCertBase64 = Environment.GetEnvironmentVariable("AKS_CA_CERT_BASE64");

// 获取托管身份的AKS访问令牌
var azureCredential = new DefaultAzureCredential();
var aksToken = await azureCredential.GetTokenAsync(new Azure.Core.TokenRequestContext(
    new[] { "6dae42f8-4368-4678-94ff-3960e28e3630/.default" }
));

// 手动构造K8S客户端配置
var k8sConfig = new KubernetesClientConfiguration
{
    Host = aksApiHost,
    AccessToken = aksToken.Token,
    SslCaCerts = new X509Certificate2Collection()
};
// 导入AKS CA证书完成TLS校验
k8sConfig.SslCaCerts.Add(new X509Certificate2(Convert.FromBase64String(aksCaCertBase64)));

// 初始化可正常使用的K8S客户端
var kubernetesClient = new Kubernetes(k8sConfig);

DefaultAzureCredential 兼容本地开发环境,本地调试时会自动读取你本地 Azure CLI 登录的凭据,不需要修改代码就能本地跑通,部署到 App Service 后会自动切换为系统托管身份的凭据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:45:03