검색

1.19. 확장

download PDF

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가 있어 직접 사용할 수 있습니다.

표 1.12. 지원되는 언어
언어유지 관리자리포지터리

AssemblyScript

solo.io

solo-io/proxy-runtime

C++

proxy-wasm 팀(Istio 커뮤니티)

proxy-wasm/proxy-wasm-cpp-sdk

Go

tetrate.io

tetratelabs/proxy-wasm-go-sdk

Rust

proxy-wasm 팀(Istio 커뮤니티)

proxy-wasm/proxy-wasm-rust-sdk

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

표 1.13. manifest.yml에 대한 필드 참조
필드설명

schemaVersion

매니페스트 스키마 버전 지정에 사용됩니다. 현재 가능한 값은 1입니다.

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은 컨트롤 플레인 프로젝트의 이름입니다.

절차

  1. 다음 예제 리소스를 만듭니다.

    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

  2. 다음 명령을 사용하여 extensions.yaml 파일을 적용합니다.

    $ oc apply -f extension.yaml
표 1.14. ServiceMeshExtension 필드 참조
필드설명

metadata.namespace

ServiceMeshExtension 소스의metadata.namespace에는 특별한 의미가 있습니다. 컨트롤 플레인 네임스페이스와 같은 경우, 확장은 해당 workloadSelector와 일치하는 서비스 메시의 모든 워크로드에 적용됩니다. 다른 메시 네임스페이스에 배포하면 동일한 네임스페이스의 워크로드에만 적용됩니다.

spec.workloadSelector

spec.workloadSelector 필드는 Istio 게이트웨이 리소스spec.selector 필드와 동일한 의미가 있습니다. Pod 레이블을 기반으로 하는 워크로드와 일치합니다. workloadSelector를 지정하지 않으면 네임스페이스의 모든 워크로드에 확장이 적용됩니다.

spec.config

이는 확장에 전달되는 구조화된 필드이며, 의미 체계는 배포 중인 확장 기능에 따라 달라집니다.

spec.image

확장자가 있는 이미지를 가리키는 컨테이너 이미지 URI입니다.

spec.phase

이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다. 단계는 인증, 권한 부여, 지표 생성과 같은 기존 Istio 기능과 관련하여 필터 체인에서 확장이 삽입되는 위치를 결정합니다. 유효한 값: PreAuthN, PostAuthN, PreAuthZ, PostAuthZ, PreStats, PostStats. 이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다.

spec.priority

동일한 spec.phase이 있는 여러 확장이 동일한 워크로드 인스턴스에 적용되는 경우, spec.priority는 실행 순서를 결정합니다. 우선순위가 높은 확장이 먼저 실행됩니다. 이를 통해 상호 의존적인 확장을 허용합니다. 이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.