监听器简介

查看本文大纲

Envoy 中的 Listener 是定义如何接收入站连接的基础组件,它决定了 Envoy 如何处理入站数据流。Listener 是配置的核心部分,可以高度自定义以满足各种网络和应用需求。本文将详细介绍 Envoy 中的 Listener 组件,其功能和如何配置它们。

Listener 的功能

在 Envoy 中,Listener 负责监听网络端口上的入站连接。每个 Listener 可以配置一系列的过滤器链(Filter Chains),这些过滤器链定义了对通过该 Listener 的数据进行处理的规则。这种架构提供了处理各种网络协议的灵活性,使得 Envoy 可以用作 HTTP/HTTPS 服务、TCP 代理,甚至是更复杂的用例如 MongoDB 或 DynamoDB 代理。

image
监听器连接了下游主机

主要特性

Envoy 的 Listener 配置具有以下主要特性:

  • 多协议支持: Listener 可以配置为处理多种协议,包括 TCP 和 HTTP。对于 HTTP Listener,Envoy 使用 HTTP 连接管理器过滤器来详细控制 HTTP 协议的行为。

  • 过滤器链: Listener 可以配置一个或多个过滤器链,每个链根据特定条件(如安全传输层属性)选择适用的过滤器配置。这使得可以在同一个端口上处理多种类型的流量。

  • 安全特性: Listener 支持 TLS 加密,包括自动的 TLS 协商以及多种证书管理功能,确保数据传输的安全。

  • 高级路由功能: 通过整合 HTTP 连接管理器,Listener 可以执行复杂的路由决策、重定向、重写和增强的负载均衡。

配置示例

以下是一个基础的 Envoy Listener 配置示例,它定义了一个监听端口 80 的 HTTP Listener,并配置了一个基本的 HTTP 连接管理器过滤器:

static_resources:
  listeners:
  - name: main_listener
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: service_cluster }
          http_filters:
          - name: envoy.filters.http.router

动态监听功能

Envoy 支持动态监听器配置,允许运行时添加、修改或删除 Listener 而不需要重启代理。这通过 Listener Discovery Service (LDS) 实现,是 xDS API 的一部分,使得 Listener 配置可以从远程管理服务动态获取。

最后更新于 2024/11/27