Apigee Edge로 Envoy용 Apigee 어댑터 사용

Apigee Edge 문서입니다.
Apigee X 문서로 이동
정보

이 예시에서는 Apigee Edge와 함께 Envoy용 Apigee 어댑터를 사용하는 방법을 보여줍니다.

기본 요건

시작하기 전에

개요

이 예시에서는 퍼블릭 클라우드용 Apigee Edge와 함께 Envoy용 Apigee 어댑터를 사용하는 방법을 설명합니다. API 프록시 호출은 네이티브 애플리케이션으로 실행되는 Envoy를 통해 전달되며 Edge는 Envoy용 Apigee 원격 서비스를 통해 API 관리 서비스를 제공합니다.

다음 그림은 Apigee Edge 통합의 기본 아키텍처를 보여줍니다.

Apigee Edge Cloud와 통신하기 위해 기본적으로 실행되는 Envoy 어댑터(관리 영역, 런타임 영역, GCP 서비스 등)의 대략적인 보기

Envoy 프록시 및 원격 서비스가 로컬에서 실행 중입니다. Envoy는 대상 서비스와 주고받는 API 트래픽을 처리하고 원격 서비스와 통신합니다. 또한 원격 서비스는 Apigee Edge Cloud와 통신하여 API 제품 및 프록시 정보를 검색합니다.

Apigee Edge 프로비저닝

이 단계에서는 원격 서비스 CLI를 사용하여 Envoy용 Apigee 어댑터 애셋을 Apigee Edge에 프로비저닝합니다. 프로비저닝 명령어는 API 프록시를 Apigee Edge에 배포하고, Apigee에 인증서를 설정하고, 원격 서비스가 시스템에서 Apigee로 안전하게 연결하는 데 사용할 사용자 인증 정보를 생성합니다.

  1. $CLI_HOME 디렉터리로 이동합니다.
    cd $CLI_HOME
  2. 다음의 환경 변수를 만듭니다. 이러한 변수는 프로비저닝 스크립트의 매개변수로 사용됩니다.
    export ORG=organization_name
    export ENV=environment_name
    export USER=your_apigee_username
    export PASSWORD=your_apigee_password

    각 항목의 의미는 다음과 같습니다.

    변수 설명
    organization_name Apigee 조직의 이름입니다.
    environment_name 조직의 환경 이름입니다.
    your_apigee_username Apigee 계정 사용자 이름입니다. 일반적으로 사용자 이름은 이메일 주소입니다.
    your_apigee_password Apigee 비밀번호입니다.
  3. 다음 명령어를 실행하여 Apigee Edge에 원격 서비스 프록시를 프로비저닝합니다.
    ./apigee-remote-service-cli provision --legacy --mfa $MFA --username $USER --password $PASSWORD \
        --organization $ORG --environment $ENV > config.yaml
  4. config.yaml 파일의 콘텐츠를 확인합니다. 다음과 같이 나타납니다.
    # Configuration for apigee-remote-service-envoy (platform: SaaS)
    # generated by apigee-remote-service-cli provision on 2020-08-26 09:43:41
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://my-username-test.apigee.net/remote-service
          org_name: my-org
          env_name: my-env
          key: f7e09c32f827cab87b8ce43842ed8467ffd2c58e6f795241e38fe7b1aec7664
          secret: 1cb5cca00dfb433cb80b32837451fce4bf694633cddbb73d704517e12b35e75

    키 및 보안 비밀 값은 원격 서비스 프록시에서 Apigee Edge로의 요청을 검증하는 데 사용됩니다.

Envoy용 Apigee 원격 서비스 실행

원격 서비스를 네이티브 바이너리로 또는 Docker에서 실행할 수 있습니다.

기본적으로 서비스 실행

프로비저닝 명령어로 출력된 구성 파일로 서비스 바이너리를 실행합니다.

$CLI_HOME/apigee-remote-service-envoy -c config_file_path/config.yaml

Docker에서 서비스 실행

Docker 이미지는 출시 태그와 함께 게시됩니다. 설치하려면 최신 버전을 사용합니다. 선택할 수 있는 이미지 변형에는 다음 세 가지가 있습니다.

변형 이미지
Google distroless gcr.io/distroless/base
Ubuntu google/apigee-envoy-adapter:v1.1.0-ubuntu
Boring Crypto를 포함한 Ubuntu google/apigee-envoy-adapter:v1.1.0-boring

예를 들어 볼륨 마운트를 통해 /config.yaml로 사용 가능한 로컬 config.yaml로 스크래치 이미지를 실행하려면 다음 명령어를 사용합니다.

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v1.1.0

샘플 구성 파일 만들기

apigee-remote-service-cli samples create 명령어를 사용하여 샘플 구성 파일을 생성합니다.

이 예시에는 다음과 같은 생성된 파일이

  • envoy-config.yaml - HTTP 서비스의 배포 구성입니다.

샘플을 구성할 때 필요합니다.

  1. $CLI_HOME 디렉터리로 이동합니다.
  2. 다음 명령어를 실행하여 파일을 생성합니다.

    ./apigee-remote-service-cli samples create --template native -c ./config.yaml

    다음 파일은 ./samples 디렉터리를 출력합니다.

    ls samples
    envoy-config.yaml
    

자세한 내용은 샘플 명령어를 참조하세요.

Envoy 프록시 설치 및 실행

Envoy 프록시를 설치하고 실행하려면 다음 단계를 수행합니다.

  1. Envoy 바이너리를 다운로드하거나 빌드하거나 Docker를 사용합니다.
  2. 이전에 httpbin.org 서비스에 생성한 샘플 구성 파일을 사용하여 Envoy를 실행합니다.
    envoy -c $CLI_HOME/samples/envoy-config.yaml

설치 테스트

  1. httpbin 서비스를 호출합니다.
    curl -i http://localhost:8080/httpbin/headers -H "HOST:httpbin.org"
    

    이제 Apigee가 서비스를 관리하고 있으며 API 키를 제공하지 않았기 때문에 호출이 다음 오류를 반환합니다.

    curl -i http://localhost:8080/httpbin/headers -H "HOST:httpbin.org"
    HTTP/1.1 403 Forbidden
    date: Tue, 12 May 2020 17:51:36 GMT
    server: envoy
    content-length: 0
    x-envoy-upstream-service-time: 11
  2. API 키를 가져오는 방법의 설명에 따라 API 제품을 구성하고 API 키를 가져옵니다.
  3. 키를 사용하여 API를 호출합니다.
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/httpbin/headers \
    -H "HOST:httpbin.org" -H "x-api-key: $APIKEY"

    호출이 성공하면 200 상태가 표시되고 응답에 헤더 목록을 반환해야 합니다. 예를 들면 다음과 같습니다.

    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS"
    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:55:34 GMT
    content-type: application/json
    content-length: 828
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 301
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-Api-Key": "kyOTalNNLMPfOSy6rneclmVSL6pA2zS",
        "X-Apigee-Accesstoken": "",
        "X-Apigee-Api": "httpbin.default.svc.cluster.local",
        "X-Apigee-Apiproducts": "httpbin",
        "X-Apigee-Application": "httpbin",
        "X-Apigee-Authorized": "true",
        "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "user@example.com",
        "X-Apigee-Environment": "test",
        "X-Apigee-Organization": "my-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

다음 단계

이제 httpbin 서비스로의 API 트래픽을 Apigee에서 관리합니다. 다음과 같은 기능을 사용해 볼 수 있습니다.

  • API 키를 가져오는 방법의 설명에 따라 API 제품을 구성한 경우 할당량 한도가 분당 요청 5건으로 설정되었습니다. httpbin 서비스를 몇 번 더 호출하여 할당량을 트리거해 보세요. 할당량이 소진되면 HTTP 상태 403 오류가 반환됩니다.
  • Edge UI에서 Apigee 애널리틱스에 액세스합니다. 분석 > API 측정항목 > API 프록시 성능으로 이동합니다.
  • JWT 토큰을 생성하고 사용하여 API 호출을 인증합니다.
  • CLI를 사용하여 토큰을 관리 및 생성하고 바인딩을 제어합니다. CLI에 대한 자세한 내용은 참조를 확인하세요.