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

使用NGINX Ingress Controller为gRPC应用启用TLS透传遇错求助

问题解决:gRPC TLS透传时出现tls: unrecognized name错误

错误原因

这个错误是TLS握手阶段SNI(Server Name Indication)不匹配或传递异常导致的。结合你的配置和测试情况,核心问题出在Ingress资源配置不当,以及NGINX Ingress Controller可能未启用SSL透传功能。

解决方案

1. 修正Ingress资源配置

当前配置存在重复注解、冗余TLS配置的问题,调整后的配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: lh-server
  namespace: default
  annotations:
    # 仅保留NGINX Ingress专属的SSL透传注解
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    # 指定后端为gRPC协议(若后端是HTTPS也可设为HTTPS,但gRPC更精准)
    nginx.ingress.kubernetes.io/backend-protocol: GRPC
spec:
  ingressClassName: nginx
  rules:
  - host: lh.demo.littlehorse.cloud
    http:
      paths:
      - backend:
          service:
            name: lh-server
            port:
              number: 5000
        path: /
        pathType: Prefix
  • 移除了重复的ingress.kubernetes.io/ssl-passthrough注解(旧版注解已被NGINX专属注解替代)
  • 删除了spec.tls块:SSL透传模式下,NGINX不处理证书,完全由后端服务接管,无需在此配置证书信息

2. 确保NGINX Ingress Controller启用SSL透传功能

SSL透传默认是禁用的,需要在控制器启动参数中开启:

  1. 编辑控制器的Deployment(假设控制器部署在ingress-nginx命名空间):
kubectl edit deployment nginx-ingress-controller -n ingress-nginx
  1. 在容器的args列表中添加--enable-ssl-passthrough:
containers:
- name: controller
  args:
    - /nginx-ingress-controller
    - --enable-ssl-passthrough
    # 其他原有参数...
  1. 保存退出后,控制器会自动重启,使配置生效。

3. 验证客户端访问逻辑

确保客户端访问时正确传递SNI信息,比如使用grpcurl测试:

grpcurl -v -cacert ./client-ca.crt lh.demo.littlehorse.cloud:443 your.grpc.package.Service/Method
  • 必须指定目标主机名lh.demo.littlehorse.cloud,否则SNI不匹配会触发同样错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:45:15