Skip to main content

EnvoyFilter


EnvoyFilter

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: <name>
namespace: <namespace>
spec:
workloadSelector:
labels:
<key>: <value>
configPatches:
[]
# - applyTo:
# match:
# patch:
# 패치가 적용되는 우선순위는 namespace 기준으로 루트 네임스페이스 -> 개별 네임스페이스
# 순으로 적용됩니다.
# 같은 namespace에 여러 EnvoyFilter가 존재하는 경우, 우선순위는 priority 기준으로
# 오름차순으로 적용됩니다.
# 같은 EnvoyFilter에 여러 패치가 존재하는 경우, 우선순위는 패치의 순서로 적용됩니다.
priority: 0 # default
  • workloadSelector
    • 설정하면 동일한 namespace 내에서 선택된 Workload의 Envoy에 필터가 적용됩니다
    • 설정하지 않으면 동일한 namespace 내의 모든 Workload의 Envoy에 필터가 적용됩니다
    • namespace가 MeshConfig의 rootNamespace(default: istio-system)와 같은 경우 namespace에 관계없이 적용됩니다
  • configPatches
    • applyTo
      • LISTENER
      • FILTER_CHAIN
      • NETWORK_FILTER
      • HTTP_FILTER
      • ROUTE_CONFIGURATION
      • VIRTUAL_HOST
      • HTTP_ROUTE
      • CLUSTER
      • EXTENSION_CONFIG
      • BOOTSTRAP
      • LISTENER_FILTER
    • match
      • context
        • ANY
        • SIDECAR_INBOUND
        • SIDECAR_OUTBOUND
        • GATEWAY
    • patch
      • operation
        • MERGE
        • ADD
        • REMOVE
        • INSERT_BEFORE
        • INSERT_AFTER
        • INSERT_FIRST
        • REPLACE

Debug

https://jimmysong.io/en/blog/sidecar-injection-iptables-and-traffic-routing/

그림에서 15006 포트로 들어가는 트래픽이 SIDECAR_INBOUND 트래픽이고, 15001 포트로 나가는 트래픽이 SIDECAR_OUTBOUND 트래픽입니다.

따라서 EnvoyFilter 적용이 잘 되었는지 확인하기 위해 아래 명령어를 사용하여 설정된 내용을 확인하면 됩니다.

istioctl proxy-status listener -n <namespace> <pod> --port 15006 -o yaml | yq '.[0]'
name: virtualInbound
listenerFilters: []
filterChains:
- name:
filterChainMatch:
filters:
- name:
typedConfig:
"@type":
istioctl proxy-status listener -n <namespace> <pod> --port 15001 -o yaml | yq '.[0]'