如何在Kubernetes中覆盖Kong Gateway默认证书?Kong 2.7 SSL证书配置失败求助
解决Kong 2.7 SSL证书配置错误的方案
你遇到的错误本质是curl命令没有正确读取证书和密钥文件的内容,而是把文件名作为字符串传递给了Kong Admin API,导致Kong无法解析出有效的X509证书和私钥。下面分两种方式帮你解决问题:
一、修正Admin API调用的curl命令
你的原命令中,-F "cert=kong.lan.pem"会把字符串kong.lan.pem作为证书内容发送,而不是读取文件里的实际证书数据。需要在文件名前加@符号,告诉curl读取文件内容:
curl -X POST http://kong-admin:8001/certificates \ -F "cert=@kong.lan.pem" \ -F "key=@kong.lan.key" \ -F "snis[0]=mydomain.net"
执行前请确保:
kong.lan.pem和kong.lan.key文件在当前执行curl命令的目录下,或者使用绝对路径(比如@/path/to/kong.lan.pem)- 证书和密钥本身是有效的,可以用以下命令验证:
# 验证证书格式 openssl x509 -in kong.lan.pem -text -noout # 验证私钥格式 openssl rsa -in kong.lan.key -check
如果以上命令报错,说明证书/密钥本身损坏,需要重新生成正确的文件。
二、通过Helm Chart配置证书(推荐,更符合K8s部署规范)
因为你是用Helm部署的Kong,更推荐通过Kubernetes Secret+Helm Values的方式配置证书,这样证书会被安全挂载到Kong Pod中,且配置持久化:
步骤1:创建存储证书的Kubernetes Secret
使用K8s内置的TLS Secret类型存储证书和密钥:
kubectl create secret tls kong-tls-cert \ --cert=kong.lan.pem \ --key=kong.lan.key
步骤2:更新Helm部署配置
如果是新安装Kong,可以直接在install命令中添加TLS配置参数:
helm install kong/kong --generate-name \ --set ingressController.enabled=true \ --set admin.enabled=True \ --set admin.http.enabled=True \ --set ingress.enabled=True \ --set proxy.ingress.enabled=True \ --set admin.type=LoadBalancer \ --set proxy.type=LoadBalancer \ --set proxy.tls.enabled=true \ --set proxy.tls.secret=kong-tls-cert \ --set proxy.tls.snis[0]=mydomain.net
如果Kong已经安装,使用helm upgrade更新配置:
# 先查看你的Kong release名称:helm list helm upgrade <your-kong-release-name> kong/kong \ --set proxy.tls.enabled=true \ --set proxy.tls.secret=kong-tls-cert \ --set proxy.tls.snis[0]=mydomain.net
参数说明
proxy.tls.enabled=true:开启Proxy的TLS功能proxy.tls.secret=kong-tls-cert:指定刚才创建的Secret名称,Kong会自动挂载该Secret中的证书和密钥proxy.tls.snis[0]=mydomain.net:配置证书对应的SNI域名
验证配置是否生效
配置完成后,可以通过以下方式验证:
- 调用Admin API查看证书:
curl http://kong-admin:8001/certificates
- 访问Proxy的HTTPS端口(默认443),验证证书是否生效:
curl -v https://<kong-proxy-ip> -H "Host: mydomain.net"
内容的提问来源于stack exchange,提问作者Simon21
相关产品推荐
相关产品推荐

