如何通过Helm配置为Kong Gateway设置/更换SSL证书
Kong Gateway 通过Helm配置/更换SSL证书方案
完全可以通过Helm实现SSL证书的设置与更换,挂载Secret传入证书是生产环境推荐的标准方案,比手动curl调用Admin API配置更易维护、可复现。

方案1:挂载K8s TLS Secret配置默认证书
这是最常用的配置方式,适用于配置网关全局默认SSL证书的场景:
- 先将SSL证书、私钥创建为Kubernetes TLS类型Secret:
# 替换成你自己的证书文件路径、Kong所在命名空间 kubectl create secret tls kong-default-ssl --cert=./fullchain.crt --key=./private.key -n kong
- 执行Helm升级命令,将证书挂载到Kong Proxy组件:
helm upgrade --install kong kong/kong -n kong \ --set proxy.tls.enabled=true \ --set proxy.tls.secretName=kong-default-ssl
如果你使用自定义values.yaml管理配置,直接在values中添加以下配置再执行upgrade即可:
proxy: tls: enabled: true secretName: kong-default-ssl
配置生效后,所有未匹配到专属SNI证书的HTTPS请求,都会返回这个默认证书。
方案2:多域名SNI证书配置
如果需要为不同域名绑定独立SSL证书,不需要手动调用curl接口配置,可以直接在Helm values中声明证书与对应SNI列表,Kong启动后会自动加载:
gateway: certificates: - name: example-com-cert # 传入证书文件的base64编码内容 cert: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." # 传入私钥文件的base64编码内容 key: "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ..." snis: - "example.com" - "www.example.com" - name: test-com-cert cert: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." key: "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ..." snis: - "test.com"
证书更换操作
- 若仅更新证书内容、不更换Secret名称:直接编辑对应的K8s Secret替换cert和key字段即可,K8s会自动将更新后的文件同步到Kong Pod,Kong会自动检测证书变更并重载配置,整个过程不需要重启Pod,不会中断正常业务流量
- 若更换为新的证书Secret:执行
helm upgrade命令传入新的proxy.tls.secretName参数即可完成替换
注意事项
- 如果你之前通过curl调用Admin API手动配置过证书,Helm配置的证书会与手动配置的证书共存,匹配优先级遵循Kong原生SNI匹配规则。如果需要完全通过Helm托管证书配置,建议先删除之前手动通过API创建的证书资源,避免冲突
- 传入的证书建议使用包含中间CA的完整证书链(fullchain),避免部分客户端校验证书时抛出不信任错误
- 默认Helm配置的挂载文件权限符合Kong进程运行要求,无需手动调整权限
- 如果HTTPS请求在Kong上游的负载均衡层已经做了TLS卸载,Kong侧不需要重复配置SSL证书
内容的提问来源于stack exchange,提问作者MeIr
相关产品推荐
相关产品推荐

