
emissaryingress/emissaryEmissary-ingress 是一个基于 Envoy 代理的开源 Kubernetes 入口控制器和 API 网关,旨在简化 Kubernetes 集群的入站流量管理。它通过 Kubernetes 原生资源(如 Ingress、CustomResourceDefinition)提供声明式配置,支持动态流量路由、服务发现和高级流量管理策略,适用于微服务架构下的复杂通信场景。
Mapping、Host、TLSContext)实现动态配置Emissary-ingress 主要在 Kubernetes 集群中部署,推荐使用 Helm 进行安装:
bashhelm repo add datawire [***] helm repo update
bashhelm install emissary-ingress datawire/emissary-ingress \ --namespace emissary-system \ --create-namespace \ --set service.type=Load*** # 或 NodePort/ClusterIP,根据环境选择
bashkubectl get pods -n emissary-system
yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: basic-ingress annotations: kubernetes.io/ingress.class: emissary # 指定使用 Emissary 控制器 spec: rules: - host: example.com http: paths: - path: /service1 pathType: Prefix backend: service: name: service1 port: number: 80
使用 Mapping 自定义资源实现更复杂的路由规则:
yamlapiVersion: getambassador.io/v3alpha1 kind: Mapping metadata: name: service2-mapping spec: prefix: /v2/service2/ service: service2:8080 host: api.example.com headers: x-api-version: v2 # 仅匹配包含此请求头的流量 rewrite: / # 将前缀 /v2/service2/ 重写为 / timeout_ms: 5000 # 设置请求超时为 5 秒
Emissary-ingress 容器支持以下关键环境变量进行配置:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
EMISSARY_LOG_LEVEL | 日志级别(debug、info、warn、error) | info |
ENVOY_ADMIN_PORT | Envoy 管理接口端口 | 8001 |
AMBASSADOR_ID | 用于标识多个 Emissary 实例的 ID | default |
STATSD_HOST | StatsD 服务器地址(用于指标收集) | 未设置 |
STATSD_PORT | StatsD 服务器端口 | 8125 |
TLS_MIN_VERSION | 最低 TLS 版本(如 TLSv1.2) | TLSv1.2 |
通过 EnvoyFilter 自定义资源可扩展 Envoy 配置(需熟悉 Envoy 配置结构):
yamlapiVersion: getambassador.io/v3alpha1 kind: EnvoyFilter metadata: name: custom-envoy-config spec: workloadSelector: labels: service: emissary-ingress configPatches: - applyTo: HTTP_FILTER match: context: SIDECAR_INBOUND listener: portNumber: 8080 filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.router" patch: operation: INSERT_BEFORE value: name: "envoy.filters.http.lua" typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua" inlineCode: | function envoy_on_request(request_handle) -- 自定义 Lua 脚本逻辑 end
Mapping CRD 而非标准 Ingress 资源配置,以利用高级特性manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务