【以下的问题经过翻译处理】 你好,我正在尝试在ECS(在Fargate上)上运行一个带有GRPC API的Netty服务器,并将其放在应用负载均衡器后面,以便Android GRPC客户端可以连接到它。调用被转发了,但服务器日志显示了一个错误,类似于:
io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 1603010102010000fe03036a5663244616ee784100b9d61c
我了解到这样的错误可能与客户端和服务器都未使用SSL有关,就我而言,这可以说是正确的。
服务器本身未配置为使用SSL(我不知道要部署哪个证书)。不过,我预期ALB已经配备了一个ACM公共证书,并且应该进行SSL卸载。然而,无法在协议版本为GRPC时将负载均衡目标组配置为除HTTPS以外的其他协议,这表明情况并非如此。
有人能向我澄清这一点,或者提供一个可行的示例吗?任何帮助将不胜感激。
这是我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