업그레이드 문제
업그레이드 문제 (Upgrade Problems)
Istio 업그레이드 중 발생할 수 있는 일반적인 문제, 특히 EnvoyFilter 마이그레이션 관련 문제를 해결하는 방법을 배워요. 다양한 EnvoyFilter 사용 사례를 일급 Istio API로 대체하는 방법을 다뤄요.
출처: Istio 문서
본문
EnvoyFilter 마이그레이션
EnvoyFilter는 Istio xDS 구성 생성의 구현 세부 사항과 밀접하게 결합된 알파 API예요. EnvoyFilter 알파 API의 프로덕션 사용은 Istio의 컨트롤 또는 데이터 플레인을 업그레이드하는 동안 신중하게 관리되어야 해요. 많은 경우 EnvoyFilter는 업그레이드 위험이 훨씬 낮은 Istio 일급 API로 대체될 수 있어요.
메트릭 커스터마이즈에 Telemetry API 사용하기
Prometheus 메트릭 생성을 커스터마이즈하기 위한 IstioOperator 사용은 Telemetry API로 대체됐어요. IstioOperator가 메트릭 필터 구성을 변경하기 위해 템플릿 EnvoyFilter에 의존하기 때문이에요. 두 방법은 호환되지 않으며, Telemetry API는 EnvoyFilter나 IstioOperator 메트릭 커스터마이즈 구성과 함께 작동하지 않는다는 점을 기억하세요.
예를 들어 다음 IstioOperator 구성은 destination_port 태그를 추가해요.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
telemetry:
v2:
prometheus:
configOverride:
inboundSidecar:
metrics:
- name: requests_total
dimensions:
destination_port: string(destination.port)
다음 Telemetry 구성이 위를 대체해요.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: namespace-metrics
spec:
metrics:
- providers:
- name: prometheus
overrides:
- match:
metric: REQUEST_COUNT
mode: SERVER
tagOverrides:
destination_port:
value: "string(destination.port)"
Wasm 데이터 플레인 확장성에 TrafficExtension API 사용하기
Wasm 필터를 주입하기 위한 EnvoyFilter 사용은 TrafficExtension API로 대체됐어요. TrafficExtension API는 아티팩트 레지스트리, URL 또는 로컬 파일에서 플러그인을 동적으로 로드할 수 있게 해줘요. "Null" 플러그인 런타임은 더 이상 Wasm 코드 배포에 권장되는 옵션이 아니에요.
신뢰할 수 있는 홉 수 설정에 게이트웨이 토폴로지 사용하기
HTTP 연결 관리자에서 신뢰할 수 있는 홉 수를 구성하기 위한 EnvoyFilter 사용은 ProxyConfig의 gatewayTopology 필드로 대체됐어요. 예를 들어 다음 EnvoyFilter 구성은 파드의 어노테이션이나 메시 기본값을 사용해야 해요. 다음 대신에:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ingressgateway-redirect-config
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
patch:
operation: MERGE
value:
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
xff_num_trusted_hops: 1
workloadSelector:
labels:
istio: ingress-gateway
동일한 기능의 ingress gateway 파드 프록시 구성 어노테이션을 사용하세요.
metadata:
annotations:
"proxy.istio.io/config": '{"gatewayTopology" : { "numTrustedProxies": 1 }}'
ingress 게이트웨이에서 PROXY 프로토콜 활성화에 게이트웨이 토폴로지 사용하기
ingress 게이트웨이에서 PROXY 프로토콜을 활성화하기 위한 EnvoyFilter 사용은 ProxyConfig의 gatewayTopology 필드로 대체됐어요. 예를 들어 다음 EnvoyFilter 구성은 파드의 어노테이션이나 메시 기본값을 사용해야 해요. 다음 대신에:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: proxy-protocol
spec:
configPatches:
- applyTo: LISTENER_FILTER
patch:
operation: INSERT_FIRST
value:
name: proxy_protocol
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.listener.proxy_protocol.v3.ProxyProtocol"
workloadSelector:
labels:
istio: ingress-gateway
동일한 기능의 ingress gateway 파드 프록시 구성 어노테이션을 사용하세요.
metadata:
annotations:
"proxy.istio.io/config": '{"gatewayTopology" : { "proxyProtocol": {} }}'
히스토그램 버킷 크기 커스터마이즈에 프록시 어노테이션 사용하기
히스토그램 메트릭의 버킷 크기를 구성하기 위한 EnvoyFilter와 실험적 bootstrap discovery service 사용은 프록시 어노테이션 sidecar.istio.io/statsHistogramBuckets로 대체됐어요. 예를 들어 다음 EnvoyFilter 구성은 파드의 어노테이션을 사용해야 해요. 다음 대신에:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: envoy-stats-1
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: BOOTSTRAP
patch:
operation: MERGE
value:
stats_config:
histogram_bucket_settings:
- match:
prefix: istiocustom
buckets: [1,5,50,500,5000,10000]
동일한 기능의 파드 어노테이션을 사용하세요.
metadata:
annotations:
"sidecar.istio.io/statsHistogramBuckets": '{"istiocustom":[1,5,50,500,5000,10000]}'