1.19.3. WasmPlugin API 참조
WasmPlugins API는 Istio 프록시에서 WebAssembly 필터를 통해 제공하는 기능을 확장하는 메커니즘을 제공합니다.
여러 WasmPlugins를 배포할 수 있습니다. 단계
및 우선 순위
설정은 Envoy의 필터 체인의 일부로 실행 순서( Envoy의 필터 체인의 일부로)를 결정하여 사용자 제공wasmPlugins와 Istio의 내부 필터 간 복잡한 상호 작용을 구성할 수 있습니다.
다음 예제에서 인증 필터는 OpenID 흐름을 구현하고 Authorization 헤더를 JSON 웹 토큰(JWT)으로 채웁니다. Istio 인증은 이 토큰을 사용하고 수신 게이트웨이에 배포합니다. ExsmPlugin 파일은 프록시 사이드카 파일 시스템에 있습니다. 필드 URL을 확인합니다
.
apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: openid-connect namespace: istio-ingress spec: selector: matchLabels: istio: ingressgateway url: file:///opt/filters/openid.wasm sha256: 1ef0c9a92b0420cf25f7fe5d481b231464bc88f486ca3b9c83ed5cc21d2f6210 phase: AUTHN pluginConfig: openid_server: authn openid_realm: ingress
다음은 동일한 예입니다. 그러나 이번에는 파일 시스템의 파일 대신 OCI(Open Container Initiative) 이미지가 사용됩니다. URL ,imagePullPolicy
,
imagePullSecret
필드를 기록해 둡니다.
apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: openid-connect namespace: istio-system spec: selector: matchLabels: istio: ingressgateway url: oci://private-registry:5000/openid-connect/openid:latest imagePullPolicy: IfNotPresent imagePullSecret: private-registry-pull-secret phase: AUTHN pluginConfig: openid_server: authn openid_realm: ingress
필드 | 유형 | 설명 | 필수 항목 |
---|---|---|---|
spec.selector | WorkloadSelector |
이 플러그인 구성을 적용해야 하는 특정 pod/VM 세트를 선택하는 데 사용되는 기준입니다. 생략하면 이 구성이 동일한 네임스페이스의 모든 워크로드 인스턴스에 적용됩니다. 구성 루트 네임스페이스에 Extras | 아니요 |
spec.url | 문자열 |
Exsm 모듈 또는 OCI 컨테이너의 URL입니다. 스키마가 없는 경우 기본값은 | 아니요 |
spec.sha256 | 문자열 |
wasm 모듈 또는 OCI 컨테이너를 확인하는 데 사용할 SHA256 체크섬입니다. | 아니요 |
spec.imagePullPolicy | PullPolicy |
OCI 이미지를 가져올 때 적용할 가져오기 동작입니다. SHA 대신 태그에서 이미지를 참조하는 경우에만 관련이 있습니다. | 아니요 |
spec.imagePullSecret | 문자열 |
OCI 이미지 가져오기에 사용할 자격 증명. 이미지를 가져올 때 레지스트리에 대한 인증을 위한 풀 시크릿이 포함된 | 아니요 |
spec.phase | PluginPhase |
필터 체인에서 이 | 아니요 |
spec.priority |
|
동일한 | 아니요 |
spec.pluginName | 문자열 | Envoy 구성에 사용되는 플러그인 이름입니다. 일부 와트m 모듈에는 이 값을 실행하기 위해 이 값을 사용해야 할 수 있습니다. | 아니요 |
spec.pluginConfig | struct | 플러그인에 전달될 구성입니다. | 아니요 |
spec.pluginConfig.verificationKey | 문자열 | 서명된 OCI 이미지 또는wasm 모듈의 서명을 확인하는 데 사용되는 공개 키입니다. PEM 형식으로 제공해야 합니다. | 아니요 |
WorkloadSelector
개체는 필터를 프록시에 적용할 수 있는지 확인하는 데 사용되는 기준을 지정합니다. 일치하는 기준에는 프록시와 연결된 메타데이터, pod/VM에 연결된 라벨과 같은 워크로드 인스턴스 정보 또는 초기 핸드셰이크 중 Istio에 제공하는 기타 정보가 포함됩니다. 여러 조건이 지정된 경우 워크로드 인스턴스를 선택하기 위해 모든 조건을 일치해야 합니다. 현재는 라벨 기반 선택 메커니즘만 지원됩니다.
필드 | 유형 | 설명 | 필수 항목 |
---|---|---|---|
matchLabels | map<string, string> | 정책을 적용해야 하는 특정 Pod/VM 세트를 나타내는 하나 이상의 레이블입니다. 레이블 검색 범위는 리소스가 있는 구성 네임스페이스로 제한됩니다. | 있음 |
PullPolicy
오브젝트는 OCI 이미지를 가져올 때 적용할 풀 동작을 지정합니다.
값 | 설명 |
---|---|
<empty> |
기본값은 latest 태그가 있는 OCI 이미지를 제외하고 |
IfNotPresent | 기존 버전의 이미지를 이전에 가져온 경우 이 버전이 사용됩니다. 이미지가 로컬에 없는 경우 최신 버전을 가져옵니다. |
Always | 이 플러그인을 적용할 때 항상 최신 버전의 이미지를 가져옵니다. |
구조체
는 동적으로 입력된 값에 매핑되는 필드로 구성된 구조화된 데이터 값을 나타냅니다.Represents a structured data value, consisting of fields which map to dynamically typed values. 일부 언어에서는 Struct가 네이티브 표현에 의해 지원될 수 있습니다. 예를 들어 JavaScript와 같은 스크립팅 언어에서 구조체는 개체로 표시됩니다.
필드 | 유형 | 설명 |
---|---|---|
필드 | map<string, Value> | 동적으로 입력된 값의 맵입니다. |
PluginPhase
는 플러그인이 삽입될 필터 체인의 단계를 지정합니다.
필드 | 설명 |
---|---|
<empty> | 컨트롤 플레인은 플러그인을 삽입할 위치를 결정합니다. 이는 일반적으로 라우터 바로 앞에 필터 체인의 끝에 있습니다. 플러그인이 다른 플러그인과 독립적인 경우 PluginPhase를 지정하지 마십시오. |
AUTHN | Istio 인증 필터 전에 플러그인을 삽입합니다. |
AUTHZ | Istio 권한 부여 필터 및 Istio 인증 필터 후에 플러그인을 삽입합니다. |
STATS | Istio 통계 필터 및 Istio 권한 부여 필터 후에 플러그인을 삽입합니다. |
1.19.3.1. 월 mPlugin
리소스 배포
wasmPlugin
리소스를 사용하여 Red Hat OpenShift Service Mesh 확장을 활성화할 수 있습니다. 이 예제에서 istio-system
은 Service Mesh Control Plane 프로젝트의 이름입니다. 다음 예제에서는 사용자를 인증하기 위해 OpenID Connect 흐름을 수행하는 openid-connect
필터를 생성합니다.
절차
다음 예제 리소스를 만듭니다.
plugin.yaml 예
apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: openid-connect namespace: istio-system spec: selector: matchLabels: istio: ingressgateway url: oci://private-registry:5000/openid-connect/openid:latest imagePullPolicy: IfNotPresent imagePullSecret: private-registry-pull-secret phase: AUTHN pluginConfig: openid_server: authn openid_realm: ingress
다음 명령을 사용하여
plugin.yaml
파일을 적용합니다.$ oc apply -f plugin.yaml