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

集群外.NET程序如何无需AWS CLI生成EKS令牌访问K8s API

在.NET中生成EKS API访问令牌(无需AWS CLI)

核心原理

aws eks get-token本质是通过STS生成GetCallerIdentity操作的预签名URL,再将其封装为Kubernetes认可的JWT格式令牌。我们可以直接在.NET中复现这一逻辑,无需调用AWS CLI。

实现步骤

1. 生成STS预签名URL

使用AWS SDK for .NET的AmazonSTSClient生成GetCallerIdentity的预签名URL,这是令牌的核心验证内容:

using Amazon;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

// 替换为你的EKS集群所在区域
var stsClient = new AmazonSTSClient(RegionEndpoint.GetBySystemName("us-west-2"));
var request = new GetCallerIdentityRequest();
// 默认有效期15分钟,和CLI行为一致,如需调整可添加Expires参数
var presignedUrl = stsClient.GetPreSignedURL(request);

2. 构造符合K8s规范的EKS令牌

将预签名URL、集群名称等信息封装为指定格式的JSON,Base64编码后拼接成最终令牌:

using System.Text;
using System.Text.Json;

var clusterName = "your-eks-cluster-name"; // 替换为你的集群名称
var expiration = DateTime.UtcNow.AddMinutes(15).ToString("yyyy-MM-ddTHH:mm:ssZ");

var tokenContent = JsonSerializer.Serialize(new
{
    presignedUrl = presignedUrl,
    clusterName = clusterName,
    expiration = expiration
});

var eksToken = $"k8s-aws-v1.{Convert.ToBase64String(Encoding.UTF8.GetBytes(tokenContent))}";

3. 配置Kubernetes .NET客户端

结合EKS集群的API端点、CA证书(通过AWS EKS SDK获取)和生成的令牌,初始化K8s客户端:

using Amazon.EKS;
using Amazon.EKS.Model;
using k8s;
using System.Security.Cryptography.X509Certificates;

// 获取集群基础信息
var eksClient = new AmazonEKSClient(RegionEndpoint.GetBySystemName("us-west-2"));
var clusterResp = await eksClient.DescribeClusterAsync(new DescribeClusterRequest { Name = clusterName });
var clusterEndpoint = clusterResp.Cluster.Endpoint;
var caCertBytes = Convert.FromBase64String(clusterResp.Cluster.CertificateAuthority.Data);
var sslCaCert = new X509Certificate2(caCertBytes);

// 初始化K8s客户端配置
var k8sConfig = new KubernetesClientConfiguration
{
    Host = clusterEndpoint,
    AccessToken = eksToken,
    SslCaCert = sslCaCert
};

var kubernetes = new Kubernetes(k8sConfig);

// 测试调用示例:获取集群节点列表
var nodes = await kubernetes.ListNodeAsync();

关键注意事项

  • 权限配置:运行程序的身份需具备sts:GetCallerIdentity权限,同时EKS集群的aws-auth ConfigMap需将该AWS身份映射到对应的Kubernetes角色(如system:masters)。
  • 凭证来源:程序会自动通过AWS默认凭证链获取凭证(环境变量、本地凭证文件、IAM角色等),无需硬编码。
  • 令牌刷新:令牌有效期为15分钟,过期后需重新生成,建议在API调用前检查有效期或定时刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:35:20