如何解决在 gcp 中设置 grpc-web -> 特使代理 -> 后端服务的最佳实践
我已经阅读了一些教程/示例,试图找出一种简单的方法来启动带有特使代理的 grpc 后端来路由网络流量。 我成功地在本地运行此架构以进行 e2e 通信。
我找到了官方文档 https://cloud.google.com/architecture/exposing-grpc-services-on-gke-using-envoy-proxy。但我认为我现在不需要负载平衡器。
我的目标:
- 运行 Grpc 后端服务器以支持 iOS/Android 应用
- 运行 Envoy 代理以支持 Web
是否有任何现有的教程可以为 grpc 网络路由部署后端服务器和 Envoy 代理?
解决方法
1.gRPC 框架使移动应用程序可以像本地对象一样直接调用后端服务上的方法。您可以使用 gRPC 提高移动应用的带宽效率,并减少您的应用与在 Google Cloud Platform 上运行的后端服务之间的延迟。
使用 Envoy 代理设置 grpc 后端我们应该使用网络负载平衡,网络负载平衡接受来自互联网的传入请求(例如,来自移动客户端或公司外部的服务消费者)。网络负载平衡执行以下任务 负载平衡器传入连接到池中的工作节点。流量被转发到特使 Kubernetes 服务,该服务在集群中的所有工作节点上公开。 Kubernetes 网络代理将这些连接转发到运行 Envoy 的 pod。 对集群中的工作节点执行 HTTP 运行状况检查。 Envoy 执行以下任务: 终止 SSL/TLS 连接。 通过查询内部集群 DNS 服务来发现运行 gRPC 服务的 Pod。 将流量路由和负载平衡到 gRPC 服务 pod。 根据 gRPC Health Checking Protocol 对 gRPC 服务进行健康检查。 使用网络负载平衡公开端点以进行运行状况检查。
gRPC 服务(echo-grpc 和 reverse-grpc)作为 Kubernetes 无头服务公开。这意味着没有分配 clusterIP 地址,并且 Kubernetes 网络代理不会将流量负载平衡到 pod。相反,在集群 DNS 服务中创建了一个包含 pod IP 地址的 DNS A 记录。 Envoy 从这个 DNS 条目中发现 pod IP 地址,并根据 Envoy 中配置的策略在它们之间进行负载平衡。
部署特使:
创建一个 Kubernetes ConfigMap 来存储 Envoy 配置文件(envoy.yaml) kubectl apply -f k8s/envoy-configmap.yaml
为 Envoy 创建 Kubernetes 部署: kubectl apply -f k8s/envoy-deployment.yaml
验证两个特使 Pod 是否正在运行: kubectl 获取部署特使
如需进一步阅读,请点击以下链接: https://cloud.google.com/architecture/exposing-grpc-services-on-gke-using-envoy-proxy
有关为移动应用配置 Grpc 后端服务器的更多信息,请参阅以下链接: https://cloud.google.com/architecture/mobile-compute-engine-grpc