이 페이지는 Apigee 및 Apigee Hybrid에 적용됩니다.
Apigee Edge 문서 보기
이 페이지에서는 APIMExtensionPolicy 커스텀 리소스를 만들어 Kubernetes 게이트웨이를 통과하는 트래픽에 Apigee 정책을 적용하는 방법을 설명합니다. Kubernetes용 Apigee Operator는 APIMExtensionPolicy 리소스를 감시하고 그에 따라 게이트웨이를 구성합니다.
Apigee
Apigee를 사용하는 경우 다음 단계를 따르세요.
시작하기 전에
이 태스크를 시작하기 전에 다음 단계를 완료하세요.
- GKE 클러스터에 워크로드 아이덴티티가 구성되어 있는지 확인합니다. 필요한 단계는 GKE용 워크로드 아이덴티티 제휴 구성을 참조하세요.
- 클러스터에 GKE 게이트웨이가 구성되어 작동하는지 확인합니다. 자세한 내용은 게이트웨이 배포를 참조하세요.
- Kubernetes용 Apigee Operator를 설치합니다. 설치 안내는 Kubernetes용 Apigee Operator 설치를 참조하세요.
APIMExtensionPolicy 만들기
이 단계에서는 APIMExtensionPolicy를 만들고 클러스터에서 실행되는 GKE 게이트웨이에 적용합니다. 이 정책은 게이트웨이 및 연결된 HTTPRoutes를 통과하는 모든 트래픽을 제어하며 현재 Apigee의 환경 수준에서 flowhook과 유사하게 작동합니다.
APIMExtensionPolicy를 만들려면 다음 단계를 따르세요.
- 다음 콘텐츠로
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 ENV_NAME을 설치 단계 Apigee 환경 만들기에서 만든 Apigee 환경의 이름으로 바꿉니다.참고:
generateEnv=TRUE플래그를 사용하여 Kubernetes용 Apigee Operator를 설치하는 경우apigeeEnv필드가 필요하지 않습니다.Google Cloud 콘솔의 Apigee 환경 페이지에서 사용 가능한 모든 환경을 확인할 수 있습니다.
- 정책을 적용합니다.
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml정책이 적용되면 Kubernetes용 Apigee Operator가 백그라운드에서 네트워킹 리소스를 만듭니다.
- 다음 명령어를 사용하여
APIMExtensionPolicy의 상태를 확인합니다.kubectl -n apim get APIMExtensionPolicy출력은 다음과 비슷하게 표시되며
STATE가RUNNING입니다.NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
정책 테스트
다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
- 게이트웨이 IP 주소를 가져옵니다.
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IPGATEWAY_NAME을 게이트웨이 이름(예:global-ext-lb1)으로 바꿉니다. HTTPRoute에 구성된 엔드포인트로 요청을 보냅니다.curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"HOST_NAME을 게이트웨이의HTTPRoute에 정의된 호스트 이름(예:example.httpbin.com)으로 바꿉니다.APIMExtensionPolicy리소스에defaultSecurityEnabled: true가 설정되어 API 키 및 액세스 토큰 확인이 사용 설정되어 있으므로 요청이 실패해야 합니다. 다음과 비슷한 응답이 표시됩니다.{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}이는 Apigee 확장 프로그램 정책이 활성 상태이고 API 키 적용 및 액세스 토큰 확인이 활성 상태임을 나타냅니다.
다음 단계
- GKE 게이트웨이에 정책을 추가하는 방법 알아보기
- Kubernetes용 Apigee Operator 제거 방법 알아보기
Apigee Hybrid
Apigee Hybrid를 사용하는 경우 다음 단계를 따르세요.
시작하기 전에
이 절차에서는 Apigee Hybrid를 위한 Kubernetes용 Apigee Operator 설치의 단계를 따라 Kubernetes용 Apigee Operator를 설치했다고 가정합니다.
TLS 인증서 보안 비밀 만들기
APIMExtensionPolicy에는 환경 그룹 호스트 이름과 연결된 base64로 인코딩된 공개 인증서가 필요합니다. 이 인증서는 Helm을 사용하여 Apigee Hybrid 환경 설치에서 만들었습니다.
apim 네임스페이스에 Kubernetes 보안 비밀을 만들어 이 인증서를 연산자에게 제공합니다.
- 설치 중에 만든 파일에서 base64로 인코딩된 인증서 문자열을 가져옵니다.
cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64 - 다음 콘텐츠로
secret-cert.yaml이라는 파일을 만듭니다.# secret-cert.yaml apiVersion: v1 kind: Secret metadata: name: apigee-conf namespace: apim data: ca.crt: BASE64_ENCODED_CERT_STRING BASE64_ENCODED_CERT_STRING을 1단계의cat명령어 출력으로 바꿉니다.- 클러스터에 보안 비밀을 적용합니다.
kubectl apply -f secret-cert.yaml
APIMExtensionPolicy 정의 및 적용
APIMExtensionPolicy 리소스를 정의하고 클러스터에서 실행되는 Istio 게이트웨이에 적용합니다. 이 정책 확장 프로그램은 게이트웨이 및 연결된 HTTPRoutes에서 관리하는 트래픽을 가로채고 백엔드 타겟에 요청을 전달하기 전에 Apigee 정책을 적용합니다.
- 다음 콘텐츠로
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 - 다음 변수를 바꿉니다.
ENV_NAME: 서비스 확장 프로그램이 사용 설정된 상태로 만든 Apigee Hybrid 환경의 이름입니다(예:my-hybrid-env).HOST_NAME: 환경 그룹에 사용되는 도메인 이름입니다(예:my-proxies.example.com).INGRESS_IP_ADDRESS: Apigee Hybrid 런타임 인그레스의 인그레스 IP 주소입니다. 이 IP를 가져오는 방법에 대한 자세한 내용은 Apigee 인그레스 노출을 참조하세요.
- 클러스터에 정책을 적용합니다.
kubectl -n apim apply -f istio-gateway-apim-policy.yaml - 리소스가 적용되면 Kubernetes용 Apigee Operator가 게이트웨이 네트워킹 리소스 구성을 시작합니다.
APIMExtensionPolicy의 상태를 확인합니다.kubectl -n apim get APIMExtensionPolicy STATE가RUNNING으로 표시될 때까지 기다립니다. 출력은 다음과 비슷하게 표시됩니다.NAME STATE ERRORMESSAGE istio-gateway-apim-policy RUNNING
정책 테스트
이전 단계에서 만든 APIMExtensionPolicy에서 defaultSecurityEnabled가 true로 설정되었습니다. 이렇게 하면 이 게이트웨이와 일치하는 트래픽에 대해 API 키 및 OAuth2 토큰 확인 정책이 자동으로 사용 설정됩니다.
Istio 게이트웨이 설정 확인에서 Istio 게이트웨이 설정을 확인할 때 구성한 샘플 httpbin 서비스에 인증되지 않은 요청을 전송하여 이를 테스트합니다.
- 게이트웨이 IP 주소를 가져옵니다.
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IP - HTTPRoute에 구성된
/get엔드포인트로 요청을 보냅니다.curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v 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 제품, 개발자, 앱을 만드는 방법 알아보기