在AWS上部署gRPC

Nobody
2 min readOct 16, 2017

--

在AWS中国区部署服务。比较简单,ELB -> EC2。应用服务器用Envoy做了代理。

支持SSL

结果:

1、ELB要用TCP代理;

2、ELB上不要做SSL设置,留给envoy设置。

ELB不支持HTTP 2,所以协议层面不能用HTTP/HTTPS,只能用TCP。

ELB的SSL不支持HTTP 2需要的ALPN,所以只能在后端做SSL。

让后端可以看到客户源IP地址

之前在阿里云上,负载均衡是直接把客户源地址给了后端的。而ELB需要自己设置才能通过proxy-protocol的方式把客户源地址传给后方。

给ELB设置proxy-protocol

参考:http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-proxy-protocol.html

大概是这样:

aws elb create-load-balancer-policy --load-balancer-name balancer-name --policy-name proxy-policy --policy-type-name ProxyProtocolPolicyType --policy-attributes AttributeName=ProxyProtocol,AttributeValue=true
aws elb set-load-balancer-policies-for-backend-server --load-balancer-name balancer-name --instance-port 443 --policy-names proxy-policy

每一个端口都得单独加上。

AWS中国区的region设置为cn-north-1,否则会找不到endpoint。

给envoy支持proxy-protocol

参考:https://lyft.github.io/envoy/docs/configuration/listeners/listeners.html

加上配置就可以了:

"use_proxy_proto": true

ngnix

如果你的后端用了nginx,需要额外的配置以获取proxy-protocol附带的IP地址。

--

--