在 Kubernetes 中如何管理 .NET 应用的配置

来源:站长平台作者:Ada头衔:草根站长
导读:本期聚焦于小伙伴创作的《在 Kubernetes 中如何管理 .NET 应用的配置》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《在 Kubernetes 中如何管理 .NET 应用的配置》有用,将其分享出去将是对创作者最好的鼓励。

在 Kubernetes 中管理 .NET 应用的配置,核心是利用 Kubernetes 原生的配置资源,结合 .NET 自身的配置体系,实现配置的外部化、动态化管理,避免将配置硬编码到应用代码中。

在 Kubernetes 中如何管理 .NET 应用的配置

Kubernetes 配置资源介绍

Kubernetes 提供了两种主要的配置资源,分别适用于不同的配置场景:

  • ConfigMap:用于存储非敏感的配置数据,比如应用的业务配置、服务地址、功能开关等,数据以键值对的形式存储。
  • Secret:用于存储敏感配置数据,比如数据库密码、API 密钥、证书等,数据会进行 base64 编码存储,相对 ConfigMap 有更高的安全性。

使用 ConfigMap 管理非敏感配置

创建 ConfigMap

可以通过 YAML 文件定义 ConfigMap,以下是一个存储 .NET 应用业务配置的示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: dotnet-app-config
  namespace: default
data:
  # 键值对形式的配置
  AppSettings__MaxRequestCount: "100"
  AppSettings__CacheExpireMinutes: "30"
  # 也可以存储多行配置内容
  appsettings.override.json: |
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      }
    }

在 Pod 中挂载 ConfigMap

有两种常用的方式让 .NET 应用读取 ConfigMap 中的配置:环境变量注入和文件挂载。

方式一:环境变量注入

在 Pod 的 YAML 定义中,通过 env 字段将 ConfigMap 的键值对注入为环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: dotnet-app-pod
spec:
  containers:
  - name: dotnet-app
    image: my-dotnet-app:latest
    env:
    - name: AppSettings__MaxRequestCount
      valueFrom:
        configMapKeyRef:
          name: dotnet-app-config
          key: AppSettings__MaxRequestCount
    - name: AppSettings__CacheExpireMinutes
      valueFrom:
        configMapKeyRef:
          name: dotnet-app-config
          key: AppSettings__CacheExpireMinutes

方式二:文件挂载

将 ConfigMap 中的多行配置内容挂载为应用目录下的配置文件,适合存储完整的配置文件内容:

apiVersion: v1
kind: Pod
metadata:
  name: dotnet-app-pod
spec:
  containers:
  - name: dotnet-app
    image: my-dotnet-app:latest
    volumeMounts:
    - name: config-volume
      mountPath: /app/config
  volumes:
  - name: config-volume
    configMap:
      name: dotnet-app-config
      items:
      - key: appsettings.override.json
        path: appsettings.override.json

.NET 应用读取 ConfigMap 配置

.NET 应用的配置系统会自动读取环境变量和指定路径的配置文件,无需额外编写大量适配代码。如果是环境变量注入的配置,.NET 会自动将环境变量转换为配置键值,双下划线会被识别为配置层级分隔符,和 JSON 配置中的冒号层级效果一致。如果是文件挂载的配置,只需要在应用启动时指定配置文件路径即可:

var builder = WebApplication.CreateBuilder(args);

// 加载挂载路径下的配置文件
builder.Configuration.AddJsonFile("/app/config/appsettings.override.json", optional: true, reloadOnChange: true);

var app = builder.Build();

// 读取配置示例
var maxRequestCount = builder.Configuration.GetValue<int>("AppSettings:MaxRequestCount");
var cacheExpireMinutes = builder.Configuration.GetValue<int>("AppSettings:CacheExpireMinutes");

app.MapGet("/config", () => new {
    MaxRequestCount = maxRequestCount,
    CacheExpireMinutes = cacheExpireMinutes
});

app.Run();

使用 Secret 管理敏感配置

创建 Secret

Secret 中的数据需要先做 base64 编码,以下是创建存储数据库密码的 Secret 示例:

apiVersion: v1
kind: Secret
metadata:
  name: dotnet-app-secret
  namespace: default
type: Opaque
data:
  # 原始值为 MyDbPassword123,base64 编码后的值
  DbPassword: TXlEYlBhc3N3b3JkMTIz
  # 原始值为 mydbuser
  DbUser: bXlkYnVzZXI=

在 Pod 中使用 Secret

Secret 的使用方式和 ConfigMap 类似,同样支持环境变量注入和文件挂载,以下是环境变量注入的示例:

apiVersion: v1
kind: Pod
metadata:
  name: dotnet-app-pod
spec:
  containers:
  - name: dotnet-app
    image: my-dotnet-app:latest
    env:
    - name: Db__User
      valueFrom:
        secretKeyRef:
          name: dotnet-app-secret
          key: DbUser
    - name: Db__Password
      valueFrom:
        secretKeyRef:
          name: dotnet-app-secret
          key: DbPassword

.NET 应用读取 Secret 配置

Secret 注入的环境变量读取方式和普通环境变量一致,.NET 配置系统会自动识别:

var builder = WebApplication.CreateBuilder(args);

var dbUser = builder.Configuration.GetValue<string>("Db:User");
var dbPassword = builder.Configuration.GetValue<string>("Db:Password");

// 使用配置连接数据库
var connectionString = $"Server=127.0.0.1;User Id={dbUser};Password={dbPassword};";

app.MapGet("/db-config", () => new {
    DbUser = dbUser,
    HasPassword = !string.IsNullOrEmpty(dbPassword)
});

app.Run();

配置更新与生效

ConfigMap 和 Secret 更新后,通过文件挂载方式使用的配置会自动更新到 Pod 中,如果 .NET 应用开启了配置文件的 reloadOnChange 选项,配置会在短时间内自动生效,无需重启应用。如果是通过环境变量注入的配置,更新后需要重启 Pod 才能生效,因此非敏感配置优先使用文件挂载的方式,更便于动态更新。

注意事项

  • 不要将 Secret 的 base64 编码内容当作加密,base64 可以很容易解码,生产环境建议结合 Kubernetes 的加密提供者对 Secret 进行加密存储。
  • ConfigMap 和 Secret 的大小有限制,单个资源不能超过 1MiB,过大的配置不建议放在这两个资源中。
  • 挂载配置文件时,注意文件的权限设置,避免应用没有读取权限导致启动失败。

Kubernetes.NET_应用ConfigMapSecret配置管理修改时间:2026-07-09 23:51:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。