如何在Nginx Ingress中为同一域名配置RSA与GOST两份TLS证书?
问题解答
是否可以通过Nginx Ingress实现单域名双证书TLS终结
可以实现,需满足以下前提和配置要求:
- 你使用的Nginx Ingress Controller镜像需要内置支持GOST算法的加密库:官方默认发布的Nginx Ingress镜像未编译GOST相关支持,你需要基于对应版本的源码,替换底层OpenSSL为支持国密GOST的版本,重新编译镜像后替换集群内的Ingress Controller镜像。
- 配置方法如下:
- 将test.example.com对应的RSA证书、GOST证书分别创建为K8s
Secret资源,类型为kubernetes.io/tls。 - 编写Ingress资源配置,同一域名下关联两个证书Secret,同时通过annotation配置支持GOST的加密套件,示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-example-ingress annotations: # 按需调整加密套件,保留RSA相关套件的同时加入GOST套件 nginx.ingress.kubernetes.io/ssl-ciphers: "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:GOST2012-GOST8912-GOST8912" spec: tls: - hosts: - test.example.com secretName: test-example-rsa-tls # RSA证书对应的Secret - hosts: - test.example.com secretName: test-example-gost-tls # GOST证书对应的Secret rules: - host: test.example.com http: paths: - path: / pathType: Prefix backend: service: name: your-backend-service port: number: 80
Nginx Ingress实现方案的优劣势
- 优势:无需引入额外组件,复用现有K8s技术栈,证书、路由配置统一在集群内管理
- 劣势:自定义镜像的维护成本高,后续Ingress Controller版本升级需要重新编译适配,同时要验证修改镜像后对集群内其他Ingress资源的兼容性影响。
外部负载均衡实现方案的合理性对比
如果你现有的外部负载均衡(如云厂商SLB、硬件负载设备)原生支持GOST算法、同域名多证书挂载,优先选择外部负载均衡做TLS终结更合理,优势如下:
- 无需修改现有Nginx Ingress的镜像配置,不会影响集群内已有业务的稳定性
- 负载均衡层专门做TLS卸载性能更强,同时可以统一管理所有业务的证书,不需要在多个K8s集群分散配置,运维成本更低。
选型建议
- 如果仅当前集群需要支持GOST双证书,且能承担自定义镜像的维护成本,可选择Nginx Ingress实现
- 如果有多集群国密支持需求、或不想修改现有稳定的Ingress配置,优先选择外部负载均衡实现。
内容的提问来源于stack exchange,提问作者vudex
相关产品推荐
相关产品推荐

