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

如何让AKS中Nginx Ingress从Vault/Consul KV获取证书?

问题背景

我的AKS集群已部署Kubernetes Ingress Controller,当前通过Ingress规则配置了客户端证书认证,依赖tls-secret和ca-secret这两个存储证书的Kubernetes Secret。现在需要从Vault或Consul KV存储获取这些证书,让Ingress规则直接使用,有以下两个问题:

  1. Nginx Ingress规则是否支持使用Kubernetes Secret以外形式的证书?
  2. 如果不支持,如何将Vault Secrets转换为Kubernetes Secrets,这是否是标准实现方案?

当前Ingress配置(Ingress-rules.yaml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    meta.helm.sh/release-name: service
    meta.helm.sh/release-namespace: mynamespace
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
    nginx.ingress.kubernetes.io/auth-tls-secret: microservices/ca-secret
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "3"
    nginx.ingress.kubernetes.io/enable-underscores-in-headers: "true"
  name: service-nginx-ingress
  namespace: mynamespace
spec:
  ingressClassName: nginx
  rules:
  - host: ingress-nginx-controller.microservices.com
    http:
      paths:
      - backend:
          service:
            name: service
            port:
              number: 8080
        path: /api/v1/service
        pathType: Prefix
  tls:
  - hosts:
    - ingress-nginx-controller.microservices.com
    secretName: tls-secret

补充说明:我曾尝试用Vault Agent在Pod中获取证书,但无法利用该数据在集群内创建Secret。


回答

问题1:Nginx Ingress规则是否支持使用Kubernetes Secret以外形式的证书?

不支持。Nginx Ingress Controller的设计逻辑是依赖Kubernetes Secret加载TLS证书和客户端认证CA证书的,不管是spec.tls.secretName字段还是nginx.ingress.kubernetes.io/auth-tls-secret注解,都只能指向集群内的Kubernetes Secret资源,无法直接引用Vault、Consul KV这类外部存储中的证书。

问题2:如何将Vault Secrets转换为Kubernetes Secrets,这是否是标准实现方案?

将外部密钥存储(如Vault、Consul KV)中的证书同步为Kubernetes Secret是行业内的标准实现方案,常用工具和方式如下:

1. Vault Kubernetes Secrets Operator

HashiCorp官方提供的Operator,可直接在Kubernetes集群内将Vault中的密钥同步为Kubernetes Secret,支持自动轮换。核心步骤:

  • 在Vault中为Operator创建对应角色与策略,授予读取目标证书路径的权限
  • 在AKS集群部署Vault Kubernetes Secrets Operator
  • 创建VaultStaticSecret或VaultDynamicSecret自定义资源,指定Vault证书路径、目标Kubernetes Secret的名称与命名空间
  • Operator会自动拉取Vault证书,创建并维护对应的Kubernetes Secret,Ingress规则直接引用该Secret即可

2. External Secrets Operator (ESO)

通用型外部密钥同步工具,支持Vault、Consul KV、AWS Secrets Manager等多种后端。使用方式:

  • 部署ESO到AKS集群
  • 创建SecretStore或ClusterSecretStore资源,配置与Vault/Consul的连接信息和认证方式
  • 创建ExternalSecret资源,映射外部存储中的证书字段到Kubernetes Secret的对应字段(如tls.crt、tls.key、ca.crt)
  • ESO会自动同步外部证书到集群内的Secret,且支持自动更新

3. 改进Vault Agent的使用方式

你之前尝试的Vault Agent仅在Pod内获取证书,无法直接创建集群级Secret,可调整为:

  • 部署专用同步Pod,通过Vault Agent Sidecar获取Vault证书后,调用Kubernetes API创建或更新Secret
  • 或者使用Vault Agent Injector为同步Pod注入Agent,配合脚本实现证书到Secret的同步

以上方案中,使用官方或通用Operator是最标准的做法,能保证同步的可靠性、自动轮换和权限管控,避免手动脚本带来的维护风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:28