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

如何直接从HashiCorp Vault获取TLS密钥用于Kubernetes Ingress?

能否直接在Nginx Ingress中从HashiCorp Vault获取TLS密钥?

我在基于OpenStack的Kubernetes环境中部署了微服务,采用Nginx Ingress与HashiCorp Vault,TLS证书密钥存储于HashiCorp Vault内。我已创建如下SecretProviderClass:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: sslspc
spec:
  provider: vault
  secretObjects:
  - secretName: sslspc
    data:
    - key: "tls.key"
      objectName: TLSKey
    - key: "tls.crt"
      objectName: TLSCert
    type: kubernetes.io/tls
  parameters:
    vaultAddress: http://vault.vault:8200
    roleName: "approle"
    objects:  |
      - objectName: TLSKey
        secretPath: "secret/data/myssl"
        secretKey: "tls.key"
      - objectName: TLSCert
        secretPath: "secret/data/myssl"
        secretKey: "tls.crt"

但无法直接将其用于Ingress,必须创建一个额外Pod来挂载卷并映射环境变量:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: depssl
  labels:
    app: appbusy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: appbusy
  template:
    metadata:
      labels:
        app: appbusy
    spec:
      serviceAccountName: mysa
      containers:
      - name: appbusy
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh"]
        args: ["-c", "while true; do sleep 300;done"]
        env:
        - name: TLS.KEY
          valueFrom:
            secretKeyRef:
              name: sslspc
              key: tls.key
        - name: TLS.CRT
          valueFrom:
            secretKeyRef:
              name: sslspc
              key: tls.crt
        volumeMounts:
        - name: sslspc
          mountPath: "/mnt/secrets-store"
          readOnly: true
      volumes:
      - name: sslspc
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "sslspc"

完成上述操作后,才能在Ingress中使用该密钥:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - example.com
    secretName: sslspc
  rules:
  - host: example.com
    http:
      paths:
        - pathType: Prefix
          path: /
          backend:
            service:
              name: myservice
              port:
                number: 80

请问是否可以无需创建这类仅用于映射的额外Pod,直接在Ingress中从HashiCorp Vault获取TLS密钥?

更新(2023年3月):
经研究,目前无法实现该需求。使用Sidecar等方案会增加复杂度与资源消耗,最终我采用上述简单的busybox Deployment来生成密钥,这是最简单且资源消耗最低的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:01:20