Jaeger gRPC服务启动报错:http2Server收到非法客户端问候
问题分析与解决方案
核心原因
日志中的transport: http2Server.HandleStreams received bogus greeting错误,是因为客户端向Jaeger的明文gRPC端口发送了TLS握手请求。日志里的\x16是TLS握手消息的标识字节,说明连接方试图用HTTPS/TLS方式访问一个仅支持明文HTTP/2(h2c)的gRPC端口。
结合更新信息,错误在Jaeger启动后自动重复出现,说明有外部进程/服务在持续向16685端口发送TLS请求,而非Postman调用时触发。
解决方案
1. 确认Jaeger gRPC端口的访问方式
Jaeger的jaeger.api_v3.QueryService默认绑定16685端口,该端口为明文gRPC(h2c),不支持TLS加密。如果用Postman调用:
- 在Postman的gRPC请求设置中,关闭TLS选项(勾选"Plaintext"模式)。
2. 排查端口的异常访问来源
用工具检查16685端口的连接发起方,定位误访问的服务:
# Linux/macOS查看端口连接 ss -tulpn | grep 16685 # Windows查看端口占用 netstat -ano | findstr :16685
常见原因包括:监控工具配置错误、反向代理路由指向错误、其他服务误占用端口等,找到后调整对应服务的配置即可。
3. (可选)为Jaeger gRPC启用TLS加密
如果需要通过TLS访问gRPC服务,可通过环境变量配置Jaeger的证书:
修改Docker Compose文件:
services: jaeger: container_name: jaeger ports: - 16685:16685 - 16686:16686 - 4317:4317 - 4318:4318 - 5778:5778 - 9411:9411 image: jaegertracing/all-in-one:latest environment: # 配置gRPC服务的TLS证书和密钥 - QUERY_GRPC_TLS_CERT=/certs/server.crt - QUERY_GRPC_TLS_KEY=/certs/server.key volumes: # 将本地证书目录挂载到容器内 - ./path/to/your/certs:/certs
配置完成后,Postman调用时需开启TLS,并导入对应的CA证书(如果是自签名证书)。
4. 验证gRPC服务可用性
用grpcurl工具测试明文gRPC连接是否正常:
# 下载Jaeger的proto文件后执行 grpcurl -plaintext localhost:16685 list jaeger.api_v3.QueryService
如果返回服务方法列表,说明gRPC服务已正常启动。
内容的提问来源于stack exchange,提问作者Olivier Gérardin
相关产品推荐
相关产品推荐

