APIMExtensionPolicy 만들기

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

Apigee Edge 문서 보기

이 페이지에서는 APIMExtensionPolicy 커스텀 리소스를 만들어 Kubernetes 게이트웨이를 통과하는 트래픽에 Apigee 정책을 적용하는 방법을 설명합니다. Kubernetes용 Apigee Operator는 APIMExtensionPolicy 리소스를 감시하고 그에 따라 게이트웨이를 구성합니다.

Apigee

Apigee를 사용하는 경우 다음 단계를 따르세요.

시작하기 전에

이 태스크를 시작하기 전에 다음 단계를 완료하세요.

APIMExtensionPolicy 만들기

이 단계에서는 APIMExtensionPolicy를 만들고 클러스터에서 실행되는 GKE 게이트웨이에 적용합니다. 이 정책은 게이트웨이 및 연결된 HTTPRoutes를 통과하는 모든 트래픽을 제어하며 현재 Apigee의 환경 수준에서 flowhook과 유사하게 작동합니다.

APIMExtensionPolicy를 만들려면 다음 단계를 따르세요.

  1. 다음 콘텐츠로 global-ext-lb1-apim-policy.yaml이라는 파일을 만듭니다.
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default
        
  2. ENV_NAME을 설치 단계 Apigee 환경 만들기에서 만든 Apigee 환경의 이름으로 바꿉니다.

    참고: generateEnv=TRUE 플래그를 사용하여 Kubernetes용 Apigee Operator를 설치하는 경우 apigeeEnv 필드가 필요하지 않습니다.

    Google Cloud 콘솔의 Apigee 환경 페이지에서 사용 가능한 모든 환경을 확인할 수 있습니다.

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

    정책이 적용되면 Kubernetes용 Apigee Operator가 백그라운드에서 네트워킹 리소스를 만듭니다.

  4. 다음 명령어를 사용하여 APIMExtensionPolicy의 상태를 확인합니다.
    kubectl -n apim get APIMExtensionPolicy
        

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

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

정책 테스트

다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.

  1. 게이트웨이 IP 주소를 가져옵니다.
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    GATEWAY_NAME을 게이트웨이 이름(예: global-ext-lb1)으로 바꿉니다.

  2. HTTPRoute에 구성된 엔드포인트로 요청을 보냅니다.
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    HOST_NAME을 게이트웨이의 HTTPRoute에 정의된 호스트 이름(예: example.httpbin.com)으로 바꿉니다.

  3. APIMExtensionPolicy 리소스에 defaultSecurityEnabled: true가 설정되어 API 키 및 액세스 토큰 확인이 사용 설정되어 있으므로 요청이 실패해야 합니다. 다음과 비슷한 응답이 표시됩니다.
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

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

다음 단계

Apigee Hybrid

Apigee Hybrid를 사용하는 경우 다음 단계를 따르세요.

시작하기 전에

이 절차에서는 Apigee Hybrid를 위한 Kubernetes용 Apigee Operator 설치의 단계를 따라 Kubernetes용 Apigee Operator를 설치했다고 가정합니다.

TLS 인증서 보안 비밀 만들기

APIMExtensionPolicy에는 환경 그룹 호스트 이름과 연결된 base64로 인코딩된 공개 인증서가 필요합니다. 이 인증서는 Helm을 사용하여 Apigee Hybrid 환경 설치에서 만들었습니다. apim 네임스페이스에 Kubernetes 보안 비밀을 만들어 이 인증서를 연산자에게 제공합니다.

  1. 설치 중에 만든 파일에서 base64로 인코딩된 인증서 문자열을 가져옵니다.
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. 다음 콘텐츠로 secret-cert.yaml이라는 파일을 만듭니다.
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. BASE64_ENCODED_CERT_STRING을 1단계의 cat 명령어 출력으로 바꿉니다.
  4. 클러스터에 보안 비밀을 적용합니다.
    kubectl apply -f secret-cert.yaml
        

APIMExtensionPolicy 정의 및 적용

APIMExtensionPolicy 리소스를 정의하고 클러스터에서 실행되는 Istio 게이트웨이에 적용합니다. 이 정책 확장 프로그램은 게이트웨이 및 연결된 HTTPRoutes에서 관리하는 트래픽을 가로채고 백엔드 타겟에 요청을 전달하기 전에 Apigee 정책을 적용합니다.

  1. 다음 콘텐츠로 istio-gateway-apim-policy.yaml이라는 파일을 만듭니다.
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. 다음 변수를 바꿉니다.
    • ENV_NAME: 서비스 확장 프로그램이 사용 설정된 상태로 만든 Apigee Hybrid 환경의 이름입니다(예: my-hybrid-env).
    • HOST_NAME: 환경 그룹에 사용되는 도메인 이름입니다(예: my-proxies.example.com).
    • INGRESS_IP_ADDRESS: Apigee Hybrid 런타임 인그레스의 인그레스 IP 주소입니다. 이 IP를 가져오는 방법에 대한 자세한 내용은 Apigee 인그레스 노출을 참조하세요.
  3. 클러스터에 정책을 적용합니다.
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. 리소스가 적용되면 Kubernetes용 Apigee Operator가 게이트웨이 네트워킹 리소스 구성을 시작합니다. APIMExtensionPolicy의 상태를 확인합니다.
    kubectl -n apim get APIMExtensionPolicy
        
  5. STATERUNNING으로 표시될 때까지 기다립니다. 출력은 다음과 비슷하게 표시됩니다.
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

정책 테스트

이전 단계에서 만든 APIMExtensionPolicy에서 defaultSecurityEnabledtrue로 설정되었습니다. 이렇게 하면 이 게이트웨이와 일치하는 트래픽에 대해 API 키 및 OAuth2 토큰 확인 정책이 자동으로 사용 설정됩니다. Istio 게이트웨이 설정 확인에서 Istio 게이트웨이 설정을 확인할 때 구성한 샘플 httpbin 서비스에 인증되지 않은 요청을 전송하여 이를 테스트합니다.

  1. 게이트웨이 IP 주소를 가져옵니다.
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. HTTPRoute에 구성된 /get 엔드포인트로 요청을 보냅니다.
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. defaultSecurityEnabled: true에는 유효한 API 키와 같은 인증이 필요하므로 Apigee는 인증 오류와 함께 요청을 거부해야 합니다. 응답은 다음과 비슷하게 표시됩니다.
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    이 출력은 APIMExtensionPolicy가 활성 상태이고 Apigee 정책이 Istio 게이트웨이에 의해 적용되고 있음을 확인해 줍니다.

다음 단계

인증된 요청을 위한 API 키를 얻기 위해 API 제품, 개발자, 앱을 만드는 방법 알아보기