我已将一个 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 中,您正在调用 .添加环境变量(( 在构建配置时。