返回

掌握 Envoy,轻松实现 K8S Pod 流量管控

后端

Envoy:Kubernetes 服务网格的数据转发面

简介

在现代云原生环境中,服务网格已成为微服务架构不可或缺的一部分。它们提供流量管理、服务发现和熔断限流等关键功能,简化了 Kubernetes 集群中微服务的管理和维护。

Envoy:数据转发面的领军者

Envoy 是一种高性能、开源的 L7 边缘代理,广泛应用于服务网格的数据转发面。它具有以下核心功能:

  • 流量管理: 路由、负载均衡、重试和熔断等。
  • 服务发现: 从服务注册中心获取服务实例信息,并将其缓存起来。
  • 安全性: 加密、身份验证和授权。

Envoy 接管 Pod 流量

Envoy 通过以下步骤接管 Pod 流量:

  1. Istiod 将 Envoy 配置下发给 Envoy。
  2. Envoy 在 Pod 中创建代理。
  3. Envoy 代理向 Kubernetes 集群的服务注册中心注册自身。
  4. 应用程序请求首先到达 Envoy 代理。
  5. Envoy 代理根据请求信息转发请求。
  6. Pod 处理请求并返回响应。
  7. 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,从而充分利用它的优势。

常见问题解答

  1. 为什么需要 Envoy 接管流量?
    Envoy 提供流量管理、服务发现和安全功能,可以简化微服务架构的管理和维护。

  2. Envoy 如何接管流量?
    Envoy 通过在 Pod 中创建代理并向服务注册中心注册自身来接管流量。

  3. 如何验证 Envoy 是否已接管流量?
    使用 kubectl exec -it <pod-name> -- curl -v localhost:8080 命令并检查 Envoy 服务器的响应。

  4. Envoy 与 Istio 的关系是什么?
    Envoy 是 Istio 服务网格的数据转发面,而 Istio 负责控制平面功能,例如流量管理和服务发现。

  5. Envoy 有哪些替代方案?
    Contour 和 HAProxy 等替代方案可用于作为服务网格的数据转发面,但 Envoy 因其性能、功能和社区支持而脱颖而出。