배포 옵션
OpenShift에 APIcast API 게이트웨이 배포, 기본 또는 Docker 사용.
초록
1장. APIcast 개요 링크 복사링크가 클립보드에 복사되었습니다!
APIcast는 내부 및 외부 API 서비스를 3scale API Management Platform과 통합하는 데 사용되는 NGINX 기반 API 게이트웨이입니다. APIcast는 라운드 로빈을 사용하여 로드 밸런싱을 수행합니다. 이 가이드에서는 배포 옵션, 제공된 환경 및 시작 방법에 대해 자세히 알아봅니다.
Red Hat 3scale API Management 지원 구성 및 Red Hat 3scale API Management 기사를 참조하여 릴리스된 최신 버전 및 지원되는 APIcast 버전에 대한 정보를 확인할 수 있습니다.
1.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
APIcast는 독립 실행형 API 게이트웨이가 아니며 3scale API Manager에 연결되어 있어야 합니다.
- 작동하는 3scale 온프레미스 인스턴스가 필요합니다.
1.2. 배포 옵션 링크 복사링크가 클립보드에 복사되었습니다!
두 경우 모두 APIcast 호스팅 또는 자체 관리를 사용할 수 있습니다. 3scale API 관리 플랫폼의 나머지 부분에 대한 연결이 필요합니다.
- APIcast 내장: 기본적으로 3scale API Management 설치로 두 개의 APIcast 게이트웨이 (태그 및 프로덕션)가 제공됩니다. 사전 구성되어 있으며 즉시 사용할 준비가 되어 있습니다.
APIcast 자체 관리: 원하는 곳에 APIcast를 배포할 수 있습니다. 다음은 APIcast 배포에 권장되는 몇 가지 옵션입니다.
- Docker 컨테이너 환경: Docker 형식의 컨테이너에서 APIcast를 실행하는 모든 종속 항목을 포함하는 Docker 형식의 컨테이너 이미지를 사용할 준비가 되어 있습니다.
- OpenShift: 지원되는 OpenShift 버전에서 APIcast를 실행합니다. 자체 관리 APIcast를 온프레미스 3scale API Management 설치 또는 3scale 호스트 계정에 연결할 수 있습니다.
1.3. 환경 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 3scale 계정을 만들 때 다른 두 환경에 기본 제공 APIcast가 제공됩니다.
-
스테이징: API 통합을 구성하고 테스트하는 경우에만 사용됩니다. 설정이 예상대로 작동하는지 확인한 후 프로덕션 환경에 배포하도록 선택할 수 있습니다. OpenShift 템플릿은 각 API 호출에 구성이 다시 로드되는 방식으로 Staging APIcast의 매개 변수를 설정합니다 (
APIST_CONFIGURATION_LOADER: lazy,APICAST_CONFIGURATION_CACHE: 0). APIcast 구성의 변경 사항을 빠르게 테스트하는 것이 유용합니다. -
프로덕션: 이 환경은 프로덕션 용도로 사용됩니다. 다음 매개변수는 OpenShift 템플릿에서 Production APIcast에 대해 설정됩니다.
APICAST_CONFIGURATION_LOADER: boot,APICAST_CONFIGURATION_CACHE: 300. 즉, APIcast가 시작될 때 구성이 완전히 로드되고 300초(5분) 동안 캐시됩니다. 5분 후에 설정이 다시 로드됩니다. 즉, 구성을 프로덕션으로 승격시킬 때 APIcast의 새 배포를 트리거하지 않는 한 최대 5분이 걸릴 수 있습니다.
1.4. 통합 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
[your_API_name] > 통합 > 설정으로 이동합니다.
통합 옵션은 오른쪽 상단에 있는 통합 페이지에 표시됩니다. 기본적으로 배포 옵션은 APIcast 호스팅이며 인증 모드는 API 키입니다. 오른쪽 상단에서 통합 설정 편집을 클릭하여 이러한 설정을 변경할 수 있습니다. OAuth 2.0 인증은 자체 관리 배포에서만 사용할 수 있습니다.
1.5. 서비스 구성 링크 복사링크가 클립보드에 복사되었습니다!
API 백엔드의 끝점 호스트인 Private Base URL 필드에 API 백엔드를 선언해야 합니다. APIcast는 모든 인증, 권한 부여, 속도 제한 및 통계가 처리된 후 모든 트래픽을 API 백엔드로 리디렉션합니다.
일반적으로 API의 프라이빗 기본 URL은 관리하는 도메인의 https://api-backend.yourdomain.com:443 (yourdomain.com)과 같습니다. 예를 들어, Twitter API와 통합하려는 경우 개인 기본 URL은 https://api.twitter.com/ 입니다. 이 예제에서는 3scale에서 호스팅하는 Echo API를 사용합니다 - 모든 경로를 수락하고 요청에 대한 정보를 반환하는 간단한 API (path, 요청 매개변수, 헤더 등). 프라이빗 기본 URL은 https://echo-api.3scale.net:443입니다.
프라이빗(관리되지 않음) API가 작동하는지 테스트합니다. 예를 들어, Echo API의 경우 curl 명령을 사용하여 다음 호출을 수행할 수 있습니다.
curl "https://echo-api.3scale.net:443"
curl "https://echo-api.3scale.net:443"
다음과 같은 응답을 받습니다.
API가 작동하는지 확인한 후 호스팅 스테이징 환경에 대한 테스트 호출을 구성해야 합니다. API test GET request 필드 (예: /v1/word/good.json)에 API에 기존 경로를 입력합니다.
페이지 오른쪽 하단의 Update & Test Staging Configuration 버튼을 클릭하여 설정을 저장합니다. 이렇게 하면 APIcast 구성이 3scale 호스트 스테이징 환경에 배포됩니다. 모든 것이 올바르게 구성되면 왼쪽의 수직선이 녹색으로 전환되어야 합니다.
1.5.1. 인증 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
자체 관리 배포 옵션 중 하나를 사용하는 경우 GUI에서 구성을 저장하고 스테이징 또는 프로덕션 공용 기본 URL 필드에 올바른 호스트를 추가하여 배포된 API 게이트웨이를 가리키는지 확인합니다. 프로덕션 게이트웨이에 대한 호출을 수행하기 전에 promo v.x to Production 버튼을 클릭합니다.
스테이징 섹션의 하단에서 샘플 curl 을 찾아서 콘솔에서 실행합니다.
curl "https://XXX.staging.apicast.io:443/v1/word/good.json?user_key=YOUR_USER_KEY"
curl "https://XXX.staging.apicast.io:443/v1/word/good.json?user_key=YOUR_USER_KEY"
위와 동일한 응답이 표시되지만 이번에는 요청이 3scale 호스팅 APIcast 인스턴스를 통과합니다. 참고: 서비스에 유효한 자격 증명이 있는 애플리케이션이 있어야 합니다. 3scale까지 등록할 때 생성된 기본 API 서비스를 사용하는 경우 이미 애플리케이션이 있어야 합니다. 그렇지 않으면 테스트 curl에 USER_KEY 또는 APP_ID 및 APP_KEY 값이 표시되면 먼저 이 서비스에 대한 애플리케이션을 생성해야 합니다.
이제 API가 3scale과 통합되었습니다.
3scale 호스팅 APIcast 게이트웨이는 인증 정보를 검증하며 애플리케이션의 애플리케이션 계획에 대해 정의한 속도 제한을 적용합니다. 자격 증명이 없거나 잘못된 인증 정보를 사용하여 호출하려고 하면 오류 메시지가 표시됩니다. 코드 및 메시지 텍스트를 구성할 수 있습니다. 자세한 내용은 Advanced APIcast 구성 문서를 확인하십시오.
1.6. 매핑 규칙 링크 복사링크가 클립보드에 복사되었습니다!
매핑 규칙은 API에 대한 요청에 따라 보고할 지표(및 메서드)를 정의합니다.
기본적으로 매우 간단한 매핑 규칙으로 시작합니다.
이 규칙은 / 로 시작하는 모든 GET 요청이 지표 적중 을 1씩 증가시킵니다. 이 매핑 규칙은 API에 대한 모든 요청과 일치합니다. 이 규칙은 너무 일반적이므로 대부분 변경할 가능성이 높습니다.
APIcast는 다음과 같은 방법으로 매개변수를 가져옵니다.
- GET 메서드: APIcast는 쿼리 문자열에서 매개 변수를 가져옵니다.
- 이러한 모든 방법(databind, DELETE, PUT): APIcast는 본문에서 매개 변수를 가져옵니다.
매개 변수의 이름은 와일드카드로 지정될 수도 있습니다. 슬래시 또는 슬래시와 점 사이에 와일드카드가 표시될 수 있습니다.
예를 들어 아래에서 Echo API에 대한 규칙을 확인할 수 있습니다.
매핑 규칙은 쿼리 문자열 또는 본문에 대한 매개 변수를 포함할 수도 있습니다. /{word}?value={value}.
규칙 일치는 접두사로 수행되며 임의로 복잡할 수 있습니다. 표기법은 Swagger 및 ActiveDocs 사양을 따릅니다.
-
리터럴 문자열
/hello를 통해 경로에서 일치를 수행할 수 있습니다. -
매핑 규칙은 이름이 지정된 와일드카드를 포함할 수 있습니다.
/{word}
이 규칙은 자리 표시자 {word} 의 모든 항목과 일치하므로 /morning 과 같은 요청이 규칙과 일치합니다.
슬래시 또는 슬래시와 점 사이에 와일드카드가 표시될 수 있습니다.
-
매핑 규칙은 쿼리 문자열 또는 본문에 대한 매개 변수를 포함할 수도 있습니다.
/{word}?value={value}
APIcast는 GET인 경우 쿼리 문자열에서 매개 변수를 가져오고 POST, DELETE, PUT일 때 본문에서 매개 변수를 가져옵니다.
매개 변수의 이름은 와일드카드로 지정될 수도 있습니다.
기본적으로 지정한 정렬에 따라 모든 매핑 규칙이 처음부터 마지막까지 평가됩니다. 위의 숫자에 규칙 /v1 을 추가하는 경우 /v1로 시작하는 경로가 /v1로 시작하는 요청과 일치합니다. /v1/word 또는 /v1/sentence.
1.7. 규칙 워크플로 매핑 링크 복사링크가 클립보드에 복사되었습니다!
매핑 규칙을 정의하는 의도된 워크플로우는 다음과 같습니다.
- 매핑 규칙 추가 버튼을 클릭하여 새 규칙을 추가할 수 있습니다. 그런 다음 HTTP 메서드, 패턴, 지표(또는 메서드) 및 마지막으로 증가를 선택합니다. 완료되면 Update & Test Staging Configuration 을 클릭하여 변경 사항을 적용합니다.
- 다음 다시 로드 시 매핑 규칙이 회색으로 표시되어 실수로 수정되지 않도록 합니다.
- 기존 매핑 규칙을 편집하려면 먼저 오른쪽에 있는 연필 아이콘을 클릭하여 활성화해야 합니다.
- 규칙을 삭제하려면 쓰레기통 아이콘을 클릭합니다.
- Update & Test Staging Configuration 버튼을 누르면 수정 및 삭제 내용이 저장됩니다.
이 워크플로우 외에도 다음 두 가지 기능이 있습니다.
- 매핑 규칙을 정렬하려면 마지막 열에 있는 각 매핑 규칙 옆에 있는 녹색 화살표를 사용하여 끌어다 놓을 수 있습니다. 지정된 정렬은 데이터베이스에 저장되고 Staging Environment에서 Update & test in Staging Environment 버튼을 클릭한 후 프록시 구성 사양의 콘텐츠에 보관됩니다.
- 다른 매핑 규칙 처리를 중지하려면 Last? 확인란을 선택할 수 있습니다. 예를 들어 API Integration Settings 에 다음 매핑 규칙이 정의되어 있고 각 규칙에 다른 메트릭이 있는 경우 다음을 실행합니다.
(get) /path/to/example/search
(get) /path/to/example/{id}
(get) /path/to/example/search
(get) /path/to/example/{id}
(get) /path/to/example/search 를 사용하여 호출하면 나머지 매핑 규칙 처리가 중지되고 규칙이 일치하는 후 지표가 증가합니다.
고급 구성 옵션은 APIcast 고급 구성 튜토리얼을 확인할 수 있습니다.
1.8. 호스트 헤더 링크 복사링크가 클립보드에 복사되었습니다!
이 옵션은 Host 헤더가 예상한 값과 일치하지 않는 한 트래픽을 거부하는 해당 API 백엔드에만 필요합니다. 이러한 경우, API 백엔드 앞에 게이트웨이를 사용하면 호스트가 게이트웨이 중 하나(예: xxx-yyy.staging.apicast.io)이므로 문제가 발생할 수 있습니다.
이 문제를 방지하려면 인증 설정의 Host Header 필드에 필요한 API 백엔드를 정의할 수 있으며 호스트 APIcast 인스턴스는 호스트를 다시 작성합니다.
1.9. 프로덕션 배포 링크 복사링크가 클립보드에 복사되었습니다!
API 통합을 구성하고 Staging 환경에서 작동하는지 확인하면 APIcast 프로덕션 배포 중 하나를 사용할 수 있습니다. 이 문서의 시작 부분에 있는 배포 옵션을 참조하십시오.
통합 페이지 하단에서 Production 섹션을 찾을 수 있습니다. 여기에서 두 개의 필드를 찾을 수 있습니다. Private Base URL 은 Staging 섹션에서 구성한 것과 동일합니다. 이 URL은 Public Base URL 입니다.
1.10. 공개 기본 URL 링크 복사링크가 클립보드에 복사되었습니다!
Public Base URL 은 개발자가 API에 요청하는데 사용하는 URL이며 3scale로 보호됩니다. 이 URL은 APIcast 인스턴스의 URL입니다.
자체 관리 배포 옵션 중 하나를 사용하는 경우 관리 중인 도메인 이름에 제공된 환경(태그 및 프로덕션) 각각에 대해 고유한 공개 기본 URL을 선택할 수 있습니다. 이 URL은 API 백엔드 중 하나와 달라야 하며 https://api.yourdomain.com:443 처럼 될 수 있습니다. 여기서 yourdomain.com 은 사용자의 도메인입니다. Public Base URL을 설정하면 변경 사항을 저장하고 필요한 경우 스테이징의 변경 사항을 프로덕션으로 승격합니다.
APIcast는 Public Base URL에 지정된 호스트 이름만 허용합니다. 예를 들어 위에서 사용된 Echo API 예제의 경우 https://echo-api.3scale.net:443 를 공개 기본 URL로 지정하면 올바른 호출은 다음과 같습니다.
curl "https://echo-api.3scale.net:443/hello?user_key=YOUR_USER_KEY"
curl "https://echo-api.3scale.net:443/hello?user_key=YOUR_USER_KEY"
API에 대한 공용 도메인이 없는 경우 요청에서 APIcast IP를 사용할 수도 있지만, 공개 기본 URL 필드에 값을 지정해야 합니다(도메인이 실제가 아니더라도) 이 경우 호스트 헤더에 호스트를 제공해야 합니다.
curl "http://192.0.2.12:80/hello?user_key=YOUR_USER_KEY" -H "Host: echo-api.3scale.net"
curl "http://192.0.2.12:80/hello?user_key=YOUR_USER_KEY" -H "Host: echo-api.3scale.net"
로컬 시스템에 배포하는 경우 도메인으로 "#189"을 사용할 수도 있으므로 Public Base URL은 http://localhost:80 과 같이 표시되므로 다음과 같이 요청할 수 있습니다.
curl "http://localhost:80/hello?user_key=YOUR_USER_KEY"
curl "http://localhost:80/hello?user_key=YOUR_USER_KEY"
API 서비스가 여러 개 있는 경우 각 서비스에 대해 이 공개 기본 URL을 적절하게 설정해야 합니다. APIcast는 호스트 이름을 기반으로 요청을 라우팅합니다.
1.11. API 백엔드 보호 링크 복사링크가 클립보드에 복사되었습니다!
프로덕션 환경에서 APIcast가 작동하면 인증 정보 없이 API 백엔드에 대한 직접 액세스를 제한할 수 있습니다. 이 작업을 수행하는 가장 쉬운 방법은 APIcast에서 설정한 Secret Token을 사용하는 것입니다. 설정하는 방법에 대한 자세한 내용은 Advanced APIcast 설정을 참조하십시오.
1.12. 프라이빗 API에서 APIcast 사용 링크 복사링크가 클립보드에 복사되었습니다!
APIcast를 사용하면 인터넷에서 공개적으로 액세스할 수 없는 API를 보호할 수 있습니다. 요구 사항은 다음과 같습니다.
- APIcast 자체 관리는 배포 옵션으로 사용해야 합니다.
- APIcast는 공용 인터넷에서 액세스할 수 있어야 하며 3scale Service Management API에 대한 아웃바운드 호출을 수행할 수 있어야 합니다.
- API 백엔드는 APIcast에서 액세스할 수 있어야 합니다.
이 경우 Private Base URL 필드에서 내부 도메인 이름 또는 API의 IP 주소를 설정하고 나머지 단계를 정상적으로 수행할 수 있습니다. 그러나 Staging APIcast 인스턴스는 3scale에서 호스팅하므로 Staging 환경을 활용할 수 없으며 개인 API 백엔드에 액세스할 수 없습니다. 그러나 프로덕션 환경에 APIcast를 배포하면 구성이 올바르면 APIcast가 예상대로 작동합니다.
1.13. OpenTracing을 사용하여 APIcast 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenTracing은 마이크로 서비스를 프로파일링 및 모니터링하는 데 사용되는 API 사양 및 방법입니다. 버전 3.3 이후부터 APIcast에는 OpenTracing libraries 및 Jaeger Tracer 라이브러리 가 포함되어 있습니다.
1.13.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 배포에 분산 추적을 추가하려면 다음 사전 요구 사항을 충족해야 합니다.
- 각 외부 요청에는 일반적으로 HTTP 헤더를 통해 고유한 요청 ID가 연결되어 있어야 합니다.
- 각 서비스는 요청 ID를 다른 서비스에 전달해야 합니다.
- 각 서비스는 로그의 요청 ID를 출력해야 합니다.
- 각 서비스는 요청 시작 및 종료 시간과 같은 추가 정보를 기록합니다.
- 로그를 집계하고 HTTP 요청 ID를 통해 구문 분석하는 방법을 제공해야 합니다.
1.13.2. 절차 링크 복사링크가 클립보드에 복사되었습니다!
OpenTracing을 구성하려면 다음 환경 변수를 사용합니다.
- OPENTRACING_TRACER: 사용할 추적 프로그램을 정의합니다. 현재는 Jaeger만 사용할 수 있습니다.
- OPENTRACING_CONFIG: 추적기의 기본 구성 파일을 지정합니다. 여기에 예제를 볼 수 있습니다.
- OPENTRACING_HEADER_FORWARD: 선택 사항입니다. OpenTracing 구성에 따라 이 환경 변수를 설정할 수 있습니다.
이러한 변수에 대한 자세한 내용은 APIcast 환경 변수 를 참조하십시오.
통합이 올바르게 작동하는지 테스트하려면 Jaeger 추적 인터페이스에서 추적이 보고되는지 확인해야 합니다.
1.13.3. 추가 정보 링크 복사링크가 클립보드에 복사되었습니다!
OpenTracing 및 Jaeger 통합은 업스트림 프로젝트에서 사용할 수 있습니다: https://github.com/3scale/apicast
1.13.4. OpenShift 인스턴스에 Jaeger 설치 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 실행 중인 OpenShift 인스턴스에 Jaeger 설치에 대한 정보를 제공합니다.
Jaeger는 APIcast 사용을 제외하고 3scale에서 지원하지 않는 타사 구성 요소입니다. 다음 명령은 참조 예제로만 제공되며 프로덕션용으로는 적합하지 않습니다.
현재 네임스페이스에 Jaeger all-in-one을 설치합니다.
oc process -f https://raw.githubusercontent.com/jaegertracing/jaeger-openshift/master/all-in-one/jaeger-all-in-one-template.yml | oc create -f -
oc process -f https://raw.githubusercontent.com/jaegertracing/jaeger-openshift/master/all-in-one/jaeger-all-in-one-template.yml | oc create -f -Copy to Clipboard Copied! Toggle word wrap Toggle overflow Jaeger 구성 파일
jaeger_config.json을 생성하고 다음을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
샘플러를 1로 설정하여 모든 요청을 샘플링합니다. -
보고서 관리자의 위치 및 대기열 크기 설정
-
요청을 추적하는 데 사용할
TraceContextHeaderName을 포함한헤더설정
-
Jaeger 구성 파일에서 ConfigMap을 생성하고 APIcast에 마운트합니다.
oc create configmap jaeger-config --from-file=jaeger_config.json oc volume dc/apicast --add -m /tmp/jaeger/ --configmap-name jaeger-config
oc create configmap jaeger-config --from-file=jaeger_config.json oc volume dc/apicast --add -m /tmp/jaeger/ --configmap-name jaeger-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 방금 추가한 구성으로 OpenTracing 및 Jaeger를 활성화합니다.
oc env deploymentConfig/apicast OPENTRACING_TRACER=jaeger OPENTRACING_CONFIG=/tmp/jaeger/jaeger_config.json
oc env deploymentConfig/apicast OPENTRACING_TRACER=jaeger OPENTRACING_CONFIG=/tmp/jaeger/jaeger_config.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow Jaeger 인터페이스가 실행 중인 URL을 찾습니다.
oc get route (…) jaeger-query-myproject.127.0.0.1.nip.io
oc get route (…) jaeger-query-myproject.127.0.0.1.nip.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이전 단계에서 Jaeger 인터페이스를 엽니다. 이 인터페이스는 Openshift Health 검사에서 채워지는 데이터를 보여줍니다.
- 마지막 단계는 전체 요청 추적을 볼 수 있도록 OpenTracing 및 Jaeger 지원을 백엔드 API에 추가하는 것입니다. 이는 사용되는 프레임워크 및 언어에 따라 백엔드마다 다릅니다. 참조 예제에서는 Jaeger와 함께 OpenTracing 사용을 참조하여 Kubernetes에서 애플리케이션 지표를 수집할 수 있습니다.
Jaeger 구성에 대한 자세한 내용은: * OpenShift 개발 설정 * Jaeger on OpenShift 프로덕션 설정 * distributed tracing on OpenShift Service Mesh에서 참조하십시오.
2장. Docker 컨테이너 환경의 APIcast 링크 복사링크가 클립보드에 복사되었습니다!
이는 3scale API 게이트웨이로 사용할 준비가 된 Docker 형식의 컨테이너 내부에 APIcast를 배포하는 단계별 가이드입니다.
2.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 개요에 따라 3scale 관리 포털에서 APIcast 를 구성해야 합니다.
2.2. 1단계: Docker 컨테이너 환경 설치 링크 복사링크가 클립보드에 복사되었습니다!
이 가이드에서는 RHEL(Red Hat Enterprise Linux) 7에서 Docker 컨테이너화된 환경을 설정하는 단계를 설명합니다.
Red Hat에서 제공하는 Docker 형식의 컨테이너는 RHEL에서 Extras 채널의 일부로 릴리스됩니다. 추가 리포지토리를 활성화하려면 Subscription Manager 또는 yum config manager를 사용할 수 있습니다. 자세한 내용은 RHEL 제품 설명서를 참조하십시오.
AWS EC2 인스턴스에 RHEL 7을 배포하려면 다음 단계를 따르십시오.
-
모든 리포지토리 나열합니다:
sudo yum repolist all. -
*-extras리포지토리를 찾습니다. -
extras리포지토리sudo yum-config-manager --enable rhui-REGION-rhel-server-extras를 활성화합니다. -
Docker 컨테이너 환경 패키지 설치:
sudo yum install docker.
다른 운영 체제의 경우 다음 Docker 설명서를 참조하십시오.
2.3. 2 단계: Docker 컨테이너화된 환경 게이트웨이 실행 링크 복사링크가 클립보드에 복사되었습니다!
Docker 데몬을 시작합니다.
sudo systemctl start docker.service.Docker 데몬이 실행 중인지 확인합니다.
sudo systemctl status docker.service.Red Hat 레지스트리에서 Docker 형식의 컨테이너 이미지를 사용할 준비가 되어 있습니다.
sudo docker pull registry.access.redhat.com/3scale-amp24/apicast-gateway.Docker 형식의 컨테이너에서 APIcast를 실행합니다.
sudo docker run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://<access_token>@<domain>-admin.3scale.redhat.com/3scale-amp24/apicast-gateway.여기서 &
lt;access_token>은 3scale 계정 관리 API의 액세스 토큰 입니다. 액세스 토큰 대신 공급자 키를 사용할 수 있습니다.<domain>-admin.3scale.net은 3scale 관리자 포털의 URL입니다.
이 명령은 포트 8080 에서 "apicast" 라는 Docker 형식의 컨테이너를 실행하고 3scale 포털에서 JSON 구성 파일을 가져옵니다. 다른 구성 옵션은 APIcast 개요 가이드를 참조하십시오.
2.3.1. Docker 명령 옵션 링크 복사링크가 클립보드에 복사되었습니다!
docker run 명령과 함께 다음 옵션을 사용할 수 있습니다.
-
--rm: 종료 시 컨테이너를 자동으로 제거합니다. -
-d또는--detach: 백그라운드에서 컨테이너를 실행하고 컨테이너 ID를 출력합니다. 지정하지 않으면 컨테이너가 전경 모드에서 실행되며CTRL + c를 사용하여 중지할 수 있습니다. 분리된 모드에서 시작하면docker attach명령을 사용하여 컨테이너에 다시 연결할 수 있습니다(예:docker attach apicast). -
-p또는--publish: 컨테이너의 포트를 호스트에 게시합니다. 값의 형식은<host port="">:<container port="">이므로-p 80:8080은 컨테이너의 포트8080을 호스트 시스템의 포트80에 바인딩합니다. 예를 들어 관리 API 에서는 포트8090을 사용하므로docker run명령에-p 8090:8090을 추가하여 이 포트를 게시할 수 있습니다. -
-e또는--env: 환경 변수를 설정합니다. -
-v또는--volume: 볼륨을 마운트합니다. 값은 일반적으로<host path="">:<container path="">[:<options>]로 표시됩니다.<options>는 선택적 특성입니다. 이 특성을:ro로 설정하여 볼륨을 읽기 전용으로 지정할 수 있습니다(기본적으로 읽기 전용 모드임). 예:-v /host/path:/container/path:ro.
사용 가능한 옵션에 대한 자세한 내용은 Docker 실행 참조를 확인하십시오.
2.4. 3 단계: 테스트 APIcast 링크 복사링크가 클립보드에 복사되었습니다!
이전 단계에서는 Docker 형식의 컨테이너가 3scale 레지스트리에서 자체 구성 파일 및 Docker 형식의 이미지로 실행 중인지 확인합니다. 포트 8080 에서 APIcast를 통해 호출을 테스트하고 3scale 계정에서 가져올 수 있는 올바른 인증 정보를 제공할 수 있습니다.
테스트 호출은 APIcast가 올바르게 실행되고 있는지 확인할 뿐만 아니라 인증 및 보고가 성공적으로 처리되고 있는지도 확인합니다.
호출에 사용하는 호스트가 Integration (통합) 페이지의 Public Base URL 필드에 구성된 호스트와 같은지 확인합니다.
2.5. 4 단계: Docker 컨테이너 환경에서 APIcast 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
2.5.1. Docker 데몬 오류에 연결할 수 없음 링크 복사링크가 클립보드에 복사되었습니다!
docker: Cannot connect to the Docker daemon. 이 호스트에서 Docker 데몬이 실행 중입니까? Docker 서비스가 시작되지 않았기 때문에 오류 메시지가 표시될 수 있습니다. sudo systemctl status docker.service 명령을 실행하여 Docker 데몬의 상태를 확인할 수 있습니다.
Docker 컨테이너 환경에는 기본적으로 RHEL에서 root 권한이 필요하므로 이 명령을 root 사용자로 실행했는지 확인합니다. 자세한 내용은 여기에서참조하십시오.
2.5.2. 기본 Docker 명령줄 인터페이스 명령 링크 복사링크가 클립보드에 복사되었습니다!
분리된 모드(-d 옵션)에서 컨테이너를 시작하고 실행 중인 APIcast 인스턴스가 로그를 확인하려는 경우 log 명령인 sudo docker logs <container >를 사용할 수 있습니다. 여기서 <container& gt;는 컨테이너 이름(위 예의"apicast ") 또는 컨테이너 ID입니다. sudo docker ps 명령을 사용하여 실행 중인 컨테이너 및 해당 ID 및 이름 목록을 가져올 수 있습니다.
컨테이너를 중지하려면 sudo docker stop <container> 명령을 실행합니다. sudo docker rm <container> 명령을 실행하여 컨테이너를 제거할 수도 있습니다.
사용 가능한 명령에 대한 자세한 내용은 Docker 명령 참조를 참조하십시오.
3장. Red Hat OpenShift에서 APIcast 실행 링크 복사링크가 클립보드에 복사되었습니다!
이 튜토리얼에서는 Red Hat OpenShift에 APIcast API 게이트웨이를 배포하는 방법을 설명합니다.
3.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
아래 튜토리얼 단계를 따르려면 먼저 3scale 관리 포털에서 APIcast를 APIcast 개요 에 따라 구성해야 합니다. 통합 설정에서 자체 관리 게이트웨이가 배포 옵션으로 선택되어 있는지 확인합니다. Staging 및 Production 환경을 계속 진행하도록 구성되어 있어야 합니다.
3.2. 1 단계: OpenShift 설정 링크 복사링크가 클립보드에 복사되었습니다!
이미 실행 중인 OpenShift 클러스터가 있는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않은 경우 계속 읽으십시오.
프로덕션 배포의 경우 OpenShift 설치에 대한 지침을 따를 수 있습니다.
이 튜토리얼에서는 다음을 사용하여 OpenShift 클러스터를 설치합니다.
- Red Hat Enterprise Linux (RHEL) 7
- Docker 컨테이너 환경 v1.10.3
- OpenShift Origin CLI(명령줄 인터페이스) - v1.3.1
3.2.1. Docker 컨테이너 환경 설치 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat에서 제공하는 Docker 형식의 컨테이너 이미지는 RHEL에서 Extras 채널의 일부로 릴리스됩니다. 추가 리포지토리를 활성화하려면 서브스크립션 관리자 또는 yum config 관리자를 사용할 수 있습니다. 자세한 내용은 RHEL 제품 설명서 를 참조하십시오.
AWS EC2 인스턴스에 배포된 RHEL 7의 경우 다음 지침을 사용합니다.
모든 리포지토리를 나열합니다.
sudo yum repolist all
sudo yum repolist allCopy to Clipboard Copied! Toggle word wrap Toggle overflow *추출된 리포지토리를 찾아 활성화합니다.sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
sudo yum-config-manager --enable rhui-REGION-rhel-server-extrasCopy to Clipboard Copied! Toggle word wrap Toggle overflow Docker 형식의 컨테이너 이미지를 설치합니다.
sudo yum install docker docker-registry
sudo yum install docker docker-registryCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/docker파일에 다음 행을 추가하거나 제거하여172.30.0.0/16의 비보안 레지스트리를 추가합니다.INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Docker 서비스를 시작합니다.
sudo systemctl start docker
sudo systemctl start dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 사용하여 컨테이너 서비스가 실행 중인지 확인할 수 있습니다.
sudo systemctl status docker
sudo systemctl status docker
3.2.2. OpenShift 클러스터 시작 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift 릴리스 페이지에서 클라이언트 툴의 안정적인 최신 릴리스 (openshift-origin-client-tools-VERSION-linux-64bit.tar.gz)를 다운로드하여 PATH 에 있는 아카이브에서 추출된 Linux oc 바이너리를 배치합니다.
-
oc clusterset of commands은 1.3+ 이상 버전에서만 사용할 수 있습니다. -
docker 명령은
root사용자로 실행되므로 root 권한으로oc또는 docker 명령을 실행해야 합니다.
docker 명령을 실행하고 다음을 실행할 수 있는 권한이 있는 사용자로 터미널을 엽니다.
oc cluster up
oc cluster up
출력 하단에서 배포된 클러스터에 대한 정보를 확인할 수 있습니다.
OpenShift 서버에 할당된 IP 주소를 확인합니다. 이 튜토리얼에서 OPENSHIFT-SERVER-IP 를 참조합니다.
3.2.2.1. 원격 서버에서 OpenShift 클러스터 설정 링크 복사링크가 클립보드에 복사되었습니다!
원격 서버에 OpenShift 클러스터를 배포하는 경우 클러스터 시작 시 공용 호스트 이름과 라우팅 접미사를 명시적으로 지정해야 OpenShift 웹 콘솔에 원격으로 액세스할 수 있습니다.
예를 들어 AWS EC2 인스턴스에 배포하는 경우 다음 옵션을 지정해야 합니다.
oc cluster up --public-hostname=ec2-54-321-67-89.compute-1.amazonaws.com --routing-suffix=54.321.67.89.xip.io
oc cluster up --public-hostname=ec2-54-321-67-89.compute-1.amazonaws.com --routing-suffix=54.321.67.89.xip.io
여기서 ec2-54-321-67-89.amazonaws.com 은 공용 도메인이며 54.321.67.89 는 인스턴스의 IP입니다. 그러면 https://ec2-54-321-67-89.compute-1.amazonaws.com:8443 에서 OpenShift 웹 콘솔에 액세스할 수 있습니다.
3.3. 2단계: OpenShift 템플릿을 사용하여 APIcast 배포 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 개발자로 로그인하여 다음 단계를 진행할 수 있습니다.
그렇지 않으면 이전 단계에서 다운로드하여 설치한 OpenShift 클라이언트 툴에서
oc login명령을 사용하여 OpenShift에 로그인합니다. 기본 로그인 인증 정보는 username = " developer" 및 password = " developer" 입니다.oc login https://OPENSHIFT-SERVER-IP:8443
oc login https://OPENSHIFT-SERVER-IP:8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow Login successful.출력이 표시되어야 합니다.프로젝트를 생성합니다. 이 예에서는 표시 이름을 게이트웨이로설정
oc new-project "3scalegateway" --display-name="gateway" --description="3scale gateway demo"
oc new-project "3scalegateway" --display-name="gateway" --description="3scale gateway demo"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 응답은 다음과 같아야 합니다.
Now using project "3scalegateway" on server "https://172.30.0.112:8443".
Now using project "3scalegateway" on server "https://172.30.0.112:8443".Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 프롬프트의 텍스트 출력에서 제안된 다음 단계를 무시하고 아래의 다음 단계로 진행합니다.
<access_token>및<domain>을 자체 인증 정보로 교체하여 프로젝트를 참조하는 새 시크릿을 생성합니다.<access_token>및<domain>에 대한 자세한 내용은 아래를 참조하십시오.oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<access_token>@<admin_portal_domain> --type=kubernetes.io/basic-auth
oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<access_token>@<admin_portal_domain> --type=kubernetes.io/basic-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서 <
access_token>은 3scale 계정 관리 API의 액세스 토큰 (서비스 토큰 아님)이며 <domain>-admin.3scale.net은 3scale 관리 포털의 URL입니다.응답은 다음과 같아야 합니다.
secret/apicast-configuration-url-secret
secret/apicast-configuration-url-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 템플릿에서 APIcast 게이트웨이에 대한 애플리케이션을 생성하고 배포를 시작합니다.
oc new-app -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.4.0.GA/apicast-gateway/apicast.yml
oc new-app -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.4.0.GA/apicast-gateway/apicast.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 하단에 다음 메시지가 표시됩니다.
--> Creating resources with label app=3scale-gateway ... deploymentconfig "apicast" created service "apicast" created --> Success Run 'oc status' to view your app.--> Creating resources with label app=3scale-gateway ... deploymentconfig "apicast" created service "apicast" created --> Success Run 'oc status' to view your app.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. 3 단계: OpenShift 콘솔에서 경로 생성 링크 복사링크가 클립보드에 복사되었습니다!
브라우저에서 OpenShift 클러스터의 웹 콘솔을 엽니다. https://OPENSHIFT-SERVER-IP:8443/console/
원격 서버에서 OpenShift 클러스터를 시작한 경우
OPENSHIFT-SERVER-IP대신--public-hostname에 지정된 값을 사용합니다.로그인 화면이 표시됩니다.
참고신뢰할 수 없는 웹 사이트에 대한 경고가 표시될 수 있습니다. 이는 유효한 인증서를 구성하지 않고도 보안 프로토콜을 통해 웹 콘솔에 액세스하려고 하기 때문에 이는 예상된 결과입니다. 프로덕션 환경에서 이 문제를 방지해야 하지만 이 테스트 설정에서는 계속 진행하여 이 주소에 대한 예외를 생성할 수 있습니다.
생성된 개발자 자격 증명을 사용하여 로그인하거나 위의 설정 OpenShift 섹션에서 가져옵니다.
위의 명령줄에서 생성한 게이트웨이 프로젝트를 포함하여 프로젝트 목록이 표시됩니다.
게이트웨이 프로젝트가 표시되지 않으면 다른 사용자로 만들었을 수 있으며 이 사용자에게 정책 역할을 할당해야 합니다.
게이트웨이 링크를 클릭하면 개요 탭이 표시됩니다.
OpenShift는 APIcast용 코드를 다운로드하고 배포를 시작했습니다. 배포가 진행 중일 때 실행 중인 Deployment #1 메시지가 표시될 수 있습니다.
빌드가 완료되면 UI가 새로 고쳐지고 템플릿에 정의된 OpenShift에서 시작한 APIcast 인스턴스 2개(포드 2 개)가 표시됩니다.
각 APIcast 인스턴스는 시작 시 3scale 관리 포털의 통합 페이지에서 제공한 설정을 사용하여 3scale에서 필요한 구성을 다운로드합니다.
OpenShift는 두 개의 APIcast 인스턴스를 유지 관리하고 두가지 모두의 상태를 모니터링합니다. 비정상 APIcast 인스턴스는 자동으로 새 APIcast 인스턴스로 교체됩니다.
APIcast 인스턴스가 트래픽을 수신하도록 허용하려면 경로를 생성해야 합니다. 경로 생성을 클릭하여 시작합니다.
위의 3scale에 설정한 것과 동일한 호스트를 Public Base URL 섹션에 (http:// 및 포트 없이)
gateway.openshift.demo와 같이 입력한 다음 만들기 버튼을 클릭합니다.정의한 모든 3scale 서비스에 대해 새 경로를 생성해야 합니다. 또는 정의한 모든 3scale 서비스에 대해 새 경로를 생성하지 않도록 APIcast 와일드카드 라우터 를 구성할 수 있습니다.
4장. 고급 APIcast 구성 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 스테이징 환경에서 3scale의 API 게이트웨이의 고급 설정 옵션에 대해 설명합니다.
4.1. 보안 토큰 정의 링크 복사링크가 클립보드에 복사되었습니다!
보안상의 이유로 3scale 게이트웨이에서 API 백엔드로의 모든 요청에는 X-3scale-proxy-secret-token 이라는 헤더가 포함됩니다. 통합 페이지의 인증 설정에서 이 헤더 값을 설정할 수 있습니다.
시크릿 토큰을 설정하면 프록시와 API 간에 공유 시크릿 역할을 하므로 사용자가 필요하지 않은 경우 게이트웨이에서 가져오지 않는 모든 API 요청을 차단할 수 있습니다. 이렇게 하면 샌드박스 게이트웨이를 사용하여 트래픽 관리 정책을 설정하는 과정에서 공용 끝점을 보호할 수 있는 추가 보안 계층이 추가됩니다.
API 백엔드에는 게이트웨이가 작동할 수 있는 공개 확인 가능한 도메인이 있어야 하므로 API 백엔드를 알고 있는 모든 사용자가 인증 정보를 바이패스할 수 있습니다. 스테이징 환경의 API 게이트웨이는 프로덕션 사용을 위한 것이 아니라, 항상 펜싱을 사용할 수 있기 때문에 문제가 되지 않아야 합니다.
4.2. 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
3scale 내의 API 인증 정보는 사용 중인 인증 모드에 따라 user_key 또는 app_id/app_key 입니다. OpenID Connect는 스테이징 환경의 API 게이트웨이에 적합하지만 통합 페이지에서 테스트할 수 없습니다.
그러나 API에서 다양한 자격 증명 이름을 사용할 수 있습니다. 이 경우 API 키 모드를 사용하는 경우 user_key 의 사용자 정의 이름을 설정해야 합니다.
또는 app_id 및 app_key 의 경우:
예를 들어 API에 더 적합한 경우 app_id 를 key 로 변경할 수 있습니다. 게이트웨이는 3scale 백엔드에 대한 권한 부여 호출을 수행하기 전에 name 키를 사용하여 app_id 로 변환합니다. 새 자격 증명 이름은 영숫자여야 합니다.
API가 쿼리 문자열(또는 GET이 아닌 경우 본문) 또는 헤더에서 인증 정보를 전달하는지 여부를 결정할 수 있습니다.
APIcast는 인증 정보를 추출할 때 헤더 이름을 정규화합니다. 즉, 대소문자를 구분하지 않으며 밑줄과 하이픈은 동일하게 처리됩니다. 예를 들어 앱 키 매개변수를 App_Key 로 설정하면 app-key 와 같은 다른 값도 유효한 앱 키 헤더로 허용됩니다.
4.3. 오류 메시지 링크 복사링크가 클립보드에 복사되었습니다!
완전한 구성을 위한 또 다른 중요한 요소는 사용자 정의 오류 메시지를 정의하는 것입니다.
스테이징 환경의 3scale API 게이트웨이는 API에서 생성한 오류 메시지를 전달합니다. 그러나 이제 API의 관리 계층을 게이트웨이에서 수행하므로 일부 요청이 게이트웨이에 의해 종료되므로 API에서 볼 수 없는 몇 가지 오류가 있습니다.
다음은 몇 가지 오류입니다.
- 인증이 누락됨: API 요청에 인증 정보가 포함되어 있지 않을 때마다 이 오류가 생성됩니다. 사용자가 API 요청에 자격 증명을 추가하지 않으면 발생합니다.
- Authentication failed: 이 오류는 API 요청에 유효한 인증 정보가 포함되어 있지 않을 때마다 생성됩니다. 자격 증명이 페이크되었거나 애플리케이션이 일시적으로 일시 중단되었기 때문일 수 있습니다.
- no match: 이 오류는 요청이 매핑 규칙과 일치하지 않으므로 메트릭이 업데이트되지 않음을 의미합니다. 이는 반드시 오류일 필요는 없지만 사용자가 임의의 경로를 시도하거나 매핑 규칙이 적법한 경우를 포함하지 않음을 의미합니다.
- Retry after: API 요청이 속도 제한을 초과하면 이 오류가 트리거됩니다. 상태 코드가 429이고 제한이 만료될 때까지 시간(초)이 있는 Retry-After 헤더가 반환됩니다.
4.4. 구성 내역 링크 복사링크가 클립보드에 복사되었습니다!
Update & Test Staging Configuration 버튼을 클릭하면 현재 구성이 JSON 파일에 저장됩니다. 스테이징 게이트웨이는 새 요청마다 최신 구성을 가져옵니다. 각 환경인 스테이징 또는 프로덕션 환경에 대해 이전의 모든 구성 파일의 기록을 볼 수 있습니다.
이전 버전으로 자동으로 롤백할 수 없습니다. 대신 관련 JSON 파일이 있는 모든 구성 버전의 기록이 제공됩니다. 이 파일을 사용하여 언제든지 배포한 구성을 확인합니다. 원하는 경우 배포를 수동으로 다시 생성할 수 있습니다.
4.5. 디버깅 링크 복사링크가 클립보드에 복사되었습니다!
게이트웨이 구성을 설정하는 것은 쉽지만 여전히 오류가 발생할 수 있습니다. 이러한 경우 게이트웨이는 유용한 디버그 정보를 반환하여 오류를 추적할 수 있습니다.
APIcast에서 디버깅 정보를 얻으려면 API 요청에 다음 헤더를 추가해야 합니다. X-3scale-debug: {SERVICE_TOKEN} 에 도달한 API 서비스에 해당하는 서비스 토큰이 있어야 합니다.
헤더가 있고 서비스 토큰이 유효하면 게이트웨이는 응답 헤더에 다음 정보를 추가합니다.
X-3scale-matched-rules: /v1/word/{word}.json, /v1
X-3scale-credentials: app_key=APP_KEY&app_id=APP_ID
X-3scale-usage: usage%5Bversion_1%5D=1&usage%5Bword%5D=1
X-3scale-matched-rules: /v1/word/{word}.json, /v1
X-3scale-credentials: app_key=APP_KEY&app_id=APP_ID
X-3scale-usage: usage%5Bversion_1%5D=1&usage%5Bword%5D=1
x-3scale-matched-rules 는 쉼표로 구분된 목록에서 요청에 일치하는 매핑 규칙을 나타냅니다.
X-3scale-credentials 헤더는 3scale 백엔드에 전달된 인증 정보를 반환합니다.
x-3scale-usage 는 3scale 백엔드에 보고된 사용량을 나타냅니다. usage%5Bversion_1%5%5D=1&usage%5B 은 URL로 인코딩된 word %5D=1사용 [version_1]=1&usage[word]=1 이며 API 요청이 각각 1개의 메서드(metrics) 버전_1 을 초과했음을 보여줍니다.
4.6. 경로 라우팅 링크 복사링크가 클립보드에 복사되었습니다!
APIcast는 3scale 계정에 구성된 모든 API 서비스를 처리합니다(또는 APICAST_SERVICES_LIST 환경 변수가 구성된 경우 서비스의 하위 집합). 일반적으로 APIcast는 공용 기본 URL 과 일치하여 요청의 호스트 이름을 기반으로 API 요청을 적절한 API 서비스로 라우팅합니다. 일치 항목이 있는 첫 번째 서비스는 권한 부여에 사용됩니다.
경로 라우팅 기능을 사용하면 여러 서비스에서 동일한 공용 기본 URL 을 사용할 수 있으며 요청 경로를 사용하여 요청을 라우팅할 수 있습니다. 기능을 활성화하려면 APICAST_PATH_ROUTING 환경 변수를 true 또는 1 로 설정합니다. 이 기능을 활성화하면 APIcast는 호스트 이름과 경로를 기반으로 들어오는 요청을 서비스에 매핑합니다.
이 기능은 동일한 공용 기본 URL 을 사용하는 하나의 게이트웨이를 통해 다른 도메인에 호스팅되는 여러 백엔드 서비스를 노출하려는 경우에 사용할 수 있습니다. 이를 위해 각 API 백엔드(예: Private Base URL)에 대해 여러 API 서비스를 구성하고 경로 라우팅 기능을 활성화할 수 있습니다.
예를 들어 다음과 같은 방법으로 3개의 서비스가 구성되어 있습니다.
-
Service A Public Base URL:
api.example.comMapping 규칙:/a -
Service B Public Base URL:
api2.example.comMapping 규칙:/b -
Service C Public Base URL:
api.example.comMapping 규칙:/c
경로 라우팅이 비활성화되어 있는 경우(APICAST_PATH_ROUTING=false), api.example.com 에 대한 모든 호출은 서비스 A. 즉, api.example.com/c 및 api.example.com/b 호출이 "No Mapping Rule matched" 오류와 함께 실패합니다.
경로 라우팅이 활성화된 경우(APICAST_PATH_ROUTING=true) 호스트 및 경로와 모두 호출이 일치합니다. so:
-
api.example.com/a는 서비스 A로 라우팅됩니다. -
api.example.com/c는 Service C로 라우팅됩니다. -
api.example.com/b는 "No Mapping Rule matched" 오류로 인해 실패합니다. 즉, Public Base URL 이 일치하지 않기 때문에 서비스 B와 일치하지 않습니다.
경로 라우팅을 사용하는 경우 동일한 공개 기본 URL 을 사용하는 여러 서비스의 매핑 규칙 간에 충돌이 없는지 확인해야 합니다. 즉 메서드 + 경로 패턴의 각 조합은 하나의 서비스에서만 사용됩니다.
5장. APIcast 정책 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 정책은 APIcast 작동 방식을 수정하는 기능 단위입니다. 정책을 활성화, 비활성화 및 APIcast 수정 방법을 제어하도록 구성할 수 있습니다. 정책을 사용하여 기본 APIcast 배포에서 사용할 수 없는 기능을 추가합니다. 고유한 정책을 생성하거나 Red Hat 3scale에서 제공하는 표준 정책을 사용할 수 있습니다.
다음 주제에서는 표준 APIcast 정책에 대한 정보를 제공하고 자체 사용자 지정 APIcast 정책을 만들고 정책 체인을 생성합니다.
정책 체인이 있는 서비스에 대한 제어 정책입니다. 정책 체인에서는 다음을 수행합니다.
- APIcast가 사용하는 정책 지정
- 3scale 사용 정책에 대한 구성 정보 제공
- 3scale 로드 정책의 순서 지정
Red Hat 3scale은 사용자 지정 정책을 추가할 수 있는 방법을 제공하지만 사용자 지정 정책은 지원하지 않습니다.
사용자 지정 정책으로 APIcast 동작을 수정하려면 다음을 수행해야 합니다.
- APIcast에 사용자 정의 정책 추가
- APIcast 정책을 구성하는 정책 체인 정의
- 정책 체인을 APIcast에 추가
5.1. APIcast 표준 정책 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat 3scale은 다음과 같은 표준 정책을 제공합니다.
- 5.1.1절. “3scale Auth Caching 정책”
- 5.1.2절. “3scale Batcher Policy”
- 5.1.3절. “익명 액세스 정책”
- 5.1.4절. “CORS 요청 처리 정책”
- 5.1.5절. “echo Policy”
- 5.1.6절. “엣지 제한 정책”
- 5.1.7절. “헤더 수정 정책”
- 5.1.9절. “유동 컨텍스트 디버그 정책”
- 5.1.10절. “로깅 정책”
- 5.1.14절. “Prometheus 지표”
- 5.1.11절. “OAuth 2.0 토큰 인트로스펙션 정책”
- 5.1.12절. “referrer 정책”
- 5.1.13절. “rh-SSO/Keycloak 역할 점검 정책”
- 5.1.15절. “NetNamespace 정책”
- 5.1.16절. “업스트림 정책”
- 5.1.17절. “URL 재작성 정책”
- 5.1.18절. “캡처 정책을 사용하여 URL 재작성”
3scale API Management에서 표준 정책을 활성화하고 구성할 수 있습니다.
5.1.1. 3scale Auth Caching 정책 링크 복사링크가 클립보드에 복사되었습니다!
3scale Auth Caching 정책은 APIcast에 대한 인증 호출을 캐시합니다. 운영 모드를 선택하여 캐시 작업을 구성할 수 있습니다.
3scale Auth Caching은 다음 모드에서 사용할 수 있습니다.
1. strict - 권한 있는 호출만 캐시합니다.
"제한" 모드는 권한 있는 호출만 캐시합니다. 정책이 "제한" 모드에서 실행되고 호출이 실패하거나 거부되면 정책이 캐시 항목을 무효화합니다. 백엔드에 연결할 수 없게 되면 캐시된 모든 호출이 해당 캐시된 상태와 관계없이 거부됩니다.
2. 복원력 - 백엔드가 다운될 때 마지막 요청에 따라 승인합니다.
"Resilient" 모드는 권한 및 거부된 호출을 모두 캐시합니다. 정책이 "resilient" 모드에서 실행 중인 경우 실패한 호출은 기존 캐시 항목을 무효화하지 않습니다. 백엔드에 연결할 수 없는 경우 호출이 캐시된 상태에 따라 캐시를 계속 인증하거나 거부합니다.
3. allow - 백엔드가 다운되면 이전에 보거나 거부하지 않는 한 모든 항목을 허용하십시오.
"Allow" 모드는 권한 및 거부된 호출을 모두 캐시합니다. 정책이 "허용" 모드에서 실행 중인 경우 캐시된 호출은 캐시된 상태에 따라 계속 거부되거나 허용됩니다. 그러나 새 호출은 인증된 대로 캐시됩니다.
"허용" 모드에서 작업하는 경우 보안에 영향을 미칩니다. "허용" 모드를 사용할 때는 이러한 영향을 고려하고 주의하십시오.
4. none - 캐싱을 비활성화합니다.
"None" 모드는 캐싱을 비활성화합니다. 이 모드는 정책이 활성 상태로 유지되지만 캐싱을 사용하지 않으려는 경우 유용합니다.
구성 속성
| 속성 | description | 값 | 필수 여부 |
|---|---|---|---|
| caching_type |
| 데이터 유형: 열거된 문자열 [resilient, strict, allow, none] | 제공됨 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.2. 3scale Batcher Policy 링크 복사링크가 클립보드에 복사되었습니다!
3scale Batcher 정책은 표준 APIcast 인증 메커니즘에 대한 대안을 제공합니다. 이 메커니즘은 3scale 백엔드(Service Management API)에 대한 호출이 각 API 요청 APIcast 수신에 대해 이루어집니다.
3scale Batcher 정책은 3scale 백엔드에 대한 요청 수를 크게 줄여 대기 시간을 줄이고 처리량을 증가시킵니다. 이를 위해 이 정책은 권한 부여 상태를 캐시하고 사용 보고서를 일괄 처리합니다.
3scale Batcher 정책이 활성화되면 APIcast는 다음과 같은 권한 부여 흐름을 사용합니다.
각 요청에서 정책은 인증 정보가 캐시되는지 확인합니다.
- 인증 정보가 캐시되면 정책은 3scale 백엔드를 호출하는 대신 캐시된 권한 부여 상태를 사용합니다.
- 인증 정보가 캐시되지 않으면 정책에서 백엔드를 호출하고 구성 가능한 TTL(Time to Live)으로 권한 부여 상태를 캐시합니다.
- 3scale 백엔드에 대한 요청에 해당하는 사용량을 즉시 보고하는 대신 정책은 사용량 카운터를 누적하여 백엔드에 일괄적으로 보고합니다. 별도의 스레드는 구성 가능한 빈도로 누적된 사용 카운터를 단일 호출로 3scale 백엔드에 보고합니다.
3scale Batcher 정책은 처리량을 개선하지만 정확도가 감소합니다. 사용 제한 및 현재 사용률은 3scale에 저장되며 APIcast는 3scale 백엔드를 호출할 때만 올바른 권한 부여 상태를 가져올 수 있습니다. 3scale Batcher 정책이 활성화되면 APIcast가 3scale로 호출을 보내지 않는 기간이 있습니다. 이 창에서 호출을 수행하는 애플리케이션은 정의된 제한을 초과할 수 있습니다.
처리량이 속도 제한의 정확도보다 더 중요한 경우 높은 로드 API에 이 정책을 사용합니다. 3scale Batcher 정책은 보고 빈도 및 권한 부여 TTL이 속도 제한 기간보다 훨씬 작으면 보다 나은 정확도를 제공합니다. 예를 들어 제한이 일당이고 보고 빈도 및 권한 부여 TTL이 몇 분으로 구성된 경우.
3scale Batcher 정책은 다음 구성 설정을 지원합니다.
auths_ttl: 권한 부여 캐시가 만료되는 시간(초)을 설정합니다.현재 호출에 대한 인증이 캐시되면 APIcast는 캐시된 값을 사용합니다.
auths_ttl매개변수에 설정된 시간이 지나면 APIcast는 캐시를 제거하고 3scale 백엔드를 호출하여 권한 부여 상태를 검색합니다.-
batch_report_seconds: 배치의 빈도를 3scale 백엔드에 APIcast로 보냅니다. 기본값은10초입니다.
이 정책을 사용하려면 정책 체인에서 3scale APIcast 및 3scale Batcher 정책을 모두 활성화합니다.
5.1.3. 익명 액세스 정책 링크 복사링크가 클립보드에 복사되었습니다!
익명 액세스 정책은 인증 없이 서비스를 노출합니다. 예를 들어 인증 매개 변수를 전송하도록 조정할 수 없는 레거시 애플리케이션에 유용할 수 있습니다. 익명 정책은 API 키 및 앱 ID / 앱 키 인증 옵션이 있는 서비스만 지원합니다. 제공된 자격 증명이 없는 API 요청에 정책이 활성화되면 APIcast는 정책에 구성된 기본 인증 정보를 사용하여 호출에 권한을 부여합니다. API 호출을 인증하려면 구성된 인증 정보가 있는 애플리케이션이 존재하고 활성 상태여야 합니다.
애플리케이션 계획을 사용하면 기본 자격 증명에 사용된 애플리케이션에서 속도 제한을 구성할 수 있습니다.
이 두 정책을 정책 체인에 함께 사용할 때 APIcast 정책 앞에 무명 액세스 정책을 배치해야합니다.
다음은 정책에 필요한 구성 속성입니다.
auth_type: 아래 대안 중 하나에서 값을 선택하고 속성이 API에 대해 구성된 인증 옵션에 해당하는지 확인하십시오.
- app_id_and_app_key: 앱 ID / 앱 키 인증 옵션입니다.
- user_key: API 키 인증 옵션입니다.
- app_id ( app_id_and_app_key auth 유형 전용): API 호출을 통해 인증 정보가 제공되지 않는 경우 권한 부여에 사용되는 애플리케이션의 앱 Id입니다.
- app_key ( app_id_and_app_key auth 유형 전용): API 호출과 함께 자격 증명이 제공되지 않는 경우 권한 부여에 사용되는 애플리케이션의 앱 키입니다.
- user_key ( user_key auth_type 전용): API 호출이 제공된 인증 정보가 없는 경우 권한 부여에 사용할 애플리케이션의 API 키입니다.
그림 5.1. 익명 액세스 정책
5.1.4. CORS 요청 처리 정책 링크 복사링크가 클립보드에 복사되었습니다!
CORS(CrossOrigin Resource Sharing) 요청 처리 정책을 사용하면 다음을 지정할 수 있으므로 CORS 동작을 제어할 수 있습니다.
- 허용된 헤더
- 허용되는 방법
- 인증 정보 허용
- 허용된 원본 헤더
CORS 요청 처리 정책은 지정되지 않은 모든 CORS 요청을 차단합니다.
이 두 정책을 정책 체인에서 함께 사용할 때 APIcast 정책 전에 CORS 요청 처리 정책을 배치해야합니다.
구성 속성
| 속성 | description | 값 | 필수 여부 |
|---|---|---|---|
| allow_headers |
| 데이터 유형: 문자열 배열은 CORS 헤더여야 합니다. | 제공되지 않음 |
| allow_methods |
| 데이터 유형: 열거된 문자열 [GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT]의 배열 | 제공되지 않음 |
| allow_origin |
| 데이터 유형: 문자열 | 제공되지 않음 |
| allow_credentials |
| 데이터 유형: boolean | 제공되지 않음 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.5. echo Policy 링크 복사링크가 클립보드에 복사되었습니다!
echo 정책은 들어오는 요청을 클라이언트에 다시 출력하고 선택적 HTTP 상태 코드를 출력합니다.
구성 속성
| 속성 | description | 값 | 필수 여부 |
|---|---|---|---|
| status | 에코 정책이 클라이언트로 반환되는 HTTP 상태 코드 | 데이터 유형: 정수 | 제공되지 않음 |
| exit |
에코 정책이 사용할 종료 모드를 지정합니다. | 데이터 유형: 열거된 문자열 [request, set] | 제공됨 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.6. 엣지 제한 정책 링크 복사링크가 클립보드에 복사되었습니다!
Edge 제한 정책은 백엔드 API로 전송된 트래픽에 유연한 속도 제한을 제공하는 것을 목표로 하며 기본 3scale 권한 부여와 함께 사용할 수 있습니다. 정책에서 지원하는 사용 사례의 몇 가지 예는 다음과 같습니다.
-
최종 사용자 속도 제한: 요청의 권한 부여 헤더에 전달된 JWT 토큰의 "sub"(주체) 클레임에 따른 속도 제한(
{{ jwt.sub }}}} }}로 구성됨). - 초당 요청(RPS) 속도 제한입니다.
- 서비스당 글로벌 속도 제한: 애플리케이션이 아닌 서비스당 제한을 적용합니다.
- 동시 연결 제한: 허용되는 동시 연결 수를 설정합니다.
5.1.6.1. 제한 유형 링크 복사링크가 클립보드에 복사되었습니다!
이 정책은 lua-resty-limit-traffic 라이브러리에서 제공하는 다음과 같은 제한 유형을 지원합니다.
-
leaky_bucket_limiters: 평균 요청 수와 최대 버스트 크기를 기반으로 하는 "leaky_bucket" 알고리즘을 기반으로 합니다. -
fixed_window_limiters: 고정된 시간(최종 X초)에 따라 다릅니다. -
connection_limiters: 동시 연결 수에 기반합니다.
서비스 또는 전역으로 제한 범위를 지정할 수 있습니다.
5.1.6.2. 제한 정의 링크 복사링크가 클립보드에 복사되었습니다!
제한에는 제한을 정의하는 데 사용되는 엔티티(IP, 서비스, 엔드포인트, ID, 특정 헤더의 값 등)를 인코딩하는 키가 있습니다. Key는 제한자의 키 매개변수에 지정됩니다.
key 는 다음 속성으로 정의된 오브젝트입니다.
-
name: 키의 이름입니다. 범위에서 고유해야 합니다. scope: 키의 범위를 정의합니다. 지원되는 범위는 다음과 같습니다.-
하나의 서비스(서비스)에 영향을 주는 서비스 범위당.
-
모든 서비스(
글로벌)에 영향을 미치는 전역 범위입니다.
-
하나의 서비스(서비스)에 영향을 주는 서비스 범위당.
name_type: "name" 값을 평가하는 방법을 정의합니다.-
일반 텍스트(
일반) -
as Liquid (
Liquid)
-
일반 텍스트(
각 제한에는 해당 유형에 따라 달라지는 몇 가지 매개변수도 있습니다.
leaky_bucket_limiters:속도,버스트.-
rate: 지연없이 초당 요청할 수 있는 요청 수를 정의합니다. -
burst: 허용된 속도를 초과할 수 있는 초당 요청 양을 정의합니다. 인위적인 지연은 허용된 속도를 초과하는 요청에 대해 도입됩니다(율에 따라 지정됨).버스트에 정의된 것보다 초당 더 많은 요청에 의한 속도를 초과하면 요청이 거부됩니다.
-
-
fixed_window_limiters:개수,창.count는창에정의된 초당 요청 수를 정의합니다. connection_limiters:conn,버스,지연.-
Conn: 허용되는 동시 연결의 최대 수를 정의합니다. 초당버스트연결을 통해 해당 수를 초과할 수 있습니다. -
delay- 제한을 초과하는 연결을 지연하는 시간(초)입니다.
-
예제
service_A에 대해 분당 10개의 요청을 허용합니다.
{ "key": { "name": "service_A" }, "count": 10, "window": 60 }{ "key": { "name": "service_A" }, "count": 10, "window": 60 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1s의 지연으로 10개의 버스트가 있는 100개의 연결을 허용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
각 서비스에 대해 여러 제한을 정의할 수 있습니다. 여러 제한이 정의된 경우 하나 이상의 제한에 도달한 경우 요청이 거부되거나 지연될 수 있습니다.
5.1.6.3. 유동 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
에지 제한 정책을 사용하면 키에서 Liquid 변수를 지원하여 동적 키에 대한 제한을 지정할 수 있습니다. 이를 위해 키의 name_type 매개 변수를 "liquid"로 설정해야 하며 name 매개 변수는 Liquid 변수를 사용할 수 있습니다. 예: 클라이언트 IP 주소에 대한 {{ remote_addr }} 또는 JWT 토큰의 "sub" 클레임에 대한 {{ jwt.sub }} 입니다.
예제:
{
"key": { "name": "{{ jwt.sub }}", "name_type": "liquid" },
"count": 10,
"window": 60
}
{
"key": { "name": "{{ jwt.sub }}", "name_type": "liquid" },
"count": 10,
"window": 60
}
Liquid 지원에 대한 자세한 내용은 6.1절. “정책에서 변수 및 필터 사용” 을 참조하십시오.
5.1.6.4. 조건 적용 링크 복사링크가 클립보드에 복사되었습니다!
이 조건은 API 게이트웨이가 제한자를 적용하는 시기를 정의합니다. 각 제한자의 조건 속성에 작업을 하나 이상 지정해야 합니다.
조건은 다음 속성으로 정의됩니다.
-
combine_op. 작업 목록에 적용된 부울 연산자입니다. 다음 두 개의 값이 지원됩니다.또는및. 작업. 평가해야 하는 조건 목록입니다. 각 작업은 다음 속성을 사용하여 개체에 의해 표시됩니다.-
left: 작업의 왼쪽 부분입니다. -
left_type:왼쪽속성이 평가되는 방법(plain 또는object)입니다. -
오른쪽: 작업의 올바른 부분입니다. -
right_type:올바른속성이 평가되는 방법(plain 또는object)입니다. -
Op: Operator는 왼쪽과 오른쪽 부분 사이에 적용됩니다. 다음의 두 가지 값이 지원됩니다:==(equals)와!=(동일하지 않음).
-
예제:
5.1.6.5. 저장소 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 엣지 제한 정책은 속도 제한 카운터에 대해 OpenResty 공유 사전을 사용합니다. 그러나 공유 사전 대신 외부 Redis 서버를 사용할 수 있습니다. 이 기능은 여러 APIcast 인스턴스를 사용할 때 유용할 수 있습니다. Redis 서버는 redis_url 매개 변수를 사용하여 구성할 수 있습니다.
5.1.6.6. 오류 처리 링크 복사링크가 클립보드에 복사되었습니다!
제한자는 다음 매개 변수를 지원하여 오류 처리 방법을 구성합니다.
limits_exceed_error는 구성된 제한을 초과할 때 클라이언트에 반환되는 오류 상태 코드와 메시지를 구성할 수 있습니다. 다음 매개 변수를 구성해야 합니다.-
status_code: 제한을 초과할 때 요청의 상태 코드입니다. 기본값:429. error_handling: 오류를 처리하는 방법-
exit: "오류와 일치". -
Log: "요청을 통과하고 출력 로그만 전달"
-
-
configuration_error는 잘못된 구성 시 클라이언트에 반환되는 오류 상태 코드와 메시지를 구성할 수 있습니다. 다음 매개 변수를 구성해야 합니다.-
status_code: 구성 문제가 있을 때 상태 코드입니다. 기본값: 500. error_handling: 오류를 처리하는 방법-
exit: "오류와 일치". -
Log: "요청을 통과하고 출력 로그만 전달".
-
-
5.1.7. 헤더 수정 정책 링크 복사링크가 클립보드에 복사되었습니다!
헤더 수정 정책을 사용하면 기존 헤더를 수정하거나 추가 헤더를 정의하여 들어오는 요청 또는 응답에서 추가하거나 제거할 수 있습니다. 응답 헤더와 요청 헤더를 모두 수정할 수 있습니다.
헤더 수정 정책은 다음 구성 매개 변수를 지원합니다.
-
Request : 요청헤더에 적용할 작업 목록 -
response: 응답 헤더에 적용할 작업 목록
각 작업은 다음 매개 변수로 구성됩니다.
-
적용할 작업을 지정합니다.
add작업은 기존 헤더에 값을 추가합니다.set작업은 헤더와 값을 생성하고 이미 존재하는 경우 기존 헤더의 값을 덮어씁니다.내보내기작업은 헤더와 값을 생성하지만 이미 존재하는 경우 기존 헤더의 값을 덮어쓰지 않습니다. 대신push는 기존 헤더에 값을 추가합니다.삭제작업은 헤더를 제거합니다. -
header: 만들거나 수정할 헤더를 지정하고 헤더 이름(예:Custom-Header)으로 사용할 수 있는 문자열일 수 있습니다. -
value_type: 헤더 값을 평가하는 방법을 정의하며일반텍스트 또는 Liquid 템플릿으로 평가에대한일반 일 수 있습니다. 자세한 내용은 6.1절. “정책에서 변수 및 필터 사용”의 내용을 참조하십시오. -
value: 헤더에 사용할 값을 지정합니다. 값 유형 "liquid"의 경우 값은{{ variable_from_context }}}} 형식이어야 합니다. 삭제할 때 필요하지 않습니다.
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.8. IP 검사 정책 링크 복사링크가 클립보드에 복사되었습니다!
IP 확인 정책은 IP 목록을 기반으로 요청을 거부하거나 허용하는 데 사용됩니다.
구성 속성
| 속성 | description | 데이터 유형 | 필수 여부 |
|---|---|---|---|
| check_type |
|
문자열은 | 제공됨 |
| IPS |
| 문자열 배열은 유효한 IP 주소여야 합니다. | 제공됨 |
| error_msg |
| string | 제공되지 않음 |
| client_ip_sources |
|
문자열 배열로 유효한 옵션은 | 제공되지 않음 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.9. 유동 컨텍스트 디버그 정책 링크 복사링크가 클립보드에 복사되었습니다!
Liquid Context Debug 정책은 프로덕션이 아닌 개발 환경에서 디버깅 목적으로만 사용됩니다.
이 정책은 컨텍스트에서 사용할 수 있는 오브젝트와 값이 포함되어 있고 Liquid 템플릿을 평가하는 데 사용할 수 있는 JSON으로 API 요청에 응답합니다. 3scale APIcast 또는 Upstream 정책과 결합할 때 올바르게 작동하기 위해 Liquid Context Debug를 정책 체인에 배치해야합니다. 순환 참조를 피하기 위해 정책에는 중복된 오브젝트만 한 번만 포함되고 stub 값으로 대체됩니다.
정책이 활성화되면 APIcast에서 반환하는 값의 예입니다.
5.1.10. 로깅 정책 링크 복사링크가 클립보드에 복사되었습니다!
로깅 정책을 사용하면 각 API 서비스에 대해 APIcast(NGINX) 액세스 로그를 개별적으로 활성화하거나 비활성화할 수 있습니다. 기본적으로 이 정책은 정책 체인에서 활성화되어 있지 않습니다.
이 정책은 enable_access_logs 구성 매개변수만 지원합니다. 서비스에 대한 액세스 로깅을 비활성화하려면 정책을 활성화하고 enable_access_logs 매개변수를 선택한 후 Submit( Submit ) 버튼을 클릭합니다. 액세스 로그를 활성화하려면 enable_access_logs 매개변수를 선택하거나 Logging 정책을 비활성화합니다.
로깅 정책을 액세스 로그의 위치에 대한 글로벌 설정과 결합할 수 있습니다. APIcast 액세스 로그의 위치를 구성하려면 APICAST_ACCESS_LOG_FILE 환경 변수를 설정합니다. 기본적으로 이 변수는 표준 출력 장치인 /dev/stdout 로 설정됩니다. 글로벌 APIcast 매개변수에 대한 자세한 내용은 ??? 을 참조하십시오.
5.1.11. OAuth 2.0 토큰 인트로스펙션 정책 링크 복사링크가 클립보드에 복사되었습니다!
OAuth 2.0 Token Introspection 정책을 사용하면 토큰 발행자(Red Hat Single Sign-On)의 Token Introspection Endpoint(Red Hat Single Sign-On)를 사용하는 OpenID Connect 인증 옵션과 함께 제공되는 서비스에 사용되는 JSON 웹 토큰(JWT) 토큰을 검증할 수 있습니다.
APIcast는 auth_type 필드에서 다음 인증 유형을 지원하여 Token Introspection Endpoint 및 이 끝점을 호출할 때 사용하는 인증 정보 APIcast를 결정합니다.
use_3scale_oidc_issuer_endpoint이 설정을 사용하면 APIcast에서 클라이언트 인증 정보(클라이언트 ID 및 클라이언트 시크릿)와 서비스 통합 페이지에 구성된 OpenID Connect Issuer 설정에서 Token Introspection Endpoint를 사용합니다.
APIcast는
token_introspection_endpoint필드에서 OpenID Connect 발급자의.well-known/openid-configuration끝점을 반환합니다.예 5.1.
use_3scale_oidc_issuer_endpoint로 설정된 인증 유형다음은 인증 유형이
use_3scale_oidc_issuer_endpoint로 설정된 경우 설정 예제입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow client_id+client_secret이 옵션을 사용하면 다른 Token Introspection Endpoint 및 Client Secret APIcast를 지정하여 토큰 정보를 요청할 수 있습니다.
이 옵션을 사용하는 경우 다음 구성 매개변수를 설정합니다.
-
client_id: Token Introspection Endpoint의 클라이언트 ID를 설정합니다. -
client_secret: Token Introspection Endpoint에 대한 클라이언트 보안을 설정합니다. introspection_url: Introspection Endpoint URL을 설정합니다.예 5.2.
client_id+client_secret으로 설정된 인증 유형인증 유형이
client_id+client_secret으로 설정된 경우 다음은 구성 예제입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
auth_type 필드의 설정에 관계없이 APIcast는 기본 인증을 사용하여 토큰 의도를 승인합니다 (Authorization: Basic <token> 헤더, 여기서 < token >은 Base64로 인코딩된 < client_id>:<client_secret > 설정).
Token Introspection Endpoint 응답에는 활성 속성이 포함되어 있습니다. APIcast는 이 속성의 값을 확인합니다. 특성 값에 따라 APIcast는 호출을 승인하거나 거부합니다.
-
True: 호출이 승인되었습니다. -
False: 호출이Authentication Failed오류와 함께 거부됨
이 정책을 통해 토큰을 캐시하여 동일한 JWT 토큰을 호출할 때마다 Token Introspection Endpoint를 호출하지 않도록 할 수 있습니다. Token Introspection 정책의 토큰 캐싱을 활성화하려면 max_cached_tokens 필드를 0 의 값으로 설정하여 기능을 비활성화 합니다. 또한 max_ttl_tokens 필드의 토큰에 대해 Time to Live (TTL) 값을 1 에서 3600 초로 설정할 수 있습니다.
5.1.12. referrer 정책 링크 복사링크가 클립보드에 복사되었습니다!
Referrer 정책은 Referrer Filtering 기능을 활성화합니다. 서비스 정책 체인에서 정책이 활성화되면 APIcast는 참조 매개 변수의 Service Management API (AuthRep 호출)에 향후 요청의 Referer 정책 값을 보냅니다. Referrer Filtering 작동 방법에 대한 자세한 내용은 인증 패턴 의 Referrer Filtering 섹션을 참조하십시오.
5.1.13. rh-SSO/Keycloak 역할 점검 정책 링크 복사링크가 클립보드에 복사되었습니다!
이 정책은 OpenID Connect 인증 옵션과 함께 사용할 때 역할 검사를 추가합니다. 이 정책은 Red Hat Single Sign-On에서 발행한 액세스 토큰에서 영역 역할 및 클라이언트 역할을 확인합니다. 영역 역할은 모든 클라이언트의 리소스 또는 3Scale에 역할 검사를 추가할 때 지정됩니다.
다음은 type 속성이 정책 구성에서 지정하는 두 가지 유형의 역할 검사입니다.
- 허용 목록 (기본값): 허용 오차가 사용되면 APIcast는 지정된 범위가 JWT 토큰에 있는지 확인하고 JWT에 범위가 없는 경우 호출을 거부합니다.
- blacklist: 블랙리스트 를 사용하면 JWT 토큰에 블랙리스트 범위가 포함된 경우 APIcast가 호출을 거부합니다.
동일한 정책에서 블랙리스트 와 허용 목록 인 둘 다 구성할 수는 없지만 APIcast 정책 체인에 RH-SSO/Keycloak 역할 검사 정책의 두 개 이상의 인스턴스를 추가할 수 있습니다.
정책 구성의 scopes 속성을 통해 범위 목록을 구성할 수 있습니다.
각 범위 오브젝트에는 다음 속성이 있습니다.
- Resource : 역할에 의해 제어되는 리소스 (endpoint)입니다. 이 형식은 매핑 규칙과 동일합니다. 패턴은 문자열의 시작부터 일치하고 정확한 일치를 위해 마지막에 $ 를 추가해야 합니다.
resource_type: 리소스 값이 평가되는 방법을 정의합니다.
- 일반 텍스트(일반텍스트): 리소스 값을 일반 텍스트로 조정합니다. 예: /api/v1/product$.
- Liquid text ( Liquidtext): 리소스 값에 Liquid를 사용할 수 있습니다. 예: /resource_{{ jwt.aud }} 는 클라이언트 ID( JWT aud 클레임에 포함되어 있음)를 포함하여 리소스에 대한 액세스를 관리합니다.
realm_roles: 이 역할을 사용하여 영역 역할을 확인합니다( Red Hat Single Sign-On 문서의 realm 역할 참조).
영역 역할은 Red Hat Single Sign-On에서 발행한 JWT에 있습니다.
"realm_access": { "roles": [ "<realm_role_A>", "<realm_role_B>" ] }"realm_access": { "roles": [ "<realm_role_A>", "<realm_role_B>" ] }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 실제 역할은 정책에 지정해야 합니다.
"realm_roles": [ { "name": "<realm_role_A>" }, { "name": "<realm_role_B>" } ]"realm_roles": [ { "name": "<realm_role_A>" }, { "name": "<realm_role_B>" } ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음은 realm_roles 배열에서 각 오브젝트의 사용 가능한 속성입니다.
- name: 역할의 이름을 지정합니다.
- name_type: 이름을 평가하는 방법을 정의합니다. 일반 또는 유동적 일 수 있습니다 ( resource_type과 동일한 방식으로 작동합니다).
client_roles: client_roles 를 사용하여 클라이언트 네임스페이스에서 특정 액세스 역할을 확인합니다( Red Hat Single Sign-On 설명서의 클라이언트 역할 참조).
클라이언트 역할은 resource_access 클레임 아래에 JWT에 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정책에서 클라이언트 역할을 지정합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음은 client_roles 배열에서 각 오브젝트의 사용 가능한 속성입니다.
- name: 역할의 이름을 지정합니다.
- name_type: name 값을 평가하는 방법을 정의합니다. 일반 또는 유동적 일 수 있습니다 ( resource_type과 동일한 방식으로 작동합니다).
- Client: 역할의 클라이언트를 지정합니다. 이 정책이 정의되지 않은 경우 이 정책은 aud 클레임을 클라이언트로 사용합니다.
- client_type: 클라이언트 값을 평가하는 방법을 정의합니다. 일반 또는 유동적 일 수 있습니다 ( resource_type과 동일한 방식으로 작동합니다).
5.1.14. Prometheus 지표 링크 복사링크가 클립보드에 복사되었습니다!
Prometheus는 독립형 오픈 소스 시스템 모니터링 및 경고 툴킷입니다.
Red Hat 3scale 릴리스의 경우 Prometheus 설치 및 구성은 지원되지 않습니다. 필요한 경우 Prometheus의 커뮤니티 버전을 사용하여 APIcast 관리 API 서비스에 대한 지표 및 경고를 시각화할 수 있습니다.
Prometheus 지표 가용성
Prometheus와 APIcast 통합은 다음 배포 옵션에 사용할 수 있습니다.
- 자체 관리형 APIcast(호스팅 또는 온-프레미스 API 관리자 모두)
- 온프레미스 APIcast 내장
Prometheus와 APIcast 통합은 호스팅된 API 관리자 및 호스팅된 APIcast에서는 사용할 수 없습니다.
Prometheus 지표 목록
다음 메트릭을 항상 사용할 수 있습니다.
| 메트릭 | 설명 | 유형 | 라벨 |
|---|---|---|---|
| nginx_http_connections | HTTP 연결 수 | 게이지 | state(accepted,active,handled,reading,total,waiting,writing) |
| nginx_error_log | APIcast 오류 | 카운터 | level(debug,info,notice,warn,error,crit,alert,emerg) |
| openresty_shdict_capacity | 작업자 간에 공유되는 사전의 용량 | 게이지 | dict(모든 사전에 대해 1개) |
| openresty_shdict_free_space | 작업자 간에 공유하는 사전의 여유 공간 | 게이지 | dict(모든 사전에 대해 1개) |
| nginx_metric_errors_total | 메트릭을 관리하는 Lua 라이브러리의 오류 수 | 카운터 | - |
| total_response_time_seconds | 클라이언트에 대한 응답을 전송하는 데 필요한 시간(초) | histogram | - |
| upstream_response_time_seconds | 업스트림 서버의 응답 시간(초) | histogram | - |
| upstream_status | 업스트림 서버의 HTTP 상태 | 카운터 | status |
| threescale_backend_calls | 3scale 백엔드(Apisonator)에 대한 요청 인증 및 보고 | 카운터 | endpoint(authrep, auth, report), status(2xx, 4xx, 5xx) |
다음 메트릭은 3scale Batcher 정책을 사용하는 경우에만 사용할 수 있습니다.
| 메트릭 | 설명 | 유형 | 라벨 |
|---|---|---|---|
| batching_policy_auths_cache_hits | 3scale 배치 정책의 auths 캐시 적중 | 카운터 | - |
| batching_policy_auths_cache_misses | 3scale 배치 정책의 auths 캐시에 누락 | 카운터 | - |
값이 없는 메트릭
메트릭에 값이 없는 경우 메트릭이 숨겨집니다. 예를 들어 nginx_error_log 에 보고에 오류가 없으면 nginx_error_log 메트릭이 표시되지 않습니다. 이 값은 값이 있는 경우에만 표시됩니다.
5.1.15. NetNamespace 정책 링크 복사링크가 클립보드에 복사되었습니다!
NetNamespace 정책은 정책에 지정된 매핑 규칙을 사용하여 HTTP 요청의 SOAPAction 또는 Content-Type 헤더에 제공된 SOAP 작업 URI와 일치합니다.
구성 속성
| 속성 | description | 값 | 필수 여부 |
|---|---|---|---|
| 패턴 |
| 데이터 유형: 문자열 | 제공됨 |
| metric_system_name |
| 데이터 유형: 문자열은 유효한 메트릭이어야 합니다. | 제공됨 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.16. 업스트림 정책 링크 복사링크가 클립보드에 복사되었습니다!
Upstream 정책을 사용하면 정규식을 사용하여 Host 요청 헤더를 구문 분석하고 Private Base URL에 정의된 업스트림 URL을 다른 URL로 교체할 수 있습니다.
예를 들면 다음과 같습니다.
regex /foo. 및 URL 필드 newexample.com 이 포함된 정책에서 URL https://www.example.com/foo/123/ 을 newexample.com으로 교체합니다.
정책 체인 참조:
| 속성 | description | 값 | 필수 여부 |
|---|---|---|---|
| regex |
| 데이터 유형: string, 유효한 정규식 구문 여야 합니다. | 제공됨 |
| url |
| 데이터 유형: 문자열, 유효한 URL인지 확인 | 제공됨 |
정책 오브젝트 예
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.17. URL 재작성 정책 링크 복사링크가 클립보드에 복사되었습니다!
URL 재작성 정책을 사용하면 요청 경로와 쿼리 문자열을 수정할 수 있습니다.
3scale APIcast 정책과 결합하면 URL 재작성 정책이 정책 체인의 3scale APIcast 정책 앞에 배치되면 APIcast 매핑 규칙이 수정된 경로에 적용됩니다. URL 재작성 정책이 정책 체인의 APIcast 뒤에 배치되면 매핑 규칙이 원래 경로에 적용됩니다.
이 정책은 다음 두 가지 작업 세트를 지원합니다.
-
commands: 요청 경로를 다시 작성하는 데 적용할 명령 목록입니다. -
query_args_commands: 요청의 쿼리 문자열을 다시 작성하기 위해 적용할 명령 목록입니다.
5.1.17.1. 경로 재작성을 위한 명령 링크 복사링크가 클립보드에 복사되었습니다!
다음은 명령 목록의 각 명령이 구성 매개 변수로 구성되어 있습니다.
-
Op: 적용할 운영입니다. 사용 가능한 옵션은sub및gsub입니다.sub연산은 첫 번째 일치 항목만 지정된 정규 표현식과 교체합니다.gsub연산이 지정된 정규 표현식과 일치하는 모든 항목을 대체합니다. sub 및 gsub 작업에 대한 설명서를 참조하십시오. -
regex: Perl 호환 정규식을 일치시킬 수 있습니다. -
replace: 일치 하는 경우 사용 되는 문자열입니다. -
옵션(선택 사항): regex 일치가 수행되는 방법을 정의하는 옵션입니다. 사용 가능한 옵션에 대한 자세한 내용은 OpenResty Lua 모듈 프로젝트 설명서의 ngx.re.match 섹션을 참조하십시오. -
break(선택 사항): true로 설정하면(checkbox가 활성화됨) 명령이 URL을 다시 입력하면 마지막으로 적용된 것입니다(해당 목록의 모든 후기 명령이 삭제됩니다).
5.1.17.2. 쿼리 문자열을 다시 작성하는 명령 링크 복사링크가 클립보드에 복사되었습니다!
다음은 query_args_commands 목록의 각 명령이 다음과 같이 구성된 구성 매개 변수입니다.
op: 쿼리 인수에 적용할 작업입니다. 다음 옵션을 사용할 수 있습니다.-
Add : 기존 인수에 값을 추가합니다.
-
set: 설정되지 않은 경우 arg을 생성하고 설정 시 값을 교체하십시오. -
push: 설정하지 않으면 arg를 생성하고 설정 시 값을 추가합니다. -
삭제: 인수를 삭제합니다.
-
Add : 기존 인수에 값을 추가합니다.
-
ARG: 작업이 적용되는 쿼리 인수 이름입니다.
-
value: 쿼리 인수에 사용되는 값을 지정합니다. 값 유형 "liquid"의 경우 값은{{ variable_from_context }}}} 형식이어야 합니다.삭제작업의 경우 값이 고려되지 않습니다. -
value_type(선택 사항): 쿼리 인수 값 평가 방법 및 일반 텍스트에 대해일반텍스트 또는 Liquid 템플릿으로 평가에 사용할 수 있는 방법을 정의합니다.자세한 내용은 6.1절. “정책에서 변수 및 필터 사용”의 내용을 참조하십시오. 지정하지 않으면 기본적으로 "plain" 유형이 사용됩니다.
예제
URL 재작성 정책은 다음과 같이 구성됩니다.
APIcast로 전송된 원래 요청 URI입니다.
https://api.example.com/api/v1/products/123/details?user_key=abc123secret&pusharg=first&setarg=original
https://api.example.com/api/v1/products/123/details?user_key=abc123secret&pusharg=first&setarg=original
URL 재작성을 적용한 후 APIcast에서 API 백엔드에 전송하는 URI입니다.
https://api-backend.example.com/internal/products/123/details?pusharg=first&pusharg=pushvalue&setarg=setvalue
https://api-backend.example.com/internal/products/123/details?pusharg=first&pusharg=pushvalue&setarg=setvalue
다음과 같은 변환이 적용됩니다.
-
부분 문자열
/api/v1/는 유일한 경로 재작성 명령과 일치하며/internal/로 교체됩니다. -
user_key쿼리 인수가 삭제됩니다. -
value
pushvalue가pusharg쿼리 인수에 추가 값으로 추가됩니다. -
쿼리 인수
setarg의원래값은 구성된 값setvalue로 교체됩니다. -
쿼리 인수
가 원래 URL에 없기 때문에 명령 add가 적용되지 않았습니다.addarg
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
5.1.18. 캡처 정책을 사용하여 URL 재작성 링크 복사링크가 클립보드에 복사되었습니다!
Captures 정책을 사용한 URL 재작성 정책은 5.1.17절. “URL 재작성 정책” 정책의 대안이며 API 백엔드에 전달하기 전에 API 요청의 URL을 다시 작성할 수 있습니다.
Captures 정책을 사용하여 URL 재작성은 URL의 인수를 캡처하고 다시 작성된 URL에서 해당 값을 사용합니다.
정책은 transformations 구성 매개 변수를 지원합니다. 요청 URL에 어떤 변환을 적용하는지 설명하는 오브젝트 목록입니다. 각 tranformation 오브젝트는 두 가지 속성으로 구성됩니다.
-
match_rule: 이 규칙은 들어오는 요청 URL과 일치합니다.{nameOfArgument}형식으로 이름 지정된 인수를 포함할 수 있습니다. 이러한 인수는 다시 작성된 URL에 사용할 수 있습니다. URL은match_rule과 정규 표현식과 비교됩니다. 명명된 인수와 일치하는 값에는 (PCRE regex 표기법의 경우)[\w-.~%!$&'()*,;=@:]+는 다음 문자만 포함해야 합니다. 기타 regex 토큰은match_rule표현식(예:^for the beginning of the string,$)에서 사용할 수 있습니다. -
template: 원본 URL이 으로 다시 작성된 URL에 대한 템플릿이며match_rule에서 이름 지정된 인수를 사용할 수 있습니다.
원래 URL의 쿼리 매개 변수는 템플릿에 지정된 쿼리 매개 변수와 병합됩니다.
예제
Captures를 사용하여 URL 재작성은 다음과 같이 구성됩니다.
APIcast로 전송된 원래 요청 URI입니다.
https://api.example.com/api/v1/products/123/details?user_key=abc123secret
https://api.example.com/api/v1/products/123/details?user_key=abc123secret
URL 재작성을 적용한 후 APIcast에서 API 백엔드에 전송하는 URI입니다.
https://api-backend.example.com/internal/products/details?user_key=abc123secret&extraparam=anyvalue&id=123
https://api-backend.example.com/internal/products/details?user_key=abc123secret&extraparam=anyvalue&id=123
5.2. 표준 정책 활성화 링크 복사링크가 클립보드에 복사되었습니다!
관리 포털에서 정책을 활성화하려면 다음 단계를 수행합니다.
- 3scale에 로그인합니다.
- API 서비스로 이동합니다.
-
[your_API_name] > 통합 > 구성에서
APIcast 구성 편집을 선택합니다. -
POLICIES 섹션에서
정책 추가를클릭합니다. - 추가할 정책을 선택하고 필수 필드를 작성합니다.
- Update and test in Staging Environment 버튼을 클릭하여 정책 체인을 저장합니다.
5.3. 사용자 정의 APIcast 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 APIcast 정책을 완전히 만들거나 표준 정책을 수정할 수 있습니다.
사용자 지정 정책을 생성하려면 다음을 이해해야 합니다.
- 정책은 Lua에서 작성되었습니다.
- 정책은 적절한 파일 디렉터리를 준수하고 있어야 합니다.
- 정책 동작은 정책 체인에 배치되는 방식의 영향을 받습니다.
- 사용자 지정 정책을 추가하는 인터페이스는 완전히 지원되지만 사용자 지정 정책은 자체적으로 지원되지 않습니다.
5.4. APIcast에 사용자 정의 정책 추가 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 정책을 생성한 경우 APIcast에 추가해야 합니다. 이 방법은 APIcast가 배포된 위치에 따라 다릅니다.
다음 APIcast 자체 관리 배포에 사용자 정의 정책을 추가할 수 있습니다.
- OpenShift에서 3scale 온프레미스 배포의 일부로 APIcast 기본 제공 게이트웨이
- OpenShift 및 Docker 컨테이너화된 환경의 APIcast
사용자 정의 정책을 APIcast 호스팅에 추가할 수 없습니다.
프로덕션 게이트웨이에 대한 정책을 직접 변경하지 마십시오. 항상 변경 사항을 테스트합니다.
5.4.1. APIcast 내장에 사용자 정의 정책 추가 링크 복사링크가 클립보드에 복사되었습니다!
온프레미스 배포에 사용자 정의 APIcast 정책을 추가하려면 사용자 지정 정책이 포함된 OpenShift 이미지를 빌드하고 배포에 추가해야 합니다. Red Hat 3scale은 프레임워크로 사용할 수 있는 샘플 리포지토리를 제공하여 온프레미스 배포에 사용자 지정 정책을 생성하고 추가합니다.
이 샘플 리포지토리에는 사용자 정의 정책에 대한 올바른 디렉터리 구조와 생성한 사용자 정의 정책이 포함된 새 APIcast OpenShift 이미지를 빌드하기 위한 이미지 스트림 및 BuildConfig를 생성하는 템플릿이 포함되어 있습니다.
apicast-custom-policies 를 빌드할 때 빌드 프로세스에서 amp-apicast:latest 태그에 새 이미지를 "ushes"합니다. 이 이미지 스트림 태그(:latest)에 이미지 변경이 있는 경우 apicast-staging 및 apicast-production 태그를 둘 다 기본적으로 새 배포를 자동으로 시작하도록 구성됩니다. 프로덕션 서비스(또는 원하는 경우 준비)에 대한 중단을 방지하려면 자동 배포를 비활성화하는 것이 좋습니다(이미지가 변경될 때 새 배포를 자동으로 시작하거나 프로덕션에 대해 다른 이미지 스트림 태그(예: amp-apicast:production)를 구성하는 것이 좋습니다.
다음 단계에 따라 온-프레미스 배포에 사용자 지정 정책을 추가합니다.Follow these steps to add a custom policy to an on-premises deployment:
- https://github.com/3scale/apicast-example-policy [public repository with the policy example]를 포크하거나 해당 콘텐츠가 있는 개인 리포지토리를 생성합니다. OpenShift가 이미지를 빌드하기 위해 Git 리포지토리에서 사용자 지정 정책 코드를 사용할 수 있어야 합니다. 개인 Git 리포지토리를 사용하려면 OpenShift에서 시크릿을 설정해야 합니다.
- 리포지토리를 로컬로 복제하고 정책에 대한 구현을 추가하고 변경 사항을 Git 리포지토리로 내보냅니다.
openshift.yml템플릿을 업데이트합니다. 특히 다음 매개 변수를 변경합니다.-
spec.source.git.uri: https://github.com/3scale/apicast-example-policy.git정책 BuildConfig에서 - Git 리포지토리 위치로 변경합니다. -
사용자 정의 정책 BuildConfig에서
spec.source.images[0].paths.sourcePath: /opt/app-root/policies/을 리포지터리의examplepolicies디렉터리 아래에 추가한 사용자 정의 정책 이름으로 변경합니다. -
선택적으로 OpenShift 오브젝트 이름 및 이미지 태그를 업데이트합니다. 그러나 변경 사항이 일관되게(예:
apicast-example-policyBuildConfig 빌드)인지 확인하고apicast-custom-policiesBuildConfig에서 소스로 사용되는apicast-policy:example이미지를 푸시해야 합니다. 따라서 태그는 동일해야 합니다.
-
명령을 실행하여 OpenShift 오브젝트를 생성합니다.
oc new-app -f openshift.yml --param AMP_RELEASE=2.3.0
oc new-app -f openshift.yml --param AMP_RELEASE=2.3.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드가 자동으로 시작되지 않으면 다음 두 개의 명령을 실행합니다. 이를 변경한 경우
apicast-example-policy를 고유한 BuildConfig 이름으로 교체합니다(예:apicast-<name>-policy). 두 번째 명령을 실행하기 전에 첫 번째 명령이 완료될 때까지 기다립니다.oc start-build apicast-example-policy oc start-build apicast-custom-policies
oc start-build apicast-example-policy oc start-build apicast-custom-policiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
빌드 제공 APIcast 이미지에 amp-apicast:latest 이미지 스트림의 변경 사항을 추적하면 APIcast의 새 배포가 시작됩니다. apicast-staging 을 다시 시작한 후 관리 포털에서 Integration 페이지로 이동한 후 Add Policy 버튼을 클릭하여 사용자 지정 정책을 확인합니다. 이를 선택하고 구성한 후 Staging Environment에서 Update & test 를 클릭하여 스테이징 APIcast에서 사용자 지정 정책 작업을 수행합니다.
5.4.2. 다른 OpenShift Container Platform에서 APIcast에 사용자 정의 정책 추가 링크 복사링크가 클립보드에 복사되었습니다!
통합 OpenShift Container Registry 에서 사용자 지정 정책이 포함된 APIcast 이미지를 가져와서 OCP(OpenShift Container Platform)에서 사용자 지정 정책을 APIcast에 추가할 수 있습니다.
다른 OpenShift Container Platform에서 APIcast에 사용자 정의 정책 추가
- APIcast 내장에 정책 추가
- 기본 OpenShift 클러스터에 APIcast 게이트웨이를 배포하지 않는 경우 기본 OpenShift 클러스터의 내부 레지스트리에 대한 액세스 권한을 설정합니다.
- 3scale 2.4 APIcast OpenShift 템플릿을 다운로드합니다. https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.3.0.GA/apicast-gateway/apicast.yml
템플릿을 수정하려면 기본
이미지디렉터리를 내부 레지스트리의 전체 이미지 이름으로 바꿉니다.image: <registry>/<project>/amp-apicast:latest
image: <registry>/<project>/amp-apicast:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 정의 이미지를 지정하여 OpenShift 템플릿을 사용하여 APIcast를 배포 합니다.
oc new-app -f customizedApicast.yml
oc new-app -f customizedApicast.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. AMP에서 정책 체인 생성 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 게이트웨이 구성의 일부로 AMP에 정책 체인을 만듭니다. 다음 단계에 따라 UI에서 정책 체인을 수정합니다.
- AMP에 로그인합니다.
API 서비스로 이동합니다.
[your_API_name] > 통합 > 구성에서
APIcast 구성편집 을 선택합니다.POLICIES 섹션에서 화살표 아이콘을 사용하여 정책 체인의 정책을 다시 정렬합니다. 항상 APIcast 정책을 정책 체인에 마지막 배치합니다.
- Update and test in Staging Environment 버튼을 클릭하여 정책 체인을 저장합니다.
5.6. 정책 체인 JSON 구성 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 기본 배포를 사용하는 경우 JSON 구성 파일을 생성하여 AMP 외부에서 정책 체인을 제어할 수 있습니다.
JSON 구성 파일 정책 체인에는 다음 정보로 구성된 JSON 배열이 포함되어 있습니다.
-
정책 체인이 번호에 적용되는 서비스를 지정하는
id값이 있는services오브젝트 -
policy_chain 및 후속 오브젝트를 포함하는
프록시오브젝트 -
정책 체인을 정의하는 값을 포함하는
policy_chain오브젝트 -
정책을식별하고 정책 동작을 구성하는 데 필요한이름및구성데이터를 둘 다 지정하는 개별 정책 오브젝트
다음은 사용자 정의 정책 sample_policy_1 및 API 인트로스펙션 표준 정책 token_introspection 에 대한 정책 체인의 예입니다.
모든 정책 체인에는 기본 제공 정책 API cast 가 포함되어야 합니다. 정책 체인에 APIcast를 배치하면 정책 동작에 영향을 미칩니다.
6장. APIcast 네이티브 배포와 정책 체인 통합 링크 복사링크가 클립보드에 복사되었습니다!
기본 APIcast 배포의 경우 THREESCALE_CONFIG_FILE 환경 변수를 사용하여 구성 파일을 지정하여 사용자 정의 정책 체인을 통합할 수 있습니다. 다음 예제에서는 구성 파일 example.json 을 지정합니다.
THREESCALE_CONFIG_FILE=example.json bin/apicast
THREESCALE_CONFIG_FILE=example.json bin/apicast
6.1. 정책에서 변수 및 필터 사용 링크 복사링크가 클립보드에 복사되었습니다!
일부 5.1절. “APIcast 표준 정책” 에서는 일반 문자열 값뿐만 아니라 요청 컨텍스트에 있는 변수도 사용할 수 있는 Liquid templating을 지원합니다.
컨텍스트 변수를 사용하려면 해당 이름을 {{ and }} }}로 래핑합니다. 예: {{}} }}. 변수가 오브젝트인 경우 해당 속성(예: {{ somevar.attr }} }})에 액세스할 수도 있습니다.
다음은 모든 정책에서 사용할 수 있는 표준 변수입니다.
-
URI: 쿼리 매개 변수가 없는 요청 경로 (포함 된 NGINX 변수의 값$uri). -
Host: 요청 호스트 (내장된 NGINX 변수$host의 값) -
remote_addr: 클라이언트의 IP 주소(내장된 NGINX 변수$remote_addr의 값)입니다. -
headers: 요청 헤더를 포함하는 오브젝트입니다.{{headers['Some-Header']}}를 사용하여 특정 헤더 값을 가져옵니다. -
http_method: request 메서드: GET, POST 등입니다.
이 변수는 요청 컨텍스트에서 사용할 수 있습니다. 정책은 컨텍스트에 변수를 추가할 수 있습니다. 이러한 변수는 변수가 추가된 단계 이후에 실행되는 경우 정책 체인의 동일한 또는 기타 정책에서 사용할 수 있습니다. 변수가 추가된 정책 뒤에 표시되는 정책에 변수가 사용되는 경우 동일한 단계일 수도 있습니다.
다음은 표준 3scale APIcast 정책이 컨텍스트에 추가하는 변수의 몇 가지 예입니다.
-
JWT: JWT 토큰의 구문 분석 JSON 페이로드(Open OpenID Connect 인증용)입니다. -
Credentials : 애플리케이션 자격 증명을보유하는 오브젝트입니다. 예:"app_id": "972f7b4f","user_key": "13b668c4d1e10eaebaa5144b4749713f". -
Service: 현재 요청이 처리하는 서비스에 대한 구성을 보유하는 오브젝트입니다. 예: 서비스 ID는 {{ service.id }}로 사용할 수 있습니다.
컨텍스트에서 오브젝트 및 값의 전체 목록은 5.1.9절. “유동 컨텍스트 디버그 정책”을 참조하십시오.
변수는 Liquid 템플릿의 도움말과 함께 사용됩니다. 예: {{ remote_addr }} }}, {{ headers['Some-Header'] }}, {{ jwt.aud }} }}. 값의 변수를 지원하는 정책에는 일반적으로 _type 접미사(예: value_type,name_type 등)가 있는 특수 매개 변수가 있으며, 일반 텍스트에 대해 "plain"과 tier 템플릿에 "liquid"를 사용할 수 있습니다.
APIcast는 변수 값에 적용할 수 있는 Liquid 필터도 지원합니다. 필터는 Liquid 변수의 값에 NGINX 함수를 적용합니다.
필터는 변수 출력 태그 {{ }} }} 내에 배치되며, 변수 이름 또는 리터럴 값에 따라 파이프 문자 | 및 필터 이름으로 배치됩니다. 예: {{ 'username:password' | encode_base64 }}, {{ URI | escape_uri }} }}.
일부 필터에는 매개변수가 필요하지 않으므로 변수 대신 빈 문자열을 사용할 수 있습니다. 예: {{ '' | utctime }} 는 현재 시간을 UTC 표준 시간대로 반환합니다.
필터는 다음과 같이 연결할 수 있습니다. {{ variable | function1 | function2 }}. 예: {{ '' | utctime | escape_uri }}.
다음은 사용 가능한 함수 목록입니다.
7장. APIcast 환경 변수 링크 복사링크가 클립보드에 복사되었습니다!
APIcast 환경 변수를 사용하면 APIcast의 동작을 수정할 수 있습니다. 지원되는 환경 변수는 다음과 같습니다.
- 지원되지 않거나 더 이상 사용되지 않는 환경 변수가 나열되지 않습니다.
- 일부 환경 변수 기능이 APIcast 정책으로 이동했을 수 있습니다.
APICAST_BACKEND_CACHE_HANDLER
값: strict | resilient
기본값: strict
deprecated: 대신 캐싱 정책을 사용합니다.
백엔드를 사용할 수 없을 때 권한 부여 캐시의 작동 방식을 정의합니다. 백엔드를 사용할 수 없을 때 캐시된 애플리케이션을 엄격히 제거합니다. 복원력은 백엔드에서 권한 부여가 거부되는 경우에만 수행됩니다.
APICAST_CONFIGURATION_CACHE
values: 숫자
기본값: 0
구성이 저장될 간격(초)을 지정합니다. 값은 0 ( APICAST_CONFIGURATION_LOADER) 이상의 부팅 값과 호환되지 않음) 또는 60을 초과해야합니다. 예를 들어 APICAST_CONFIGURATION_CACHE 가 120으로 설정된 경우 게이트웨이는 2분(120초)마다 API 관리자의 구성을 다시 로드합니다. 값 < 0은 다시 로드를 비활성화합니다.
APICAST_CONFIGURATION_LOADER
값: 부팅 | 지연
기본값: lazy
구성을 로드하는 방법을 정의합니다. boot은 게이트웨이가 시작될 때 API 관리자에 구성을 요청합니다. lazy는 들어오는 각 요청에 대한 요구에 따라 로드됩니다(각 요청 APICAST_CONFIGURATION_CACHE 에 대한 전체 새로 고침은 0이어야 함).
APICAST_CUSTOM_CONFIG
deprecated: 대신 정책을 사용하십시오.
기존 APIcast 논리를 재정의하는 사용자 정의 논리를 구현하는 Lua 모듈의 이름을 정의합니다.
APICAST_ENVIRONMENT
기본값:
값: string[:]
예: production:cloud-hosted
이중 콜론(:)구분된 환경 목록(또는 경로) APIcast를 로드해야 합니다. CLI에서 -e 또는 ---environment 매개변수 대신 사용할 수 있으며 예를 들어 컨테이너 이미지에 기본 환경으로 저장됩니다. CLI에 전달된 모든 값은 이 변수를 덮어씁니다.
APICAST_LOG_FILE
기본값: stderr
OpenResty 오류 로그를 저장할 파일을 정의합니다. 이는 error_log 지시문에서 bin/apicast 에서 사용합니다. 자세한 내용은 NGINX 설명서를 참조하십시오. 파일 경로는 절대 경로이거나 접두사 디렉토리(기본적으로apicast)를 기준으로 할 수 있습니다.
APICAST_LOG_LEVEL
값: debug | info | notice | warn | error | crit | alert | emerg
기본값: warn
OpenResty 로그의 로그 수준을 지정합니다.
APICAST_ACCESS_LOG_FILE
Default: stdout
액세스 로그를 저장할 파일을 정의합니다.
APICAST_OIDC_LOG_LEVEL
값: debug | info | notice | warn | error | crit | alert | emerg
기본값: err
를 통해 OpenID Connect 통합과 관련된 로그의 로그 수준을 설정할 수 있습니다.
APICAST_MANAGEMENT_API
값:
-
Disabled: 완전히 비활성화됨, 포트에서 수신 대기 -
status: 상태 점검에 활성화된/status/끝점만 -
Debug: 전체 API가 열려 있습니다.
관리 API 는 강력하며 APIcast 구성을 제어할 수 있습니다. 디버깅을 위해 디버그 수준만 활성화해야 합니다.
APICAST_MODULE
기본값: apicast
deprecated: 대신 정책을 사용하십시오.
API 게이트웨이 논리를 구현하는 기본 Lua 모듈의 이름을 지정합니다. 사용자 지정 모듈은 기본 apicast.lua 모듈의 기능을 재정의할 수 있습니다. 모듈 사용 방법에 대한 예제 를 참조하십시오.
APICAST_PATH_ROUTING
값:
-
true또는1의 경우 true -
false의 경우 false ,0또는 empty
이 매개변수가 true 로 설정되면 게이트웨이는 기본 호스트 기반 라우팅 외에도 경로 기반 라우팅을 사용합니다. API 요청은 요청의 Host 헤더 값이 Public Base URL 과 일치하는 서비스 목록에서 일치하는 매핑 규칙이 있는 첫 번째 서비스로 라우팅됩니다.
APICAST_POLICY_LOAD_PATH
기본값:APICAST_DIR/policies
값: string[:]
예:~/apicast/policies:$PWD/policies
이중 콜론(:)APIcast가 정책을 찾아야 하는 별도의 경로 목록입니다. 개발 디렉터리에서 정책을 먼저 로드하거나 예제를 로드하는 데 사용할 수 있습니다.
APICAST_PROXY_HTTPS_CERTIFICATE_KEY
기본값:
value: 문자열
예: /home/apicast/my_certificate.key
클라이언트 SSL 인증서의 키 경로입니다.
APICAST_PROXY_HTTPS_CERTIFICATE
기본값:
value: 문자열
예: /home/apicast/my_certificate.crt
업스트림에 연결할 때 APIcast가 사용할 클라이언트 SSL 인증서의 경로입니다. 이 인증서는 구성의 모든 서비스에 사용됩니다.
APICAST_PROXY_HTTPS_PASSWORD_FILE
기본값:
value: 문자열
예: /home/apicast/passwords.txt
APICAST_PROXY_HTTPS_CERTIFICATE_KEY 로 지정된 SSL 인증서 키의 암호가 있는 파일의 경로입니다.
APICAST_PROXY_HTTPS_SESSION_REUSE
기본값: on
값:
-
On: SSL 세션을 재사용합니다. -
off: SSL 세션을 재사용하지 않습니다.
APICAST_REPORTING_THREADS
기본값: 0
value: 정수 >= 0
실험적: 극단적인 로드에는 예측할 수 없는 성능이 있을 수 있으며 보고서가 손실될 수 있습니다.
값이 0보다 크면 백엔드에 대역 외 보고가 활성화됩니다. 이는 성능을 높이기 위한 새로운 실험 기능입니다. 클라이언트는 백엔드 대기 시간을 볼 수 없으며 모든 작업은 비동기적으로 처리됩니다. 이 값은 대기 시간을 추가하여 클라이언트가 제한되기 전에 동시에 실행할 수 있는 비동기 보고서 수를 결정합니다.
APICAST_RESPONSE_CODES
값:
-
true또는1의 경우 true -
false의 경우 false ,0또는 empty
기본값: <empty> (false)
true로 설정하면 APIcast가 API 백엔드에서 반환된 응답의 응답 코드를 3scale로 기록합니다. 일부 계획에서 이 정보는 나중에 3scale 관리 포털에서 참조할 수 있습니다. 3scale 지원 사이트에서 응답 코드 기능에 대한 자세한 내용을 확인하십시오.
APICAST_SERVICES_LIST
value: 쉼표로 구분된 서비스 ID 목록입니다.
3scale API Manager에 구성된 서비스를 필터링하고 게이트웨이의 특정 서비스에 대한 구성만 사용하여 목록에 지정되지 않은 해당 서비스 ID를 삭제합니다. 서비스 ID는 API 호출의 ID 로 태그가 지정된 Dashboard > APIs 페이지에서 확인할 수 있습니다.
APICAST_SERVICE_${ID}_CONFIGURATION_VERSION
${ID} 를 실제 서비스 ID로 교체합니다. 값은 관리 포털의 구성 기록에 표시되는 구성 버전이어야 합니다. 특정 버전으로 설정하면 자동으로 시작되지 않으며 항상 해당 버전을 사용합니다.
APICAST_WORKERS
기본값: auto
values:number | auto
nginx worker_processes 지시문 에서 사용할 값입니다. 기본적으로 APIcast는 1 이 사용되는 개발 환경을 제외하고 auto 를 사용합니다.
BACKEND_ENDPOINT_OVERRIDE
구성에서 백엔드 엔드포인트를 재정의하는 URI입니다. OpenShift 배포 AMP 외부에 배포할 때 유용합니다. 예:https://backend.example.com.
OPENSSL_VERIFY
값:
-
0,false: 피어 확인을 비활성화 -
1,true: 피어 확인을 활성화합니다.
OpenSSL Peer Verification을 제어합니다. OpenSSL은 시스템 인증서 저장소를 사용할 수 없기 때문에 기본적으로 비활성화되어 있습니다. 사용자 정의 인증서 번들이 필요하며 신뢰할 수 있는 인증서에 추가해야 합니다.
https://github.com/openresty/lua-nginx-module#lua_ssl_trusted_certificate 을 사용하고 export-builtin-trusted-certs 에서 생성된 인증서 번들을 가리키는 것이 좋습니다.
RESOLVER
OpenResty에서 사용할 사용자 지정 DNS 확인자를 지정할 수 있습니다. REprovisionVER 매개변수가 비어 있으면 DNS 확인자가 자동으로 검색됩니다.
THREESCALE_CONFIG_FILE
게이트웨이 구성이 있는 JSON 파일의 경로입니다. URL: < schema>://<admin-portal-domain>/admin/api/nginx/spec.json(예:
https://account-admin.3scale.net/admin/api/nginx/spec.json)을 사용하여 3scale 관리 포털에서 구성을 다운로드할 수 있습니다.
Docker를 사용하여 게이트웨이를 배포하면 파일이 docker 이미지에 읽기 전용 볼륨으로 삽입되어야 하며 경로는 볼륨이 마운트되는 위치(예: docker 컨테이너의 로컬 경로)를 나타냅니다.
샘플 구성 파일은 예제 폴더에 있습니다.
게이트웨이를 성공적으로 실행하려면 THREESCALE_PORTAL_ENDPOINT 또는 THREESCALE_CONFIG_FILE (우선 우선 순위)을 제공해야 합니다.
THREESCALE_DEPLOYMENT_ENV
값: 스테이징 | 프로덕션
기본값: production
이 환경 변수의 값은 새 APIcast를 사용할 때 3scale(Staging 또는 Production)에서 구성을 다운로드할 환경을 정의하는 데 사용됩니다.
이 값은 3scale Service Management API에 대한 authorize/report 요청의 X-3scale-User-Agent 헤더에도 사용됩니다. 이는 3scale에 의해 통계에만 사용됩니다.
THREESCALE_PORTAL_ENDPOINT
암호 및 포털 끝점이 포함된 URI: < schema>://<password>@<admin-portal-domain > . < password >는 3scale 계정 관리 API의 공급자 키 또는 액세스 토큰 일 수 있습니다. <admin-portal-domain>은 관리자 포털에 로그인하는 데 사용되는 URL입니다.
예:https://access-token@account-admin.3scale.net.
THREESCALE_PORTAL_ENDPOINT 환경 변수가 제공되면 게이트웨이는 초기화 시 3scale에서 구성을 다운로드합니다. 구성에는 API의 통합 페이지에 제공된 모든 설정이 포함됩니다.
게이트웨이를 성공적으로 실행하려면 THREESCALE_PORTAL_ENDPOINT 또는 THREESCALE_CONFIG_FILE (우선 우선 순위)을 제공해야 합니다.
OPENTRACING_TRACER
예:jaeger
이 환경 변수는 지금 로드할 추적 라이브러리를 제어합니다. jaeger 는 하나의 opentracing 추적기만 사용할 수 있습니다.
비어있는 경우 opentracing 지원이 비활성화됩니다.
OPENTRACING_CONFIG
이 환경 변수는 opentracing 추적기에 대한 구성 파일을 결정하는 데 사용됩니다. OPENTRACING_TRACER 가 설정되지 않은 경우 이 변수는 무시됩니다.
각 추적기에 기본 구성 파일 * jaeger: conf.d/opentracing/jaeger.example.json
이 변수를 사용하여 파일 경로를 설정하여 기본적으로 제공된 것과 다른 구성을 마운트하도록 선택할 수 있습니다.
예:/tmp/jaeger/jaeger.json
OPENTRACING_HEADER_FORWARD
기본값:uber-trace-id
이 환경 변수는 opentracing 정보를 전달하는 데 사용되는 HTTP 헤더를 제어합니다. 이 HTTP 헤더는 업스트림 서버로 전달됩니다.
APICAST_HTTPS_PORT
기본값: 값이 없음
HTTPS 연결 수신을 시작해야 하는 포트 APIcast를 제어합니다. HTTP 포트가 충돌하면 HTTPS에만 사용됩니다.
APICAST_HTTPS_CERTIFICATE
기본값: 값이 없음
HTTPS용 PEM 형식으로 X.509 인증서가 있는 파일의 경로입니다.
APICAST_HTTPS_CERTIFICATE_KEY
기본값: 값이 없음
PEM 형식으로 X.509 인증서 보안 키가 있는 파일의 경로입니다.
all_proxy, ALL_PROXY
default: no value: string example: http://forward-proxy:80
프로토콜별 프록시가 지정되지 않은 경우 서비스에 연결하는 데 사용할 HTTP 프록시를 정의합니다. 인증은 지원되지 않습니다.
http_proxy, HTTP_PROXY
default: no value: 문자열 예: http://forward-proxy:80
HTTP 서비스 연결에 사용할 HTTP 프록시를 정의합니다. 인증은 지원되지 않습니다.
https_proxy, HTTPS_PROXY
default: no value: 문자열 예: https://forward-proxy:443
HTTPS 서비스 연결에 사용할 HTTP 프록시를 정의합니다. 인증은 지원되지 않습니다.
no_proxy, NO_PROXY
기본값: 값 없음: string\[,<string>\]; * 예: foo,bar.com,.extra.dot.com
요청을 프록시해서는 안 되는 호스트 이름 및 도메인 이름 목록을 쉼표로 구분하여 정의합니다. 모든 호스트와 일치하는 단일 * 문자로 설정하면 프록시가 비활성화됩니다.