如何解决AWS EKS和Istio Ingress上具有GRPC的SSL提供StatusCode.UNAVAILABLE
我正在使用AWS EKS服务(K8S版本1.17)运行kubernetes集群,并在其上安装了Istio(1.7.1)作为Operator安装程序。
我一直在正常运行这些服务,并且还运行Istio Ingress Gateway作为入口服务,该服务随AWS NLB发布,并在Istio Ingress Gateway上带有以下注释:
metadata:
annoations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
service.beta.kubernetes.io/aws-load-balancer-internal: "false"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "redacted arn"
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
这将成功创建具有4个侦听器的NLB(根据Istio入口定义),并使用提供的证书运行443个TLS。
网关后面的配置如下:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: service-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: grpc-plain
protocol: GRPC
hosts:
- redacted
- port:
number: 443
name: grpc-tls
protocol: GRPC
hosts:
- redacted
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: service-vservice
namespace: app
spec:
gateways:
- istio-system/service-gateway
hosts:
- redacted
http:
- route:
- destination:
host: service
port:
number: 8000
但是,尽管普通端口(80)在负载均衡器中可以正常工作,但SSL / TLS端口443使用任何语言(使用C,C ++,Python测试)都会产生以下错误:
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "failed to connect to all addresses"
debug_error_string = "{"created":"@1601027790.018488379","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":4089,"referenced_errors":[{"created":"@1601027790.018476348","description":"failed to connect to all addresses","file":"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc","file_line":393,"grpc_status":14}]}"
>
作为示例,Python客户端已初始化如下:
import grpc
from service_pb2_grpc import ServiceStub
creds = grpc.ssl_channel_credentials()
with grpc.secure_channel(url,creds) as channel:
grpc_client = ServiceStub(channel)
使用简单的客户端时出现此错误我要怎么做?
解决方法
根据this的有关在AWS上使用GRPC的文章,看来在AWS上使用GRPC是一项艰巨的任务。
关于如何在AWS上为GRPC创建负载平衡器的还有article。
这是事实– gRPC无法与AWS负载均衡器正常工作。
它随后使用了使节解决方法:
如何使用Envoy在AWS上负载均衡gRPC
那么这里的解决方案是什么?我们决定使用第三方软件进行负载平衡。在这种情况下,我们使用了Envoy(用于AWS负载均衡器第7层)。这是Lyft创建的开源软件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。