EnvoyFilter
Terminology
Reference
- Host: 네트워크 통신이 가능한 Entity로 Envoy 문서에서는 하나의 논리적 네트워크 애플리케이션을 의미합니다.
- Downstream: Envoy에 요청을 보내고 응답을 받는 host입니다.
- Upstream: Envoy로부터 요청을 받고 응답을 보내는 host입니다.
- Listener: downstream에 연결될 수 있는 네임드 네트워크 위치입니다. e.g., port, unix domain socket
- Cluster: Envoy에 연결되는 논리적으로 유사한 upstream host 그룹입니다.
- Mesh: 일관된 네트워크 topology를 제공하기 위해 조정되는 호스트 그룹으로 Envoy 문서에서는 Envoy proxy 그룹입니다.
- Runtime configuration: 실시간으로 변경가능한 설정입니다.
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]'