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

如何在Kubernetes中通过环境变量访问TLS Secret?

问题描述

我有一个TLS Secret,定义如下:

apiVersion: v1 
kind: Secret 
metadata:
  name: tls-ingress-secret 
  namespace: ingress-namespace 
type: kubernetes.io/tls 
data:
  tls.key: | 
    -----BEGIN PRIVATE KEY-----
    MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtwUrZ6zS+GdAw
    ldIUxIXpnajvAZun1mf8DD0nWJRBonzbBIZhLyHqQyPvz4B+ZfZ/ql/vucpLEPnq
    V3HqJraydt7kw/MBCS6a8GRObFx/faIWolbF5FjVgJexAxydeE35A7+hJUdElA7e
    jOVPzafz53oJvyCdtdRTVwbH6EA+aJGZ0eTmzRobLVdqmqCejN4soDeRZQcMXYrG
    uW+rTy3dyRCbMGV33GzYYJk2qBNFz+DqZbp1TyFcOQKBgQDW3IvXES4hfgtmj8NK
    0BKdX7gUyANdZooJ1tXoMjVmcFbdvoUprED3hpiI1WTYiZ3dqKD7QrHGsBW/yHZB
    UfFFxSj+vKotgxBhe06o2SDkXCnWfuQSJDZEgL/TuI9Qb/w1QeDxTZG4KCPiBrPD
    MiXRtvV7qdyWoPjUolWfWyef4K5NVo34TF4DHseY1QMoI8dTmB0nnZiDfZA6B+t0
    jgrnP8RpqaAOH8UjRwC+QMCfuq0SejUWocSobc/7K+7HJlMRwi6FuPXb7omyut+5
    34pCkfAj8Lwtleweh/PbSDnX9g==
    -----END PRIVATE KEY-----

  tls.crt: | 
    -----BEGIN CERTIFICATE-----
    MIIEDDCCAvSgAwIBAgIUDr8pM7eB+UPyMD0sY0yR5XmWrVQwDQYJKoZIhvcNAQEL
    BQAwgY8xCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZSdXNzaWExDzANBgNVBAcMBk1v
    c2NvdzEmMCQGA1UECgwdS2lyaWxsIEtsaW11c2hpbnMgQ29ycG9yYXRpb24xHDAa
    BgNVBAsME09yZ2FuaXphdGlvbmFsIFVuaXQxGDAWBgNVBAMMD3d3dy5zdG9yZXJ1
    LmNvbTAeFw0yMjA3MjgxMTAyMThaFw0yMzA1MjQxMTAyMThaMIGPMQswCQYDVQQG
    PkBW2sS7dMxNLLeHyZ3st1SJfmWZhya1LsPvo1ilU3+d8rD5JjlC/cQ7EAF9DDXR
    i3/9zNzx3R6MMgNqkzQ89dDjHH+FZ2R0VkBKp35MYVg=
    -----END CERTIFICATE-----

请问是否可以将该Secret中的tls.crt和tls.key以环境变量形式获取,以便我能在应用中通过如下Go代码访问对应内容:

SSlCertFile := os.Getenv("tls.cert") // cert file with payload. 
SslCertKey := os.Getenv("tls.key") // cert file key.
解决方案

完全可以通过环境变量的方式将Secret中的内容注入到Pod中,具体实现步骤如下:

1. 在Deployment/StatefulSet中配置环境变量

在Pod的容器定义里,通过env字段引用Secret中的数据项,Kubernetes会自动将Secret中base64编码的内容解码为明文,注入到容器的环境变量中。示例配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-deployment
  namespace: ingress-namespace # 和Secret同命名空间
spec:
  replicas: 1
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app-container
        image: your-app-image:tag
        env:
        # 将Secret中的tls.crt映射为环境变量tls.cert
        - name: tls.cert
          valueFrom:
            secretKeyRef:
              name: tls-ingress-secret
              key: tls.crt
        # 将Secret中的tls.key映射为环境变量tls.key
        - name: tls.key
          valueFrom:
            secretKeyRef:
              name: tls-ingress-secret
              key: tls.key

2. 代码适配说明

你的代码中环境变量名是tls.cert,而Secret中的数据项是tls.crt,上面的Deployment配置已经做了映射,所以代码可以直接使用。如果不想做映射,也可以把代码中的环境变量名改成tls.crt,对应修改Deployment中的name字段即可。

注意事项

  • Secret和Pod必须处于同一个命名空间,否则无法引用。
  • 环境变量中存储的是证书/密钥的明文内容,不是文件路径,所以Go代码可以直接使用os.Getenv获取完整的证书字符串,无需额外读取文件。
  • 若Secret内容更新,Pod不会自动刷新环境变量,需要重启Pod才能获取新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:55:47