Apigee 및 Apigee Hybrid용 기본 Envoy 예시

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

이 예시에서는 Kubernetes 클러스터 내부가 아닌 로컬에서 Envoy를 설치 및 실행하여 Envoy용 Apigee 어댑터를 사용하는 방법을 보여줍니다. 이 문서의 예시에 따라 Apigee 및 Apigee Hybrid 설치를 진행할 수 있습니다.

API 프록시 호출은 기본 애플리케이션으로 실행되는 Envoy를 거칩니다. Apigee는 API 제품 및 개발자 앱 만들기와 같은 API 관리 서비스를 제공합니다. Envoy는 어댑터의 원격 서비스를 통해 Apigee 관리 영역과 통신합니다. 또한 어댑터는 분석 데이터를 Apigee로 푸시하므로 Apigee 애널리틱스에서 확인할 수 있습니다.

기본 요건

시작하기 전에 다음 사항을 확인하세요.

gcloud 구성 확인

  1. gcloud 구성이 Apigee 조직과 연결된 Google Cloud 프로젝트로 설정되었는지 확인합니다.

    현재 설정을 나열하려면 다음 단계를 따르세요. gcloud config도 참조하세요.

    gcloud config list

    필요한 경우 다음 명령어를 사용하여 올바른 Google Cloud 프로젝트 ID를 설정합니다.

    gcloud config set project project-id
  2. Google Cloud 프로젝트의 Google Cloud SDK(gcloud)로 인증을 받아야 합니다. gcloud auth login도 참조하세요.
    gcloud auth login

Apigee 프로비저닝

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

  1. $CLI_HOME 디렉터리로 이동합니다.
    cd $CLI_HOME
  2. (선택사항) 기본적으로 어댑터는 Google Cloud 프로젝트에서 Apigee에 분석 데이터를 보낼 수 있는 권한에 대한 기본 서비스 계정 사용자 인증 정보를 찾습니다. 기본 서비스 계정 사용자 인증 정보를 사용하지 않으려면 서비스 계정을 만들고 프로비저닝 명령어에서 해당 키를 참조하면 됩니다. 서비스 계정에 apigee.analyticsAgent 역할이 있어야 합니다. 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.
  3. 다음의 환경 변수를 만듭니다. 이러한 변수는 프로비저닝 스크립트의 매개변수로 사용됩니다.
    export ORG=organization_name
    export ENV=environment_name
    export RUNTIME=host_alias_url
    export NAMESPACE=hybrid_runtime_namespace  ## Apigee hybrid only
    export AX_SERVICE_ACCOUNT=analytics_service_account  ## Optional

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

    변수 설명
    organization_name Apigee 조직의 이름입니다.
    environment_name 조직의 환경 이름입니다.
    host_alias_url
    • Apigee Hybrid의 경우 하이브리드 구성에 정의된 가상 호스트의 hostAlias가 포함된 URL입니다.
    • Apigee의 경우 환경을 포함하는 환경 그룹의 호스트 이름입니다. Apigee UI의 관리 > 환경 > 그룹에서 환경 그룹을 찾을 수 있습니다.
    • 참고: URL은 https://으로 시작해야 합니다. 예를 들면 https://apitest.mydomain.net입니다.

    hybrid_runtime_namepace (Apigee Hybrid만 해당) 하이브리드 런타임 구성요소가 배포된 네임스페이스입니다.

    참고: 하이브리드 배포의 기본 네임스페이스는 apigee입니다.

    analytics_service_account (선택사항) Apigee Analytics Agent 역할이 있는 Google Cloud 서비스 계정 키 JSON 파일의 경로입니다. 이 매개변수에 대한 자세한 설명은 프로비저닝 명령어를 참조하세요.
  4. Apigee 조직과 연결된 Google Cloud 프로젝트의 소유자가 아닌 경우 Google Cloud 사용자 계정에 Apigee 조직 관리자 역할 또는 API 생성자배포자 역할이 포함되어 있는지 확인합니다. 리소스에 대한 액세스 권한 부여, 변경, 취소를 참고하세요.
  5. 액세스 토큰 가져오기:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  6. 원격 서비스 프록시를 Apigee에 프로비저닝합니다. 명령어 결과는 이후 단계에서 사용할 구성 파일로 리디렉션됩니다.

    업그레이드하지 않으려면 다음 명령어를 사용하여 Apigee를 프로비저닝합니다. Apigee Hybrid에 프로비저닝하는 경우 --namespace $NAMESPACE 매개변수를 추가해야 합니다.

    ./apigee-remote-service-cli provision --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml

    업그레이드하는 경우 다음 명령어를 --force-proxy-install 플래그와 함께 사용하여 Apigee를 프로비저닝합니다. Apigee Hybrid에 프로비저닝하는 경우 --namespace $NAMESPACE 매개변수를 추가해야 합니다.

    ./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
  7. config.yaml 파일의 콘텐츠를 확인합니다. 다음과 같이 나타납니다.
    # Configuration for apigee-remote-service-envoy (platform: Google Cloud)
    # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          remote_service_api: https://apitest.mydomain.com/remote-service
          org_name: my-org
          env_name: test
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.mydomain.com/remote-service/token
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-policy-secret
      namespace: apigee
    type: Opaque
    data:
      remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci...
      remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS...
      remote-service.properties: a2lkPTIwMjAtMDctMDZ...
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-analytics-secret
      namespace: apigee
    type: Opaque
    data:
      client_secret.json: ewogICJ0eXBlIjogInNlcnZ...
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee

apigee-remote-service-envoy 실행

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

기본적으로 서비스 실행

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

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

Docker에서 서비스 실행

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

변형 이미지
Google distroless google/apigee-envoy-adapter:v2.0.3
Ubuntu google/apigee-envoy-adapter:v2.0.3-ubuntu
Boring Crypto를 포함한 Ubuntu google/apigee-envoy-adapter:v2.0.3-boring

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

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v2.0.3

샘플 Envoy 구성 파일 만들기

CLI를 사용하여 샘플 Envoy 구성 파일을 생성합니다.

  1. 현재 위치가 $ENVOY_HOME 디렉터리인지 확인합니다.
  2. 사용 가능한 구성 템플릿을 나열합니다.
    $CLI_HOME/apigee-remote-service-cli samples templates
  3. 샘플 명령어를 실행합니다. TEMPLATE을 지원되는 Envoy 템플릿 중 하나로 대체합니다.

    $CLI_HOME/apigee-remote-service-cli samples create --template TEMPLATE -c ./config.yaml

    이 명령어는 ./samples/envoy-config.yaml 파일을 만듭니다.

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

Envoy 프록시 설치 및 실행

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

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

설치 테스트

  1. API 키를 가져오는 방법의 설명에 따라 API 제품을 구성하고 API 키를 가져옵니다.
  2. API 키를 사용하지 않고 httpbin 서비스를 호출합니다.
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    

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

    curl -i http://localhost:8080/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
  3. 키를 사용하여 API를 호출합니다.
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/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@mydomain.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"
      }
    }

Apigee Envoy 어댑터 제거

Apigee Envoy 어댑터 설치를 삭제하려면 다음 안내를 따르세요.

  1. Envoy 어댑터를 실행할 위치(기본 또는 Docker)에 관계없이 이를 삭제합니다.
  2. Apigee 환경에서 remote-serviceremote-token 프록시를 삭제합니다. API 프록시 삭제를 참조하세요.
  3. 사용되지 않는 API 제품이나 Envoy 어댑터 사용 사례에서 사용하는 작업을 삭제합니다. API 제품 삭제를 참조하세요.

다음 단계

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

  • Edge UI에서 Apigee 애널리틱스에 액세스합니다. 분석 > API 측정항목 > API 프록시 성능으로 이동합니다.
  • 참조에서 CLI 옵션을 살펴봅니다.