我目前正在开发一个在 Kubernetes 上使用 .NET Core 2.1 运行的项目。我的应用程序从文件和环境变量中读取配置值appsettings.json。
问题是当我尝试从接口读取配置时IConfiguration,“大多数时候”值返回 null,但仅限于 Kubernetes。它在我的开发机器和带有 Windows VM 和 IIS 的测试机器上完美运行。这些环境之间的区别在于开发和测试机器是 Windows,但生产是在 Linux 容器上运行的 Kubernetes(基于microsoft/dotnet:2.1-aspnetcore-runtime映像)以及我如何实现环境变量。在我的开发机器中没有定义环境变量。web.config在 Windows VM 中,我确实通过如下条目使用环境变量:
<aspNetCore processPath="dotnet" arguments="myapp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="Site:SiteId" value="1" />
<environmentVariable name="Site:Theme" value="MyTheme" />
</environmentVariables>
</aspNetCore>
Run Code Online (Sandbox Code Playgroud)
我用于WebHost.CreateDefaultBuilder()配置和文档说方法实现了appsettings.json配置appsettings.{EnvironmentName}.json源的环境变量和命令行参数。
我的appsettings.json文件:
{
"Site": {
"SiteId": 1,
"Theme": "Limitless"
},
"RemoteClient": {
"HostUrl": "http://localhost:59554/management/",
"AppKey": "test",
"AppSecret": "1"
}
}
Run Code Online (Sandbox Code Playgroud)
最后是我的 Kubernetes 部署文件:
apiVersion: apps/v1
kind: …Run Code Online (Sandbox Code Playgroud)