我试图在AWS ECS (在Fargate上)上运行一个带有GRPC的netty服务器,它位于一个用于连接到Android客户端的应用程序负载均衡器后面。调用被转发,但服务器日志显示的错误如下
io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 1603010102010000fe03036a5663244616ee784100b9d61c我读过here,这样的错误与客户机和服务器有关,而不是同时使用SSL,在我的例子中,这可以说是正确的。
服务器本身没有配置为使用SSL (我不知道用哪个证书部署它)。ALB向客户端提供ACM公共证书,并且应该执行我期望的SSL卸载。但是,当协议版本为HTTPS时,我不能使用比GRPC更多的协议来配置负载平衡目标组,这一事实表明情况并非如此。
有人可以向我澄清这一点或有一个工作的例子吗?
这是我的cfn模板的相关ALB配置:
ApplicationLoadBalancer:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: my-alb
Scheme: "internet-facing"
Type: "application"
Subnets:
- !Ref public-sn-1
- !Ref public-sn-2
SecurityGroups:
- !Ref ALBSecurityGroup
IpAddressType: "ipv4"
HubListener:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
LoadBalancerArn: !Ref ApplicationLoadBalancer
Port: 50051
Protocol: HTTPS
SslPolicy: "ELBSecurityPolicy-2016-08"
Certificates:
- CertificateArn: !Ref AlbCertificateArn
DefaultActions:
- Order: 1
TargetGroupArn: !Ref HubTargetGroup
Type: "forward"
HubTargetGroup:
Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
Properties:
Port: 50051
Protocol: HTTPS
ProtocolVersion: GRPC
HealthCheckEnabled: true
HealthCheckPath: "/grpc.health.v1.Health/Check"
HealthCheckPort: "traffic-port"
HealthCheckProtocol: HTTP
TargetType: ip
Matcher:
GrpcCode: 0
VpcId: !Ref VpcId发布于 2022-07-08 08:48:57
结果表明,目标组只需切换到协议HTTP才能使SSL卸载工作。
我最初假设这是不允许的,因为转发到GRPC目标组的侦听器必须使用HTTPS作为协议,但该约束不适用于目标组本身。
https://stackoverflow.com/questions/72884212
复制相似问题