我已经将一个Web应用程序部署到AKS,并且通常可以正常运行。我现在尝试通过添加对Azure sql的访问来扩展其功能。
我们正在使用VSTS / Azure DevOps进行部署。
我已使用以下命令将机密部署到集群:
kubectl secret generic sampleapp-appsettings --from-literal=DBConnectionString="$(var_DBConnectionString)"
我已经从kubernetes仪表板检查了集群,可以看到它已经按预期部署。秘密是与数据库的连接字符串
但是,我正在努力从已部署的吊舱中检索秘密。我为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;
}
在我的DataSettings类中,我有这样的代码:
var value = Environment.GetEnvironmentVariable("DBConnectionString");
但是,这并没有从我期望的kubernetes集群中撤回秘密值。
我遵循了这样的一些示例-但它们无济于事。
有人能获得一些简单的分步说明/示例,可能会有所帮助吗?
谢谢
答案 0 :(得分:0)
您指定的用于创建机密的命令缺少create并通过名称“ sampleapp-appsettings”创建机密,但是在Deployment.yaml中,您指定了“ services-appsettings”。我假设您列出的摘录仅供参考,并且在实际代码中这些值匹配。
第二,环境变量- name: services-appsettings
应该与您在代码中指定的名称匹配。根据您的摘要,Environment.GetEnvironmentVariable("DBConnectionString")
具有'DBConnectionString',但是您的Yaml具有'services-appsettings'
最后,我希望在Web API中,您在构建配置时调用.AddEnvironmentVariables()。