掌握 Envoy,轻松实现 K8S Pod 流量管控
2023-08-10 18:06:59
Envoy:Kubernetes 服务网格的数据转发面
简介
在现代云原生环境中,服务网格已成为微服务架构不可或缺的一部分。它们提供流量管理、服务发现和熔断限流等关键功能,简化了 Kubernetes 集群中微服务的管理和维护。
Envoy:数据转发面的领军者
Envoy 是一种高性能、开源的 L7 边缘代理,广泛应用于服务网格的数据转发面。它具有以下核心功能:
- 流量管理: 路由、负载均衡、重试和熔断等。
- 服务发现: 从服务注册中心获取服务实例信息,并将其缓存起来。
- 安全性: 加密、身份验证和授权。
Envoy 接管 Pod 流量
Envoy 通过以下步骤接管 Pod 流量:
- Istiod 将 Envoy 配置下发给 Envoy。
- Envoy 在 Pod 中创建代理。
- Envoy 代理向 Kubernetes 集群的服务注册中心注册自身。
- 应用程序请求首先到达 Envoy 代理。
- Envoy 代理根据请求信息转发请求。
- Pod 处理请求并返回响应。
- Envoy 代理将响应返回给应用程序。
实战指南
以下示例演示如何使用 Envoy 接管 Pod 流量:
准备工作
- 安装 Kubernetes 集群。
- 安装 Istio。
- 部署测试应用程序。
创建 Envoy 配置
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: envoy-filter
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/google.protobuf.Empty
部署 Envoy 配置
kubectl apply -f envoy-filter.yaml
验证 Envoy 接管流量
kubectl exec -it <pod-name> -- curl -v localhost:8080
如果看到类似以下的输出,则表示 Envoy 已接管流量:
* Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 12
< content-type: text/plain
< date: Thu, 01 Jan 1970 00:00:00 GMT
< server: envoy
<
hello world
结论
Envoy 是一种强大的工具,可用于接管 Pod 流量并增强 Kubernetes 服务网格的功能。通过遵循本文中的步骤,您可以轻松地部署和配置 Envoy,从而充分利用它的优势。
常见问题解答
-
为什么需要 Envoy 接管流量?
Envoy 提供流量管理、服务发现和安全功能,可以简化微服务架构的管理和维护。 -
Envoy 如何接管流量?
Envoy 通过在 Pod 中创建代理并向服务注册中心注册自身来接管流量。 -
如何验证 Envoy 是否已接管流量?
使用kubectl exec -it <pod-name> -- curl -v localhost:8080
命令并检查 Envoy 服务器的响应。 -
Envoy 与 Istio 的关系是什么?
Envoy 是 Istio 服务网格的数据转发面,而 Istio 负责控制平面功能,例如流量管理和服务发现。 -
Envoy 有哪些替代方案?
Contour 和 HAProxy 等替代方案可用于作为服务网格的数据转发面,但 Envoy 因其性能、功能和社区支持而脱颖而出。