이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.
Apigee Edge 문서 보기
API 관리 니즈가 증가하고 변경됨에 따라 클러스터에 새 서비스를 추가하거나 기존 경로 및 인그레스 옵션을 업데이트해야 할 수 있습니다. 이 페이지에서는 클러스터를 업데이트하여 다음 태스크를 완료하는 방법을 설명합니다.
시작하기 전에
이 태스크를 시작하기 전에 Kubernetes용 Apigee APIM Operator로 정책 적용에 설명된 단계를 완료해야 합니다. 이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터를 설정하고 Kubernetes용 Apigee APIM Operator를 설치하고 Google Kubernetes Engine(GKE) 게이트웨이를 만들었으며 게이트웨이에 API 관리 정책을 최소 하나 이상 적용했다고 가정합니다.
필요한 역할
Kubernetes용 Apigee APIM Operator 설치의 설명대로 서비스 계정에 필요한 역할을 할당한 경우 이러한 태스크를 완료하는 데 필요한 추가 IAM 역할이나 권한은 없습니다.
Kubernetes에서 기본 제공되는 역할 기반 액세스 제어(RBAC) 메커니즘을 사용하여 Google Kubernetes Engine 클러스터의 리소스에 대한 작업을 승인할 수 있습니다. 자세한 내용은 역할 기반 액세스 제어를 사용하여 클러스터의 작업 승인을 참조하세요.
새 게이트웨이 및 HTTPRoute 추가
이 섹션에서는 새 게이트웨이와 HTTPRoute를 클러스터에 추가합니다. 앞선 태스크 가이드의 예시 구성에서는 외부 GKE 게이트웨이를 사용했습니다. 게이트웨이 여러 개가 같은 리전에 배포된 경우 같은 유형(외부 또는 내부 모두)이어야 합니다. 따라서 이 가이드의 예시 구성에서도 외부 게이트웨이를 사용합니다.
APIM Operator를 내부 또는 외부 GKE 게이트웨이와 함께 사용할 수 있지만 같은 리전에 두 가지 유형의 게이트웨이를 모두 배포할 수 없습니다.
새 게이트웨이와 HTTPRoute를 클러스터에 추가하려면 다음 단계를 완료합니다.
- 새 외부 GKE 게이트웨이를 설정합니다. 자세한 내용과 단계는 외부 게이트웨이 배포를 참조하세요.
apim
네임스페이스에gateway2.yaml
라는 새 파일을 만듭니다.- 다음 콘텐츠를 새 파일에 복사합니다.
# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: global-ext-lb2 spec: null gatewayClassName: gke-l7-global-external-managed listeners: - name: https protocol: HTTPS allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 443 tls: options: networking.gke.io/pre-shared-certs: apigee-lb-new-cert-sept
- 아래에 강조표시된 대로
/post
의 새 HTTPRoute를 같은 파일에 추가합니다.# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: http-bin-route-post namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb2 namespace: default hostnames: - HOST_NAME_2 rules: - matches: - path: value: /post backendRefs: - name: httpbin port: 80 namespace: http
- 새 게이트웨이와 HTTPRoute를 적용합니다.
kubectl apply -f gateway2.yaml
- 다음 명령어를 사용하여 HTTPRoute 상태를 확인합니다.
kubectl -n http get HttpRoute
출력은 다음과 비슷하게 표시됩니다.
NAME HOSTNAMES AGE http-bin-route ["my-hostname-2"] 12d
- 다음 명령어를 사용하여 게이트웨이 상태를 확인합니다.
kubectl get gateway global-ext-lb2
출력은 다음과 비슷하게 표시됩니다.
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb2 gke-l7-global-external-managed 34.54.193.92 True 11d
Address
열에 유효한 IP 주소가 포함되어 있고Programmed
상태가True
인지 확인합니다. - 경로가 연결되었는지 확인할 게이트웨이를 설명합니다.
kubectl describe gateway global-ext-lb2
출력은 다음과 비슷하게 표시됩니다.
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
Attached Routes
값이1
인지 확인합니다.- 게이트웨이에 요청을 전송하여 경로가 작동하는지 확인합니다.
curl -X POST https://GATEWAY_IP_ADDRESS/get -k -H "Host: HOST_NAME"
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 7단계에서 반환된 응답의Address
열에 표시된 것처럼 게이트웨이의 IP 주소입니다.HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.
- 출력은 다음과 비슷하게 표시됩니다.
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "https://apigee-apim-operator-test.apigee.net/post" }
- 앞선 단계에서 만든 새 게이트웨이의 HTTPRoute를 참조하는 새 API 확장 프로그램 정책을 만듭니다.
apim
네임스페이스에apim-policy2.yaml
라는 새 파일을 만듭니다.- 다음 콘텐츠를 새 파일에 복사합니다.
# apim-policy2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIMExtensionPolicy metadata: name: global-ext-lb2-apim-policy-2 namespace: apigee spec: location: global failOpen: false timeout: 1000ms targetRef: # identifies the Gateway where the extension should be installed name: global-ext-lb2 kind: Gateway namespace: default
- 새 API 확장 프로그램 정책을 적용합니다.
kubectl apply -f apim-policy2.yaml
파일이 적용되면 APIM Operator가 백그라운드에 네트워킹 리소스를 만듭니다.
- API 확장 프로그램 정책 상태를 확인합니다.
kubectl -n apigee get APIMExtensionPolicy
출력은 다음과 비슷하게 표시됩니다.
NAME STATE ERRORMESSAGE global-ext-lb2-apim-policy RUNNING
STATE
값이RUNNING
인지 확인합니다. - 변경사항이 모든 부하 분산기 인스턴스에 반영될 때까지 5분 정도 기다린 후 다음 명령어를 사용하여 새 게이트웨이에 대한 요청이 실패하는지 확인합니다.
curl -X POST https://GATEWAY_IP_ADDRESS/get -k -H "Host: HOSTNAME"
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 앞선 단계에서 가져온 게이트웨이의 IP 주소입니다.HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.
다음과 유사한 응답이 표시되면서 요청이 실패합니다.
{ "fault": { "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault", "detail": { "errorcode": "steps.raisefault.RaiseFault" } } }
즉, Apigee에 대한 서비스 확장 프로그램이 활성 상태이고 API 키 및 액세스 토큰 확인이 적용됩니다. 개발자 앱을 만들고 API 키를 가져오고 키로 새 게이트웨이를 테스트하는 데 필요한 단계는 Apigee 서비스 확장 프로그램 테스트를 참조하세요.
API 제품 업데이트
새 API 확장 프로그램 정책을 참조하도록 기존 API 제품을 수정합니다.
apim
네임스페이스에api-product-2.yaml
라는 새 파일을 만듭니다.- 다음 콘텐츠를 새 파일에 복사합니다.
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apigee-apim spec: approvalType: auto description: Http bin GET calls displayName: api-product-2 EnforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apigee-apim - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apigee-apim attributes: - name: access value: private
- 새 API 제품 파일을 적용합니다.
kubectl apply -f api-product-2.yaml
변경사항이 클러스터 전체에 적용되는 데 약 3분 정도 걸립니다.
이 예시에서는 yaml
의 강조 표시된 부분과 같이 API 제품 api-product-2
의 EnforcementRefs
섹션이 global-ext-lb1-apim-policy
및 global-ext-lb2-apim-policy
모두 참조하도록 업데이트됩니다.
새 API 제품 만들기
새 API 제품을 만듭니다.
apim
네임스페이스에api-product-2.yaml
라는 새 파일을 만듭니다.- 다음 콘텐츠를 새 파일에 복사합니다.
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apigee-apim spec: approvalType: auto description: Http bin GET calls displayName: api-product-2 enforcementRefs: - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 새 API 제품 파일을 적용합니다.
kubectl apply -f api-product-2.yaml
변경사항이 클러스터 전체에 적용되는 데 약 3분 정도 걸립니다.
이 예시에서는 yaml
의 강조 표시된 부분과 같이 새 API 제품 api-product-2
의 EnforcementRefs
섹션이 global-ext-lb2-apim-policy
를 참조하도록 생성됩니다.
새 API 작업 세트 만들기
새 API 작업 세트를 만듭니다.
apim
네임스페이스에item-set-post.yaml
라는 새 파일을 만듭니다.- 다음 콘텐츠를 새 파일에 복사합니다.
# item-set-post.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIOperationSet metadata: name: item-set-post namespace: apigee-apim spec: apiProductRefs: - name: api-product-1 kind: APIProduct group: apim.googleapis.com namespace: apigee-apim quota: limit: 1 interval: 1 timeUnit: minute restOperations: - name: PostItems path: "/post" methods: - POST
- 새 API 작업 세트 파일을 적용합니다.
kubectl apply -f item-set-post.yaml
변경사항이 클러스터 전체에 적용되는 데 약 3분 정도 걸립니다.
이 예시에서는 파일의 강조 표시된 부분과 같이 새 API 작업 세트 item-set-post
의 restOperations
값이 /post
경로를 참조하도록 생성됩니다.
새 게이트웨이 구성 테스트
새 게이트웨이 구성을 테스트하려면 다음 요청을 새 /post
경로에 보냅니다.
curl -X POST https://GATEWAY_IP_ADDRESS/post -k -H "Host: HOST_NAME"
각 항목의 의미는 다음과 같습니다.
- GATEWAY_IP_ADDRESS는 앞선 단계에서 가져온 게이트웨이의 IP 주소입니다.
- HOST_NAME은 게이트웨이의
HTTPRoute
에 정의된 호스트 이름입니다.
요청이 성공하고 다음과 유사한 응답을 반환해야 합니다.
{ "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 Operator와 함께 사용되는 API 관리 정책을 업데이트하고 확장할 때 문제가 발생하면 APIM Operator 문제 해결에서 일반적인 오류의 해결 방법을 참조하세요.
다음 단계
- Kubernetes용 Apigee APIM Operator를 제거하는 방법 알아보기
- 게이트웨이 배포 옵션 자세히 알아보기