我在Azure中使用AKS预览有一个k8s群集。
我也在VM上启用了MSI。如果我ssh到虚拟机,我可以看到MSI服务正在运行:
curl http://localhost:50342/oauth2/token --data "resource=https://vault.azure.net" -H Metadata:true
根据文档,我得到的回复符合您的期望。
但是,我无法弄清楚如何让我的aspnet核心应用程序根据需要使用AzureServiceTokenProvider
。在本地它可以工作,一旦部署在kubernetes的pod中,它就找不到所需的授权。
我得到的错误是:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:Parameters:Connectionstring:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf。异常消息:尝试了以下3种方法来获取访问令牌,但没有一种方法有效。 参数:Connectionstring:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识(MSI)端点。请检查您是否在具有MSI设置的Azure资源上运行。 参数:Connectionstring:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf。异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。未设置环境变量LOCALAPPDATA。 参数:Connectionstring:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf。异常消息:尝试使用Azure CLI获取令牌。无法获取访问令牌。 / bin / bash:az:没有这样的文件或目录 ```
是否有人能够使用类似的代码在Pod中读取KeyVault?
AzureServiceTokenProvider azureServiceTokenProvider = new
AzureServiceTokenProvider();
KVC = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var baseUrl = config.GetValue<string>("Azure:VaultURL");
var secretLocation = config.GetValue<string>("Azure:SecretLocation");
location = $"{baseUrl}{secretLocation}";
KVC.GetSecretAsync(location).Result.Value;
答案 0 :(得分:0)
您对AAD Pod Identity有所了解吗? https://github.com/Azure/aad-pod-identity。我们一直在企业环境和用户分配的身份(而不是MSI)中使用此功能。
这种方法不能解决您的MSI问题,但确实提供了替代方法,可以解决您的基本问题。