gpt4 book ai didi

azure - 如何以编程方式向 Azure Kubernetes (AKS) 进行身份验证

转载 作者:行者123 更新时间:2023-12-03 00:21:38 25 4
gpt4 key购买 nike

我正在设置 AKS 群集,并且最近启用了 Azure Active Directory 集成。我有一个 C# 应用程序在创建 Kubernetes 作业的 Kubernetes 集群外部运行。因此,我使用的是 C# KubernetesClient 包,它以前运行良好(现在仍然如此)。但是,它使用的是所谓的“本地帐户”(即本地管理员用户),该帐户未与 Active Directory 集成。从长远来看,我的目标是完全停用本地帐户,这意味着我需要一种不同的身份验证方式。由于 Kubernetes 集群现在已与 AAD 完全集成,我更愿意使用服务主体进行身份验证。

Microsoft 没有提供任何有关如何实现此目标的文档,并且支持也没有特别帮助。

最佳答案

您需要手动获取 Kubernetes 环境的访问 token 。这可以通过以下代码来完成:

var credFactory = new AzureCredentialsFactory();
var credentials = credFactory.FromServicePrincipal(
"CLIENT_ID",
"CLIENT_SECRET",
"TENANT_ID",
AzureEnvironment.AzureGlobalCloud
);

var azure = Microsoft.Azure.Management.Fluent.Azure
.Authenticate(credentials)
.WithSubscription("SUBSCRIPTION_ID");

var kubeConfigBytes = azure.KubernetesClusters.GetUserKubeConfigContents(
"K8S_RESOURCE_GROUP",
"K8S_CLUSTER_NAME"
);


var kubeConfigRaw = KubernetesClientConfiguration.LoadKubeConfig(new MemoryStream(kubeConfigBytes));
var authProvider = kubeConfigRaw.Users.Single().UserCredentials.AuthProvider;
if (!authProvider.Name.Equals("azure", StringComparison.OrdinalIgnoreCase))
throw new Exception("Invalid k8s auth provider!");

// Token Helper is a small helper utility that I use instead of MSAL
// This method is doing a POST call to https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
var token = TokenHelper.GetTokenByClientCredentials(
"CLIENT_ID",
"CLIENT_SECRET",
"TENANT_ID",
"6dae42f8-4368-4678-94ff-3960e28e3630/.default" // This scope is always the same. It's the "Azure Kubernetes Service AAD Server" app from Microsoft. (az ad sp show --id 6dae42f8-4368-4678-94ff-3960e28e3630)
).GetAwaiter().GetResult();

authProvider.Config["access-token"] = token.AccessToken;
authProvider.Config["expires-on"] = DateTimeOffset.UtcNow.AddSeconds(token.ExpiresIn).ToUnixTimeSeconds().ToString();

var kubeConfig = KubernetesClientConfiguration.BuildConfigFromConfigObject(kubeConfigRaw);
var kubernetes = new Kubernetes(kubeConfig);

请记住, token 每小时都会过期,因此您需要定期创建新的 Kubernetes 实例。另请注意,这仅处理身份验证,而不是授权。这意味着,您将能够登录,但您的服务主体可能不允许读取/编辑任何 kubernetes 资源。为此,您需要将 RoleCluterRole 分配给您的服务主体,如 HERE 中所述。 .

关于azure - 如何以编程方式向 Azure Kubernetes (AKS) 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67737374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com