1.19. 확장
WebAssembly 확장으로 Red Hat OpenShift Service Mesh 프록시에 새 기능을 직접 추가하여, 애플리케이션에서 더 일반적인 기능을 이동하고 WebAssembly 바이트 코드로 컴파일되는 단일 언어로 구현할 수 있습니다.
1.19.1. WebAssembly 확장
WebAssembly 모듈은 프록시를 포함한 여러 플랫폼에서 실행될 수 있으며 광범위한 언어 지원, 신속한 실행 및 샌드박스 기반 보안 모델을 제공합니다.
확장 기능
Red Hat OpenShift Service Mesh 확장은 Envoy HTTP 필터이며 다양한 기능을 제공합니다.
- 요청 및 응답의 본문과 헤더 조정
- 인증 또는 정책 검사와 같이 요청 경로에 없는 서비스에 대한 대역 외 HTTP 요청
- 필터가 서로 통신할 수 있는 사이드 채널 데이터 스토리지 및 대기열
Red Hat OpenShift Service Mesh 확장을 작성하는 데는 두 가지 부분이 있습니다. proxy-wasm API를 공개하는 SDK를 사용하여 확장을 작성하고, 이를 WebAssembly 모듈로 컴파일한 다음 컨테이너로 패키징해야 합니다.
지원되는 언어
WebAssembly 바이트 코드에 컴파일된 모든 언어를 사용하여 Red Hat OpenShift Service Mesh 확장을 작성할 수 있지만, 다음 언어에는 proxy-wasm API를 공개하는 기존 SDK가 있어 직접 사용할 수 있습니다.
언어 | 유지 관리자 | 리포지터리 |
---|---|---|
AssemblyScript | solo.io | |
C++ | proxy-wasm 팀(Istio 커뮤니티) | |
Go | tetrate.io | |
Rust | proxy-wasm 팀(Istio 커뮤니티) |
1.19.1.1. 컨테이너 형식
컨테이너 이미지를 유효한 확장 이미지로 만들려면 컨테이너 파일 시스템의 루트에 WebAssembly 모듈의 바이트 코드가 포함된 .wasm
파일과 manifest.yaml
파일이 있어야 합니다.
manifest.yaml
schemaVersion: 1 name: <your-extension> description: <description> version: 1.0.0 phase: PreAuthZ priority: 100 module: extension.wasm
필드 | 설명 |
---|---|
schemaVersion |
매니페스트 스키마 버전 지정에 사용됩니다. 현재 가능한 값은 |
name | 해당 확장의 이름입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다. |
description | 해당 확장의 설명입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다. |
version | 해당 확장의 버전입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다. |
phase | 해당 확장의 기본 실행 단계입니다. 이 필드는 필수 항목입니다. |
priority | 해당 확장의 기본 우선순위입니다. 이 필드는 필수 항목입니다. |
module | 컨테이너 파일 시스템의 루트에서 WebAssembly 모듈에 대한 상대적 경로입니다. 이 필드는 필수 항목입니다. |
1.19.1.2. Rust 확장 예
Rust SDK를 사용하여 빌드된 전체 예제는 header-append-filter를 참조하십시오. 확장의 config
필드에서 가져온 이름과 값을 사용하여 HTTP 응답에 하나 이상의 헤더를 추가하는 간단한 필터입니다. 아래 코드 조각에서 샘플 구성을 참조하십시오.
1.19.1.3. 확장 배포
Red Hat OpenShift Service Mesh 확장은 ServiceMeshExtension
리소스를 사용하여 활성화할 수 있습니다. 이 예제에서 istio-system
은 컨트롤 플레인 프로젝트의 이름입니다.
절차
다음 예제 리소스를 만듭니다.
ServiceMeshExtension 리소스 extensions.yaml의 예
apiVersion: maistra.io/v1 kind: ServiceMeshExtension metadata: name: header-append namespace: istio-system spec: workloadSelector: labels: app: httpbin config: first-header: some-value another-header: another-value image: quay.io/maistra-dev/header-append-filter:2.1 phase: PostAuthZ priority: 100
다음 명령을 사용하여
extensions.yaml
파일을 적용합니다.$ oc apply -f extension.yaml
필드 | 설명 |
---|---|
metadata.namespace |
|
spec.workloadSelector |
|
spec.config | 이는 확장에 전달되는 구조화된 필드이며, 의미 체계는 배포 중인 확장 기능에 따라 달라집니다. |
spec.image | 확장자가 있는 이미지를 가리키는 컨테이너 이미지 URI입니다. |
spec.phase |
이 필드의 기본값은 확장의 |
spec.priority |
동일한 |