环境:使用的是 AWS 的 EKS 做集群管理,安装的 Kubernetes 1.8 和 istio 1.8
场景:想要部署两个 LB,分别对外网和对 VPC 内部的请求做控制。对外网使用 ALB 提供 HTTP 的访问,对 VPC 内部使用 NLB 提供 gRpc 访问。
一开始的处理方式: 因为之前已经通过 istio + ALB 的方式对外提供了 HTTP 访问了,就想着在原来的 istio-ingressgateway pod 的基础上再开一个新端口(用于 gRpc 对外通信用),然后再部署一个新的 istio-ingressgateway service(暂且叫 internal svc),再通过 NLB 对外暴露 gRpc 访问,
即一个 istio-ingressgateway pod 被两个不同的 istio-ingressgateway service 所 selected 。
遇到的问题: 业务服务的 Gateway 、VirtualService 、DestinationRule 都是针对这个 internal svc 做的配置,处理请求的端口也和另一个 service 不一样,然后发现这个 internal svc 可以处理 HTTP 请求,但是处理不了 gRPC 请求。查过 envoy 的日志,发现 gRpc 请求都进不来。
解决方案: 部署一个新的 istio-ingressgateway pod(暂且叫 internal pod),然后把之前 internal svc 和相关业务服务的配置都指向这个新的 internal pod 后,端口什么的也没改,就能处理 gRPC 请求了。
疑惑的点: 在同一个 istio-ingressgateway pod 上套的两个不同 istio service,使用两个不同的 LB 对外暴露,对使用 istio-ingressgateway pod 的端口都做了区分,按理说应该是没什么影响才对,但是却无法处理这两种协议的请求,但是当分别使用两套 istio pod + service 就可以了
google 和 StackOverflow 都搜过,好像没看到有人遇到这种场景,特地请教下各位大佬。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.