我正在准备一个环境,用于运行在Kubernetes集群中的Springboot应用程序的集成测试。我使用遥临,它拦截Kubernetes集群中的通信量(GRPC API),将其路由到我的IDE(IntelliJ)中本地运行的应用程序。Kubernetes中的Springboot应用程序正在监听端口9090上的gRPC调用,并通过ClusterIP服务公开。我正在尝试拦截在Kubernetes中运行的这个应用程序的gRPC流量,并使用下面的Telepresence截取命令将其路由到本地运行的应用程序,该应用程序侦听端口9095
telepresence intercept service-name --namespace=ns --port 9095:9090 --env-file C:\Users\SC1063\telepresence\env_files\intercept-config.env
接收到gRPC调用时的本地应用程序将引发以下异常
io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 1603010200010001fc0303ffd1d5efdfb5771b509014337a
从我所理解的弹簧引导+ GRPC Http2Exception问题中,运行在Kubernetes中的客户端应用程序的调用正在尝试使用TLS保护通信。然而,库伯奈特内部非截获的gRPC调用没有任何问题。应用程序环境使用Istio作为服务网格。
客户端日志中观察到的错误
upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error: 268435703:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER]
发布于 2022-09-05 18:00:42
造成此问题的根本原因是,客户端在向服务器发送请求之前应用TLS,而服务器正在等待明文。除非禁用,使用TLS确保外部出站流量( K8s集群外的流量)。创建Istio命运规则CRD,该规则被公使代理用于在路由流量时禁用TLS。
spec:
trafficPolicy:
tls:
mode: DISABLE
https://stackoverflow.com/questions/73609025
复制相似问题