Kubernetes용 Apigee APIM Operator로 API 관리 정책 사용

이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.

Apigee Edge 문서 보기

이 페이지에서는 Kubernetes용 Apigee APIM Operator(프리뷰)를 사용하여 Apigee API 관리 정책을 적용하도록 클러스터에서 실행 중인 Google Kubernetes Engine(GKE) 게이트웨이를 수정하는 방법을 설명합니다.

시작하기 전에

이 작업을 시작하기 전에 다음 단계를 완료해야 합니다.

필요한 역할

Kubernetes용 Apigee APIM Operator 설치의 설명대로 서비스 계정에 필요한 역할을 할당한 경우 이러한 태스크를 완료하는 데 필요한 추가 IAM 역할이나 권한은 없습니다.

Kubernetes에서 기본 제공되는 역할 기반 액세스 제어(RBAC) 메커니즘을 사용하여 Google Kubernetes Engine 클러스터의 리소스에 대한 작업을 승인할 수 있습니다. 자세한 내용은 역할 기반 액세스 제어를 사용하여 클러스터의 작업 승인을 참조하세요.

개요

다음 섹션에서는 APIM Operator를 사용하여 Apigee 정책을 사용하도록 GKE 게이트웨이를 수정하는 데 필요한 단계를 설명합니다. 이 둘러보기에서는 다음을 수행합니다.

  1. APIM 확장 프로그램 정책 정의
  2. API 제품 정의
  3. API 작업 세트 정의
  4. Apigee 서비스 확장 프로그램 테스트
  5. Google Cloud 콘솔에서 Apigee API 분석 보기

APIM 확장 프로그램 정책 정의

이 단계에서는 APIM 확장 프로그램 정책을 정의하고 클러스터에서 실행 중인 GKE 게이트웨이에 적용합니다. 이 정책은 게이트웨이와 연결된 HTTPRoutes를 통과하는 모든 트래픽을 제어하며 현재 Apigee의 환경 수준에서 flowhook과 유사하게 작동합니다.

APIM 확장 프로그램 정책을 정의합니다.

  1. apim 네임스페이스에 global-ext-lb1-apim-policy.yaml이라는 새 파일을 만듭니다.
  2. 다음 콘텐츠를 새 파일에 복사합니다.
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy 
      namespace: apim
    spec:
      apigeeenv: ENV_NAME
      location: global
      failOpen: false
      timeout: 1000ms
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1 
        kind: Gateway
        namespace: default

    여기서 ENV_NAME은 선택적 설치 단계인 Apigee 환경 만들기에서 만든 Apigee 환경의 이름입니다.

    설치 중에 환경을 만들지 않은 경우 설치 중에 APIM Operator가 만든 환경의 이름을 확인합니다. Google Cloud 콘솔의 Apigee UI에서 사용 가능한 모든 환경을 볼 수 있습니다. 새 환경의 이름은 apim-enabled-dep-env 프리픽스로 시작합니다.

    Google Cloud 콘솔의 Apigee 환경 페이지로 이동합니다.

    환경

  3. 정책을 적용합니다.
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    yaml이 적용되면 APIM Operator가 백그라운드에 네트워킹 리소스를 만듭니다.

  4. 다음 명령어를 사용하여 API 확장 프로그램 정책의 상태를 확인합니다.
    kubectl -n apim get APIMExtensionPolicy

    출력은 다음과 비슷하게 표시되며 StateRUNNING입니다.

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. 다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
    curl GATEWAY_IP_ADDRESS/get -k -H "Host: HOST_NAME"

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

    • GATEWAY_IP_ADDRESS는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서 GATEWAY_NAME은 게이트웨이 이름입니다.
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME은 게이트웨이의 HTTPRoute에 정의된 호스트 이름입니다.
  6. 다음과 유사한 응답이 표시되면서 요청이 실패합니다.
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}

    이는 Apigee 확장 프로그램 정책이 활성 상태이고 API 키 적용 및 액세스 토큰 확인이 활성 상태임을 나타냅니다.

API 제품 정의

API 제품을 정의합니다.

  1. apim 네임스페이스에 api-product.yaml이라는 새 파일을 만듭니다.
  2. 다음 콘텐츠를 새 파일에 복사합니다.
    # api-product.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIProduct
      metadata:
        name: api-product
        namespace: apim
      spec:
        approvalType: auto
        description: Http bin GET calls
        displayName: api-product
        enforcementRefs:
          - name: global-ext-lb1-apim-policy
            kind: APIMExtensionPolicy
            group: apim.googleapis.com
            namespace: apim
        attributes:
          - name: access
            value: private
  3. 다음 명령어를 사용하여 게이트웨이에 파일을 적용합니다.
    kubectl -n apim apply -f api-product.yaml

API 작업 세트 정의

이전 단계에서 만든 API 제품의 API 작업 세트를 정의합니다.

  1. apim 네임스페이스에 apim-policies.yaml이라는 새 파일을 만듭니다.
  2. 다음 콘텐츠를 새 파일에 복사합니다. 이 파일은 이전 단계에서 정의된 API 제품에 대한 할당량 정책과 사용 가능한 REST 작업을 정의합니다.
    # apim-policies.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIOperationSet
      metadata:
        name: item-set
      spec:
        apiProductRefs:
          - name: api-product
            kind: APIProduct
            group: apim.googleapis.com
            namespace: apim
        quota:
          limit: 10
          interval: 1
          timeUnit: minute
        restOperations:
          - name: GetItems
            path: /get
            methods:
              - GET
  3. 게이트웨이에 파일을 적용합니다.
    kubectl -n apim apply -f apim-policies.yaml

Apigee 서비스 확장 프로그램 테스트

이 단계에서는 Google Cloud 콘솔의 Apigee UI를 사용하여 게이트웨이에 적용된 Apigee 서비스 확장 프로그램과 Apigee 확장 프로그램 정책을 테스트합니다.

테스트 설정

테스트에 필요한 API 리소스를 설정합니다.

  1. Google Cloud 콘솔에서 Apigee API 관리 페이지로 이동합니다.

    Apigee API 관리

  2. APIM Operator를 설치한 Apigee 조직을 선택합니다.
  3. 개발자를 만듭니다.
    1. 배포 > 개발자를 선택합니다.
    2. 개발자 페이지에서 + 만들기를 클릭합니다.
    3. 개발자 추가 페이지에서 원하는 값을 사용하여 필수 입력란을 작성합니다.
    4. 추가를 클릭합니다.
  4. 앱을 만듭니다.
    1. 배포>을 선택합니다.
    2. 페이지에서 + 만들기를 클릭합니다.
    3. 앱 만들기 페이지에서 앱 세부정보 섹션의 필수 입력란을 다음 값으로 작성합니다.
      • 앱 이름: demo-app
      • 개발자: 이전 단계에서 만든 개발자 또는 목록에서 다른 개발자를 선택합니다.
    4. 앱 사용자 인증 정보 섹션에서 + 사용자 인증 정보 추가를 클릭합니다.
    5. 사용자 인증 정보 섹션에서 사용자 인증 정보 세부정보 섹션의 필수 입력란을 다음 값으로 작성합니다.
      • 사용자 인증 정보 이름: demo-credential
      • 사용자 인증 정보 유형: API 키를 선택합니다.
    6. 만들기를 클릭합니다.
    7. 제품 섹션에서 + 제품 추가를 클릭합니다.
    8. 이전 단계에서 만든 api-product-1을 선택합니다.
    9. 추가를 클릭합니다.
    10. 만들기를 클릭합니다.
  5. 앱 세부정보 페이지의 사용자 인증 정보 섹션에서 아이콘을 클릭하여 값을 표시합니다.

    Key 값을 복사합니다. 이 키는 이후 단계에서 서비스에 API를 호출하는 데 사용됩니다.

  6. 앱 세부정보 페이지의 사용자 인증 정보 섹션에서 아이콘을 클릭하여 앱 보안 비밀 값을 표시합니다.

    앱 보안 비밀 값을 복사합니다. 이 값은 이후 단계에서 액세스 토큰을 생성하는 데 사용됩니다.

API 키 적용 테스트

이전 단계에서 가져온 API 키를 사용하여 게이트웨이에 요청을 보내려면 다음 명령어를 사용하세요.

curl GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k

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

  • GATEWAY_IP_ADDRESS는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서 GATEWAY_NAME은 게이트웨이 이름입니다.
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME은 게이트웨이의 HTTPRoute에 정의된 호스트 이름입니다.
  • API_KEY테스트 설정에서 가져온 API 키 값입니다.

요청이 성공하고 다음과 유사한 응답이 반환됩니다.

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "apigee-apim-operator-test.apigee.net", 
    "User-Agent": "curl/8.7.1", 
    "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", 
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  }, 
  "origin": "34.54.193.72", 
  "url": "https://34.54.193.72/get"
}

테스트 할당량 적용

APIM 확장 프로그램 정책에 정의된 할당량 적용을 테스트하려면 이전 단계의 요청을 게이트웨이로 1분 이내에 10번 전송합니다.

다음 스크립트를 실행하여 요청을 생성할 수 있습니다.

#!/bin/sh
for i in $(seq 1 11); do
    curl GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k
    sleep 1
done

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

  • GATEWAY_IP_ADDRESS는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서 GATEWAY_NAME은 게이트웨이 이름입니다.
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME은 게이트웨이의 HTTPRoute에 정의된 호스트 이름입니다.
  • API_KEY테스트 설정에서 가져온 API 키 값입니다.

이 작업은 할당량 위반을 트리거하고 다음과 유사한 오류를 발생시킵니다.

{"fault":{"faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}

REST 작업 시행 테스트

나머지 작업 시행을 테스트하려면 다음 명령어를 사용하여 API 작업 세트에 없는 URL을 사용하여 게이트웨이에 요청을 보냅니다.

curl GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k

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

  • GATEWAY_IP_ADDRESS는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서 GATEWAY_NAME은 게이트웨이 이름입니다.
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME은 게이트웨이의 HTTPRoute에 정의된 호스트 이름입니다.
  • API_KEY테스트 설정에서 가져온 API 키 값입니다.

다음과 유사한 응답이 표시되면서 요청이 실패합니다.

{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}

Google Cloud 콘솔에서 Apigee API 분석 보기

Google Cloud 콘솔에서 Apigee API 분석을 사용하여 GKE 게이트웨이와 설치한 APIMExtensionPolicy에서 처리하는 API 트래픽을 볼 수 있습니다.

  1. Google Cloud 콘솔에서 Apigee API 관리 페이지로 이동합니다.

    Apigee API 관리

  2. APIM Operator를 설치한 Apigee 조직을 선택합니다.
  3. 측면 탐색 메뉴에서 분석 > API 측정항목을 선택합니다.
  4. API 프록시 성능 탭에서 선택적 설치 단계 Apigee 환경 만들기에서 만든 환경 또는 설치 중에 APIM Operator가 만든 환경을 선택합니다. 환경 이름은 apigee-ext-proc-enabled-env 프리픽스로 시작합니다.
  5. 기록된 API 트래픽을 확인합니다.

문제 해결

APIM Operator에서 API 관리 정책을 사용할 때 문제가 발생하면 APIM Operator 문제 해결에서 일반적인 오류의 해결 방법을 참조하세요.

다음 단계