使用Terraform集成AGIC与AKS时的SSL配置方案对比及选型
AGIC与AKS集成的两种SSL配置方案对比及疑问解答
背景
我正在通过Terraform实现Azure应用网关(AGW)与AKS集群的AGIC集成,目前已完成基础AGW和带AGIC插件的AKS集群的创建。配置SSL时有两种方案:
方案一:Kubernetes Secret存储证书
将SSL证书存入K8s Secret,通过Ingress的tls段和AGIC注解让AGW自动配置证书:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-app-ingress-tls annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/ssl-redirect: "true" spec: tls: - secretName: test-tls-secret hosts: - test.mydomain.com rules: - host: test.mydomain.com http: paths: - path: / backend: service: name: hello-app-service-tls port: number: 80 pathType: Exact
方案二:Azure应用网关直接托管证书
将证书转为PFX格式后手动上传到AGW(名称test-ssl-certs),通过Ingress注解指定使用该证书:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-world annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/appgw-ssl-certificate: "test-ssl-certs" spec: rules: - host: "test.mydomain.com" http: paths: - pathType: Prefix path: "/" backend: service: name: hello-world port: number: 80
疑问解答
1. 两种方案的差异是什么?
- 证书存储与管理位置:
- 方案一:证书以Secret形式存储在K8s集群内,生命周期(创建、更新、删除)完全通过K8s工具管控。
- 方案二:证书需转为PFX格式后手动上传到AGW,由Azure门户/CLI等工具管理,K8s集群内不存储证书内容。
- AGIC的作用逻辑:
- 方案一:AGIC自动读取K8s Secret中的证书,将其导入AGW并完成监听器配置,全程无需手动操作AGW。
- 方案二:AGIC仅需在Ingress中指定AGW已存在的证书名称,不会修改AGW的证书资产,仅做关联绑定。
- 证书格式要求:
- 方案一:支持K8s Secret标准的PEM格式,无需手动转换为PFX。
- 方案二:必须转为AGW要求的PFX格式才能上传。
- 扩展性与复用性:
- 方案一:多个Ingress复用同一张证书时,只需引用同一个Secret,AGIC会自动在AGW中统一管理该证书。
- 方案二:证书可在AGW的多个监听器、规则间复用,无需重复上传,但需手动维护AGW中的证书资产。
2. 两种方案中,SSL终止发生在K8s集群内还是Azure应用网关?
两种方案的SSL终止都发生在Azure应用网关(AGW)。无论证书存储在K8s还是AGW,AGW作为流量入口都会先完成SSL解密,再以HTTP明文形式将请求转发到AKS集群内的后端服务,集群内服务无需处理SSL逻辑。
3. 哪种方案更优?
没有绝对最优方案,需根据实际场景选择:
- 优先选方案一的场景:
- 习惯用K8s原生生态管理证书(比如配合cert-manager自动签发、更新证书);
- 希望证书生命周期与K8s应用部署流程绑定,实现端到端自动化;
- 不需要在AGW中复用证书到非K8s关联的资源。
- 优先选方案二的场景:
- 企业已有统一的Azure证书管理流程(比如用Azure Key Vault托管证书并同步到AGW);
- 证书需要在AGW的多个非K8s相关资源(比如自定义监听器)中复用;
- 不希望敏感证书内容出现在K8s集群的Secret中。
内容的提问来源于stack exchange,提问作者AnjK
相关产品推荐
相关产品推荐

