从 AKS 中心群集检索已部署 ASP.Net 核心 Web 应用的环境机密



我已将一个 Web 应用部署到 AKS,它通常运行良好。我现在正在尝试通过添加对 Azure sql 的访问权限来扩展其功能。

我们正在使用 VSTS/Azure DevOps 进行部署。

我已使用以下命令将密钥部署到群集:

kubectl secret generic sampleapp-appsettings --from-literal=DBConnectionString="$(var_DBConnectionString)"

我已经从 kubernetes 仪表板检查了集群,可以看到它已按预期部署。 机密是数据库的连接字符串

但是,我正在努力从部署的 Pod 中检索机密。 我为 ASPNETCORE_ENVIRONMENT 创建了一个环境变量,其中包含 Kubernetes 的值。

这是我部署 yaml 的一部分:

spec:
containers:
- name: sampleapp-services
image: sampleapp.azurecr.io/sampleapp-services:latest
imagePullPolicy: Always          
env:
- name: "ASPNETCORE_ENVIRONMENT"
value: "Kubernetes"
- name: services-appsettings
valueFrom:
secretKeyRef:
name: services-appsettings
key: DBConnectionString          
ports:
- containerPort: 80 

我已向我的应用添加了一个 api 终结点以进行调试,并且可以看到ASPNETCORE_ENVIRONMENT值正在正确拉取。

但是,DBConnectionString 值没有正确从 kubernetes 密钥中提取。 相反,它是从appsettings.json文件中检索的。 我的应用程序中有一些代码,它只是输出值:

[HttpGet("settings")]
public ActionResult<string> GetAppSettings()
{
var message = $"Host: {Environment.MachineName}n" +
$"EnvironmentName: {_env.EnvironmentName}n" +
$"Secret value: {_dataSettings.ConnectionString}";
return message;
}

在我的数据设置类中,我有这样的代码:

var value = Environment.GetEnvironmentVariable("DBConnectionString");

但是,这并没有从我期望的 kubernetes 集群中提取秘密值。

我遵循了一些例子,比如这样 - 但它们没有帮助。

博客

有没有人得到一些简单的分步说明/示例可能会有所帮助?

谢谢

您指定用于创建密钥的命令缺少 create 并按名称"sampleapp-appsettings"创建密钥,但是在 deployment.yaml 中,您指定了"services-appsettings"。我假设您列出的代码片段仅供参考,在实际代码中这些值匹配。

其次,环境变量- name: services-appsettings应与您在代码中指定的名称匹配。根据您的代码片段,Environment.GetEnvironmentVariable("DBConnectionString")具有"DBConnectionString",但是您的yaml具有"服务应用程序设置">

最后,我希望在 Web API 中,您正在调用 .添加环境变量(( 在构建配置时。

最新更新