Gateway 和 Virtual Service 在 Istio 中有不同的作用和位置。
Gateway 是一种将外部流量引入到 Istio 网格中的入口,类似于传统网络中的负载均衡器或 API 网关。与 Virtual Service 不同,Gateway 通常只与外部服务交互,而不是直接与内部服务通信。因此,Istio Gateway 只需要支持 HTTP/TCP/UDP 等协议转发功能即可,不需要实现复杂的流量控制和安全策略。因此,在 Gateway 上不需要注入 Sidecar。
Virtual Service 则是在 Istio 内部对应用程序进行流量路由和策略控制的机制。当 Virtual Service 将请求路由到应用程序时,Istio Sidecar Envoy 将拦截该请求并执行各种任务(例如故障注入、限速、重试等)。因此,在 Virtual Service 上必须注入 Sidecar 以便 Envoy 可以监视和处理进出应用程序 Pod 的流量。
综上所述,Gateway 和 Virtual Service 在 Istio 中扮演了不同的角色,并且它们的工作方式也不相同。因此,在使用 Virtual Service 时需要注入 Sidecar,但在 Gateway 上则无需注入 Sidecar。