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

如何在Kubernetes Ingress TLS中使用HashiCorp Vault证书(禁用vault-csi-provider)

可行替代方案

1. 手动同步证书到Kubernetes Secret

直接从Vault拉取证书文件,手动创建/更新K8s的TLS Secret,再让Ingress引用该Secret即可,适合证书有效期长、更新频率低的场景。

  • 操作步骤:
    • 通过Vault CLI获取证书和私钥:
      # 拉取证书内容并保存到本地文件
      vault kv get -field=tls.crt secret/path/to/your/cert > tls.crt
      # 拉取私钥内容并保存到本地文件
      vault kv get -field=tls.key secret/path/to/your/key > tls.key
      
    • 创建K8s TLS Secret:
      kubectl create secret tls my-ingress-tls --cert=tls.crt --key=tls.key -n your-target-namespace
      
    • 在Ingress资源中引用该Secret:
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: your-ingress
        namespace: your-target-namespace
      spec:
        tls:
        - hosts:
          - your-domain.com
          secretName: my-ingress-tls
        rules:
        - host: your-domain.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: your-backend-service
                  port:
                    number: 80
      
  • 注意:证书过期时,重复上述步骤更新Secret即可。

2. 自定义脚本自动化同步

写个简单脚本定期从Vault拉取证书,对比当前K8s Secret的内容,有差异就自动更新。可以用K8s CronJob在集群内运行(使用官方Vault CLI镜像或符合公司安全政策的自定义镜像)。

  • 核心脚本逻辑示例:
    1. 通过K8s Auth方式登录Vault(避免硬编码Token,更安全)
    2. 拉取最新的证书和私钥
    3. 获取K8s中当前Secret的证书内容
    4. 对比两者,不一致则更新Secret
  • CronJob容器命令示例:
    # 用K8s角色登录Vault
    vault login -method=kubernetes role=your-vault-role
    # 获取当前Secret中的证书内容
    CURRENT_CERT=$(kubectl get secret my-ingress-tls -n your-target-namespace -o jsonpath='{.data.tls\.crt}' | base64 -d)
    # 获取Vault中的最新证书
    NEW_CERT=$(vault kv get -field=tls.crt secret/path/to/your/cert)
    # 对比并更新
    if [ "$CURRENT_CERT" != "$NEW_CERT" ]; then
      vault kv get -field=tls.crt secret/path/to/your/cert > tls.crt
      vault kv get -field=tls.key secret/path/to/your/key > tls.key
      kubectl create secret tls my-ingress-tls --cert=tls.crt --key=tls.key -n your-target-namespace --dry-run=client -o yaml | kubectl apply -f -
    fi
    

3. 使用Vault Agent注入证书

借助Vault Agent的Init容器或Sidecar,将证书注入到Nginx Ingress Controller的Pod中,再修改控制器配置引用这些证书文件。

  • 操作要点:
    1. 给Ingress Controller的ServiceAccount绑定Vault角色,授权读取目标证书路径
    2. 配置Vault Agent Init容器,将证书拉取到Pod的共享Volume(比如emptyDir)
    3. 修改Ingress Controller的启动参数,指定自定义证书路径,或通过Ingress的annotation引用该路径
  • 优势:无需引入额外第三方组件,仅依赖Vault Agent(若公司允许使用该镜像),证书在Pod生命周期内保持最新。

4. 利用Vault Kubernetes Secret Engine自动同步

如果已启用Vault的Kubernetes Secret Engine,可配置它自动将Vault中的证书同步为K8s的TLS Secret。

  • 操作步骤:
    1. 在Vault中启用Kubernetes Secret Engine
    2. 创建同步角色,指定要同步的证书路径,设置生成的Secret类型为kubernetes.io/tls
    3. 配置同步周期,Vault会自动将证书同步到指定的K8s命名空间中
  • 优势:完全由Vault管理同步流程,无需额外脚本或组件,适合已使用该Secret Engine的环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:34:57