集成 Envoy Gateway 作为 Istio 服务网格中的入口网关
内容提要
本文介绍了如何将Envoy Gateway作为Istio服务网格的入口网关集成,增强应用的安全性和可访问性。
延伸解读
为何选择 Envoy Gateway 而非 Istio 入口网关
文章建议在安装 Istio 时避免启用入口网关,转而手动部署 Envoy Gateway。这是因为 Envoy Gateway 专注于将应用暴露给外部世界,并支持 OIDC 单点登录等高级功能,而 Istio 的入口网关更侧重于网格内部通信。两者结合可兼顾服务网格的安全性与边缘网关的灵活性,但需要额外配置 sidecar 注入和路由类型,增加了部署复杂度。
关键配置:sidecar 注入与流量拦截
为确保 Envoy Gateway 与 Istio 数据平面安全通信,需将 Envoy Gateway 的命名空间标记为 istio-injection=enabled,使网关 Pod 注入 Istio sidecar。同时,通过 EnvoyProxy 配置 traffic.sidecar.istio.io/includeInboundPorts: "" 来阻止 sidecar 拦截进入网关的流量,并将路由类型设为 Service。这些步骤是集成成功的关键,否则可能导致流量路由错误或通信失败。
安全加固:严格 mTLS 与 TLS 终止
文章演示了如何启用严格 mTLS(PeerAuthentication 设置 mode: STRICT)来加密网格内部通信,并为入口网关配置 TLS 终止。通过创建自签名根证书和服务器证书,将证书存储为 Kubernetes Secret,并在 Gateway 监听器中引用,最终实现 HTTPS 访问。这增强了边缘到网格的安全性,但需注意证书管理和轮换。
验证与测试:确保端到端连通性
部署测试应用 httpbin 并配置 HTTPRoute 后,文章通过 curl 命令验证了从外部经 Envoy Gateway 到网格内服务的请求。响应头中的 server: envoy 和 X-Envoy-External-Address 表明流量经过了 Envoy 代理。读者应关注网关负载均衡器 IP 的获取以及 Host 头匹配,这是排查路由问题的关键点。
Q&A
如何将 Envoy Gateway 集成到 Istio 服务网格中?
在安装 Istio 时避免启用入口网关,手动安装并配置 Envoy Gateway,并确保 Istio 将 Envoy sidecar 注入到网关 Pod 中。
Envoy Gateway 的主要功能是什么?
Envoy Gateway 旨在将应用程序暴露给外部世界,处理用户请求,并支持高级功能,如 OIDC 单点登录。
如何确保 Envoy Gateway 的安全通信?
确保 Envoy Gateway 的 sidecar 不拦截进入网关的流量,并启用严格的 mTLS 以增强安全性。
如何验证 Envoy Gateway 的配置是否成功?
通过 curl 命令发送测试请求,检查是否能正确接收到来自服务的响应。
在配置 Envoy Gateway 时需要注意哪些关键点?
需要手动安装 Envoy Gateway,确保 sidecar 注入,配置路由类型为 Service,并不拦截入站流量。
如何为 Envoy Gateway 启用 TLS?
创建服务签名的根证书和私钥,并在 Gateway 配置中引用这些证书以启用 TLS。