You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net Core 8 API部署K8s后无法读取环境变量求助

问题分析

你当前的配置只是将Github Secrets注入到了Github Action的运行环境中,但这些变量并没有传递到K8s集群的Pod容器里,所以API无法读取到配置值。

正确配置方案

方案一:直接替换K8s清单中的环境变量占位符

  1. 修改K8s Deployment清单,在容器的env字段里添加占位符:
containers:
  - name: your-dotnet-api
    image: your-api-image:latest
    env:
      - name: DATABASEUSERNAME
        value: ${DATABASEUSERNAME}
      - name: DATABASEPASSWORD
        value: ${DATABASEPASSWORD}
  1. 在Github Action工作流中替换占位符并部署:
jobs:
  build-and-push:
    runs-on: ubuntu-latest
    env:
      DATABASEUSERNAME: ${{ secrets.DATABASEUSERNAME }}
      DATABASEPASSWORD: ${{ secrets.DATABASEPASSWORD }}
    steps:
      # 省略拉取代码、构建/推送镜像的步骤
      
      - name: 替换K8s清单中的环境变量
        run: envsubst < ./path/to/your/deployment.yml > ./path/to/deployment-modified.yml
      
      - name: 部署到K8s集群
        run: kubectl apply -f ./path/to/deployment-modified.yml

方案二:使用K8s Secrets存储敏感信息(推荐)

这种方式更符合K8s的安全最佳实践,敏感数据不会明文出现在部署清单中。

  1. 在Github Action中创建K8s Secret:
jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      # 省略拉取代码、构建/推送镜像的步骤
      
      - name: 创建数据库凭证Secret
        run: |
          kubectl create secret generic db-credentials \
            --from-literal=DATABASEUSERNAME=${{ secrets.DATABASEUSERNAME }} \
            --from-literal=DATABASEPASSWORD=${{ secrets.DATABASEPASSWORD }} \
            --dry-run=client -o yaml | kubectl apply -f -
  1. 修改K8s Deployment清单,从Secret读取环境变量:
containers:
  - name: your-dotnet-api
    image: your-api-image:latest
    env:
      - name: DATABASEUSERNAME
        valueFrom:
          secretKeyRef:
            name: db-credentials
            key: DATABASEUSERNAME
      - name: DATABASEPASSWORD
        valueFrom:
          secretKeyRef:
            name: db-credentials
            key: DATABASEPASSWORD
额外注意事项
  • .NET Core配置的环境变量命名规则:如果你的appsettings.json里的配置是层级结构(比如ConnectionStrings:DefaultConnection),对应的环境变量需要用双下划线代替冒号,即ConnectionStrings__DefaultConnection。
  • 确保Github Action的运行环境已配置K8s集群的访问权限(比如通过kubeconfig文件或者云服务商的认证插件)。
  • 如果使用docker-compose生成K8s清单,可以先在docker-compose.yml里定义环境变量占位符,再用kompose convert生成清单后做替换,或者直接修改生成后的清单。

内容的提问来源于stack exchange,提问作者matt sharp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:52:45