本文介绍了如何将 Envoy Gateway 作为 Istio 服务网格中的入口网关集成,增强应用的安全性和可访问性。
阅读原文请转到:https://jimmysong.io/blog/envoy-gateway-integration-istio-mesh/
Istio 提供了对入口网关的强大而灵活的支持,利用 Envoy 代理在其 sidecar 模式下运行。尽管 Istio 专注于管理集群内服务之间的通信,Envoy Gateway 旨在将应用程序暴露给外部世界,处理用户请求,并支持高级功能,如 OIDC 单点登录。通过结合 Istio 服务网格的功能和 Envoy Gateway 的高级网关功能,可以增强整体应用程序的可访问性和安全性。
下图显示了 Istio 网格中入口网关的流量路径。
下一个图表显示了在引入 Envoy Gateway 后,流量如何从 Istio 网格的边缘流入内部网络。
准备 Envoy Gateway 与 Istio 之间的互操作性
要将 Envoy Gateway 用作 Istio 的入口网关,请考虑以下关键点:
• 在 Istio 安装期间避免启用入口网关。我们将手动安装并配置 Envoy Gateway 作为入口网关。
• 由于 Istio 和 Envoy Gateway 都使用 Envoy 作为代理,确保 Istio 将 Envoy sidecar 注入到 Envoy Gateway 的网关 Pod 中,以允许与 Istio 的数据平面安全通信。
• 配置由 Envoy Gateway 创建的 Envoy 代理的路由类型为
Service
而不是Endpoint
,以确保正确路由。
按照 快速启动文档 安装 Envoy Gateway。标记 Envoy Gateway 的命名空间以确保数据平面获得 Istio sidecar 注入:
kubectl label namespace envoy-gateway-system --overwrite=true istio-injection=enabled
配置 Envoy Gateway 的 sidecar 以不拦截进入网关的流量。注入的 sidecar 确保 Envoy Gateway 的组件及其创建的代理被包含在 Istio 网格中,并安装正确的证书以进行安全通信。
control-plane-tls.yaml
spec:
ports:
- port: 18000
appProtocol: tls
应用补丁:
kubectl patch service -n envoy-gateway-system envoy-gateway --type strategic --patch-file control-plane-tls.yaml
配置 Envoy Gateway 不拦截入站流量:
teg-sidecars-no-inbound.yaml
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: data-plane-sidecars
namespace: en