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
그림에서 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]'