首页 > 解决方案 > 在 gRPC 服务前使用 Envoy 代理时出现 SSL 错误 ERR_CERT_AUTHORITY_INVALID

问题描述

我已经开发了一个部署在 Kubernetes 集群上的 gRPC 服务,并且我正在使用来自 nodejs 客户端的 grpc-web 来连接它。这意味着我需要在服务前使用代理。在没有 SSL 的情况下,这个 envoy 配置一切正常,但现在我需要保护连接以使其为生产做好准备。

这是我经历的步骤

1) 生成密钥,在使用本教程simulation.terrarium.ai询问时输入我的域

2) 编辑 Dockerfile 以添加密钥

FROM envoyproxy/envoy:latest

COPY envoy-proxy-tls.yaml /etc/envoy.yaml

EXPOSE 9091

ADD ./certs/simulation.terrarium.ai.crt /etc/simulation.terrarium.ai.crt
ADD ./certs/simulation.terrarium.ai.key /etc/simulation.terrarium.ai.key
ADD ./certs/rootCA.crt /etc/rootCA.crt

WORKDIR /etc/envoy
CMD /usr/local/bin/envoy -c /etc/envoy.yaml

3) 更新了 envoy 配置以在端口上使用 tls

通过突出显示阅读此配置文件要容易得多,所以这里是它的要点。

发生了什么事
我这样调用我的服务

var simService = new SimulationServiceClient(ServerAddress, null, null);

var request = new CreateSpectatorRequest();
request.setApi(API_VERSION);
request.setId(this.clientId);
var metadata = {};
var stream = simService.createSpectator(request, metadata);
stream.on("data", this.onData);
stream.on("status", this.onStatus);
stream.on("end", this.onEnd);

此时我的 grpc 服务和 envoy 代理在 kubernetes 集群中运行,与添加 TLS 之前的方式相同。当我尝试从浏览器连接时,出现此错误:

https://simulation.terrarium.ai:9091/v1.SimulationService/SubscribeSpectatorToRegion net::ERR_CERT_AUTHORITY_INVALID

我很难调试这个,因为我不确定错误可能发生在哪里。任何帮助,将不胜感激!

标签: sslkubernetesgrpcgoogle-kubernetes-engineenvoyproxy

解决方案


我正在使用 GKE,刚刚发现这个链接显示了如何使用 Google Managed SSL Certificate

它非常适合我!抱歉,我无法完全解决这个问题,但这是一种更简单的选择,因为他们还处理证书的自动化。


推荐阅读