Red Hat 3scale API Management 설치
3scale API Management 설치 및 구성.
초록
머리말
이 가이드는 3scale을 설치하고 구성하는 데 유용한 정보를 제공합니다.
Red Hat 문서에 관한 피드백 제공
문서 개선을 위한 의견에 감사드립니다.
개선 사항을 제안하려면 Jira 문제를 열고 제안된 변경 사항을 설명합니다. 귀하의 요청을 신속하게 처리할 수 있도록 가능한 한 자세한 정보를 제공하십시오.
사전 요구 사항
- Red Hat 고객 포털 계정이 있어야 합니다. 이 계정을 사용하면 Red Hat Jira Software 인스턴스에 로그인할 수 있습니다. 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.
절차
- 다음 링크를 클릭합니다. 문제 생성.
- 요약 텍스트 상자에 문제에 대한 간략한 설명을 입력합니다.
설명 텍스트 상자에 다음 정보를 입력합니다.
- 문제를 발견한 페이지의 URL입니다.
-
문제에 대한 자세한 설명입니다.
다른 필드에 있는 정보는 기본값에 따라 그대로 둘 수 있습니다.
- 생성 을 클릭하여 Jira 문제를 문서 팀에 제출합니다.
피드백을 제공하기 위해 시간을 내어 주셔서 감사합니다.
1장. OpenShift에 3scale API Management 설치
이 섹션에서는 OpenShift에 Red Hat 3scale API Management 2.15를 배포하는 단계를 안내합니다.
온-프레미스 배포를 위한 3scale 솔루션은 다음과 같이 구성됩니다.
- 두 개의 API(애플리케이션 프로그래밍 인터페이스) 게이트웨이: 내장 APIcast.
- 영구 스토리지를 사용하는 3scale 관리 포털 및 개발자 포털.
- 3scale Istio Adapter는 Red Hat OpenShift Service Mesh 내에서 실행되는 서비스에 레이블을 지정하고 해당 서비스를 3scale과 통합할 수 있는 선택적 어댑터로 사용할 수 있습니다. 자세한 내용은 3scale 어댑터 설명서를 참조하십시오.
사전 요구 사항
- UTC(Coordinated Universal Time)에 대해 3scale 서버를 구성해야 합니다.
OpenShift에 3scale을 설치하려면 다음 섹션에 설명된 단계를 수행합니다.
1.1. OpenShift에 3scale API Management를 설치하기 위한 시스템 요구 사항
이 섹션에는 OpenShift에 Red Hat 3scale API Management를 설치하기 위한 시스템 요구 사항이 나열되어 있습니다.
1.1.1. 환경 요구사항
3scale에는 지원되는 구성에 지정된 환경이 필요합니다.
영구 볼륨에 대한 요구 사항은 배포 유형에 따라 다릅니다. 외부 데이터베이스를 사용하여 배포하는 경우 영구 볼륨이 필요하지 않습니다. 일부 배포 유형의 경우 Amazon S3 버킷이 영구 볼륨을 대체할 수 있습니다. 로컬 파일 시스템 스토리지를 사용하는 경우 영구 볼륨에 대한 특정 배포 유형 및 관련 요구 사항을 고려하십시오.
영구 볼륨
- Redis, MySQL 및 System-searchd 지속성을 위한 4 RWO(ReadWriteOnce) 영구 볼륨.
- 개발자 포털 콘텐츠 및 System-app Assets를 위한 1 RWX(ReadWriteMany) 영구 볼륨.
RWX 영구 볼륨을 그룹 쓰기 가능으로 구성합니다. 필요한 액세스 모드를 지원하는 영구 볼륨 유형 목록은 OpenShift 설명서를 참조하십시오.
NFS(네트워크 파일 시스템)는 RWX 볼륨의 3scale에서만 지원됩니다.
IBM Power(ppc64le) 및 IBM Z(s390x)의 경우 다음을 사용하여 로컬 스토리지를 프로비저닝합니다.
스토리지
- NFS
콘텐츠 관리 시스템(CMS) 스토리지에 Amazon Simple Storage Service(Amazon S3) 버킷을 사용하는 경우:
영구 볼륨
- Redis 및 MySQL 지속성을 위한 3 RWO(ReadWriteOnce) 영구 볼륨.
스토리지
- Amazon S3 버킷 1개
- NFS
1.1.2. 하드웨어 요구 사항
하드웨어 요구 사항은 사용 요구에 따라 다릅니다. 특정 요구 사항에 맞게 환경을 테스트하고 구성하는 것이 좋습니다. 다음은 OpenShift에서 3scale에 대한 환경을 구성할 때의 권장 사항입니다.
- 클라우드 환경(AWS c4.2xlarge 또는 Azure Standard_F8)에 배포할 수 있도록 최적화된 컴퓨팅 노드입니다.
- 메모리 요구 사항이 현재 노드의 사용 가능한 RAM을 초과하는 경우 Redis에 별도의 노드 (AWS M4 시리즈 또는 Azure Av2 시리즈)가 필요할 수 있습니다. 이는 배포가 포함된 Redis인 경우에만 해당합니다.
- 라우팅 작업과 컴퓨팅 작업 간에 노드를 분리합니다.
- 3scale 특정 작업을 위한 전용 컴퓨팅 노드입니다.
추가 리소스
1.2. OpenShift에 3scale API Management Operator 설치
3scale은 OCP(OpenShift Container Platform)의 마지막 두 가지 일반 가용성(GA) 릴리스를 지원합니다. 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.
이 문서에서는 다음을 수행하는 방법을 보여줍니다.
- 새 프로젝트를 생성합니다.
- Red Hat 3scale API Management 인스턴스를 배포합니다.
- Operator가 배포되면 사용자 정의 리소스를 배포합니다.
사전 요구 사항
관리자 권한이 있는 계정을 사용하여 지원되는 OpenShift Container Platform 4 클러스터에 액세스할 수 있습니다.
- 지원되는 구성에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.
새로 생성된 별도의 빈 프로젝트에 3scale Operator 및 CRD(사용자 정의 리소스 정의)를 배포합니다. 인프라가 포함된 기존 프로젝트에 배포하는 경우 기존 요소를 변경하거나 삭제할 수 있습니다.
OpenShift에 3scale Operator를 설치하려면 다음 섹션에 설명된 단계를 수행합니다.
1.2.1. 새 OpenShift 프로젝트 생성
다음 절차에서는 3scale-project
라는 새 OpenShift 프로젝트를 생성하는 방법을 설명합니다. 이 프로젝트 이름을 자신의 이름으로 바꿉니다.
절차
새 OpenShift 프로젝트를 생성하려면 다음을 수행합니다.
영숫자 및 대시를 사용하여 유효한 이름을 지정합니다. 예를 들어 아래 명령을 실행하여
3scale-project
를 생성합니다.oc new-project 3scale-project
$ oc new-project 3scale-project
Copy to Clipboard Copied!
이렇게 하면 Operator, APIManager CR(사용자 정의 리소스) 및 Capabilities 사용자 정의 리소스가 설치된 새 OpenShift 프로젝트 가 생성됩니다. Operator는 해당 프로젝트의 OLM을 통해 사용자 정의 리소스를 관리합니다.
1.2.2. OLM을 사용하여 3scale API Management Operator 설치 및 구성
OLM(Operator Lifecycle Manager)을 사용하여 OCP 콘솔의 OperatorHub를 통해 OCP(OpenShift Container Platform) 4.12(또는 위의) 클러스터에 3scale Operator를 설치합니다. 다음 설치 모드를 사용하여 3scale Operator를 설치할 수 있습니다.
- 클러스터 전체에서 클러스터의 모든 네임스페이스에서 Operator를 사용할 수 있습니다.
- 클러스터의 특정 네임스페이스
제한된 네트워크 또는 연결이 끊긴 클러스터에서 OpenShift Container Platform을 사용하는 경우 Operator Lifecycle Manager에서 더 이상 OperatorHub를 사용할 수 없습니다. 제한된 네트워크에서 Operator Lifecycle Manager를 사용하여 이름이 지정된 가이드의 OLM을 설정하고 사용하는 방법에 대한 지침을 따릅니다.
사전 요구 사항
- 새 OpenShift 프로젝트 생성에 정의된 프로젝트에 3scale Operator를 설치하고 배포해야 합니다.
절차
- OpenShift Container Platform 콘솔에서 관리자 권한이 있는 계정을 사용하여 로그인합니다.
- Operators > OperatorHub를 클릭합니다.
- 키워드로 필터링 상자에 3scale 연산자 를 입력하여 Red Hat Integration - 3scale 을 찾습니다.
- Red Hat Integration - 3scale 을 클릭합니다. Operator에 대한 정보가 표시됩니다.
- Operator에 대한 정보를 읽고 설치를 클릭합니다. Operator 설치 페이지가 열립니다.
- Operator 설치 페이지의 채널 업데이트 섹션에서 업데이트할 채널을 선택합니다.
설치 모드 섹션에서 Operator를 설치할 위치를 선택합니다.
- 클러스터의 모든 네임스페이스(기본값) - 클러스터의 모든 네임스페이스에서 Operator를 사용할 수 있습니다.
- 클러스터의 특정 네임스페이스 - Operator는 선택한 클러스터의 특정 단일 네임 스페이스에서만 사용할 수 있습니다.
- 설치를 클릭합니다.
- 설치가 완료되면 시스템에 Operator를 사용할 준비가 되었음을 나타내는 확인 메시지가 표시됩니다.
3scale Operator CSV(ClusterServiceVersion)가 올바르게 설치되었는지 확인합니다. 또한 Operator 설치가 성공했는지도 확인합니다.
- Operators > 설치된 Operators를 클릭합니다.
- Red Hat Integration - 3scale Operator를 클릭합니다.
- 세부 정보 탭에서 Conditions 섹션까지 아래로 스크롤합니다. 여기서 Succeeded 조건이 Reason 열에서 InstallSucceeded 되어야 합니다.
표시된 절차 외에도 제한된 네트워크에서 OCP를 사용하는 동안 3scale 개발자 포털에서 사용하려는 허용된 도메인 목록을 생성합니다. 다음 예제를 고려하십시오.
- 개발자 포털에 추가할 모든 링크입니다.
- SSO(Single Sign-On)는 GitHub와 같은 타사 SSO 공급자를 통해 통합됩니다.
- 빌링.
- 외부 URL을 트리거하는 Webhook입니다.
1.2.2.1. 연결이 끊긴 환경의 제한 사항
다음 목록에는 3scale 2.15에 대한 연결이 끊긴 환경의 현재 제한 사항이 요약되어 있습니다.
- 개발자 포털에 대한 GitHub 로그인은 사용할 수 없습니다.
- 지원 링크가 작동하지 않습니다.
- 외부 설명서에 대한 링크가 작동하지 않습니다.
- 개발자 포털의 OAS(OpenAPI Specification)의 유효성 검증기가 작동하지 않고 외부 서비스에 대한 링크에 영향을 미칩니다.
ActiveDocs 의 제품 개요 페이지에서 OAS에 대한 링크가 작동하지 않습니다.
- 또한 새 ActiveDocs 사양을 생성할 때 Skip swagger 검증 옵션을 확인해야 합니다.
1.2.3. OLM을 사용하여 3scale API Management Operator 업그레이드
3scale Operator를 단일 네임스페이스에서 Operator 기반 배포의 모든 네임스페이스에 클러스터 전체 설치로 업그레이드하려면 네임스페이스에서 3scale Operator를 제거한 다음 클러스터에서 Operator를 다시 설치해야 합니다.
클러스터 관리자는 웹 콘솔을 사용하여 선택한 네임스페이스에서 설치된 Operator를 삭제할 수 있습니다. Operator를 설치 제거해도 기존 3scale 인스턴스가 제거되지 않습니다.
네임스페이스에서 3scale Operator를 제거한 후 OLM을 사용하여 클러스터 전체 모드로 Operator를 설치할 수 있습니다.
사전 요구 사항
- 3scale 관리자 권한 또는 네임스페이스에 대한 삭제 권한이 있는 OpenShift 역할입니다.
프로세스
- OpenShift Container Platform 콘솔에서 관리자 권한이 있는 계정을 사용하여 로그인합니다.
- Operators > OperatorHub를 클릭합니다. 설치된 Operator 페이지가 표시됩니다.
- 이름으로 필터링 에 3scale 을 입력하여 Operator를 찾아 클릭합니다.
- Operator 세부 정보 페이지의 작업 드롭다운 메뉴에서 Operator 설치 제거를 선택하여 특정 네임스페이스에서 제거합니다.
Operator 설치 제거? 대화 상자가 표시되고 다음이 표시됩니다.
Removing the operator will not remove any of its custom resource definitions or managed resources. If your operator has deployed applications on the cluster or configured off-cluster resources, these will continue to run and need to be cleaned up manually. This action removes the operator as well as the Operator deployments and pods, if any. Any operands and resources managed by the operator, including CRDs and CRs, are not removed. The web console enables dashboards and navigation items for some operators. To remove these after uninstalling the operator, you might need to manually delete the operator CRDs.
Removing the operator will not remove any of its custom resource definitions or managed resources. If your operator has deployed applications on the cluster or configured off-cluster resources, these will continue to run and need to be cleaned up manually. This action removes the operator as well as the Operator deployments and pods, if any. Any operands and resources managed by the operator, including CRDs and CRs, are not removed. The web console enables dashboards and navigation items for some operators. To remove these after uninstalling the operator, you might need to manually delete the operator CRDs.
Copy to Clipboard Copied! - 설치 제거를 선택합니다. 이 Operator는 실행을 중지하고 더 이상 업데이트를 수신하지 않습니다.
- OpenShift Container Platform 콘솔에서 Operator > OperatorHub를 클릭합니다.
- 키워드로 필터링 상자에 3scale 연산자 를 입력하여 Red Hat Integration - 3scale 을 찾습니다.
- Red Hat Integration - 3scale 을 클릭합니다. Operator에 대한 정보가 표시됩니다.
- 설치를 클릭합니다. Operator 설치 페이지가 열립니다.
- Operator 설치 페이지의 채널 업데이트 섹션에서 업데이트할 채널을 선택합니다.
- 설치 모드 섹션에서 클러스터의 모든 네임스페이스(기본값)를 선택합니다. Operator는 클러스터의 모든 네임스페이스에서 사용할 수 있습니다.
- Subscribe를 클릭합니다. 3scale Operator 세부 정보 페이지가 표시되고 서브스크립션 개요를 볼 수 있습니다.
- 서브스크립션 업그레이드 상태가 업데이트로 표시되는지 확인합니다.
- 3scale Operator CSV(ClusterServiceVersion)가 표시되는지 확인합니다.
1.2.3.1. 마이크로 릴리스의 자동화된 애플리케이션 구성
외부 Oracle 데이터베이스를 사용하는 경우 3scale 업데이트 전략을 Manual 로 설정합니다. 외부 Oracle 데이터베이스를 사용하면 데이터베이스와 .spec.system.image
가 수동으로 업데이트됩니다. 자동 설정은 .spec.system.image
를 업데이트하지 않습니다. 외부 Oracle 데이터베이스를 사용하여 Operator 기반 설치를 업데이트하려면 link:h:Link3scale Migrating3scale 가이드를 참조하십시오.
자동 업데이트를 가져오려면 3scale Operator에 승인 전략이 자동으로 설정되어 있어야 합니다. 이를 통해 마이크로 릴리스 업데이트를 자동으로 적용할 수 있습니다. 다음에서는 자동 설정과 수동 설정의 차이점을 설명하고 절차의 단계를 간략하게 설명합니다.
자동 및 수동:
- 설치하는 동안 자동 설정은 기본적으로 선택한 옵션입니다. 새 업데이트의 설치는 사용 가능할 때 발생합니다. 설치하는 동안 또는 나중에 언제든지 변경할 수 있습니다.
- 설치 중 또는 설치 후 수동 옵션을 선택하면 언제든지 사용 가능한 업데이트를 받게 됩니다. 다음으로 설치 계획을 승인하고 직접 적용해야 합니다.
절차
- Operators > 설치된 Operators를 클릭합니다.
- 설치된 Operator 목록에서 Red Hat Integration - 3scale 을 클릭합니다.
- 서브스크립션 탭을 클릭합니다. 서브스크립션 세부 정보 제목 아래에는 하위 승인이 표시됩니다.
- 승인 아래 링크를 클릭합니다. 이 링크는 기본적으로 자동으로 설정됩니다. 업데이트 승인 전략 변경 이라는 제목이 있는 모달이 표시됩니다.
- 기본 설정 옵션 자동 (기본값) 또는 수동을 선택한 다음 저장을 클릭합니다.
추가 리소스
1.3. OpenShift에 APIcast Operator 설치
이 가이드에서는 OCP(OpenShift Container Platform) 콘솔을 통해 APIcast Operator를 설치하는 단계를 제공합니다.
사전 요구 사항
- 관리자 권한이 있는 OCP 4.x 이상
프로세스
-
Projects > Create Project에서 새 프로젝트
operator-test
를 생성합니다. - Operators > OperatorHub를 클릭합니다.
- 키워드로 필터링 상자에 apicast operator 를 입력하여 Red Hat Integration - 3scale APIcast 게이트웨이 를 찾습니다.
- Red Hat Integration - 3scale APIcast 게이트웨이 를 클릭합니다. APIcast Operator에 대한 정보가 표시됩니다.
- 설치를 클릭합니다. Create Operator Subscription 페이지가 열립니다.
Install 을 클릭하여 Create Operator Subscription 페이지에서 모든 기본 선택을 수락합니다.
참고클러스터 전체 또는 네임스페이스별 옵션과 같은 다양한 Operator 버전 및 설치 모드를 선택할 수 있습니다. 클러스터당 하나의 클러스터 설치만 있을 수 있습니다.
- 서브스크립션 업그레이드 상태가 최신으로 표시됩니다.
-
Operator > 설치된 Operator를 클릭하여 APIcast operator ClusterServiceVersion (CSV) 상태가
operator-test
프로젝트에 InstallSucceeded로 표시되는지 확인합니다.
1.4. Operator를 사용하여 3scale API Management 배포
이 섹션에서는 APIManager CR(사용자 정의 리소스)을 사용하여 3scale Operator를 통해 3scale 솔루션을 설치하고 배포하는 방법을 설명합니다.
3scale 2.6 이후 와일드카드 경로가 제거되었습니다.
- 이 기능은 백그라운드에서 Zync에 의해 처리됩니다.
- API 공급자가 생성, 업데이트 또는 삭제되면 경로에 해당 변경 사항이 자동으로 반영됩니다.
사전 요구 사항
- 3scale 용 마이크로 릴리스의 자동 업데이트를 받으려면 3scale Operator에서 자동 승인 기능을 활성화해야 합니다. Automatic은 기본 승인 설정입니다. 특정 요구 사항에 따라 언제든지 이를 변경하려면 마이크로 릴리스의 자동화된 애플리케이션 구성 단계를 사용하십시오.
- 먼저 Operator를 사용하여 3scale API Management를 배포하려면 OpenShift에 3scale API Management Operator 설치단계를 수행해야 합니다.
OpenShift Container Platform 4
- OpenShift 클러스터에서 관리자 권한이 있는 사용자 계정입니다.
- 지원되는 구성에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.
다음 절차에 따라 Operator를 사용하여 3scale을 배포합니다.
1.4.1. APIManager 사용자 정의 리소스 배포
Amazon Simple Storage Service(Amazon S3)를 사용하려면 Amazon Simple Storage Service 3scale API Management fileStorage 설치를 참조하십시오.
Operator는 APIManager CR을 감시하고 APIManager CR에 지정된 대로 필요한 3scale 솔루션을 배포합니다.
프로세스
Operators > 설치된 Operators를 클릭합니다.
- 설치된 Operator 목록에서 Red Hat Integration - 3scale 을 클릭합니다.
- API Manager 탭을 클릭합니다.
- APIManager 생성을 클릭합니다.
샘플 콘텐츠를 지우고 편집기에 다음 YAML 정의를 추가한 다음 생성 을 클릭합니다.
3scale 2.8 이전에는
highAvailability
필드를true
로 설정하여 복제본을 자동으로 추가할 수 있습니다. 3scale 2.8의 다음 예와 같이 복제본 추가는 APIManager CR의 replicas 필드를 통해 제어됩니다.참고wildcardDomain 매개변수의 값은 OCP(OpenShift Container Platform) 라우터 주소로 확인되는 유효한 도메인 이름이어야 합니다. 예를 들면
apps.mycluster.example.com
입니다.최소 요구사항이 있는 APIManager CR:
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: wildcardDomain: example.com
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: wildcardDomain: example.com
Copy to Clipboard Copied! 복제본이 구성된 APIManager CR:
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: system: appSpec: replicas: 1 sidekiqSpec: replicas: 1 zync: appSpec: replicas: 1 queSpec: replicas: 1 backend: cronSpec: replicas: 1 listenerSpec: replicas: 1 workerSpec: replicas: 1 apicast: productionSpec: replicas: 1 stagingSpec: replicas: 1 wildcardDomain: example.com
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: system: appSpec: replicas: 1 sidekiqSpec: replicas: 1 zync: appSpec: replicas: 1 queSpec: replicas: 1 backend: cronSpec: replicas: 1 listenerSpec: replicas: 1 workerSpec: replicas: 1 apicast: productionSpec: replicas: 1 stagingSpec: replicas: 1 wildcardDomain: example.com
Copy to Clipboard Copied!
1.4.2. 관리자 포털 URL 가져오기
Operator를 사용하여 3scale을 배포할 때 기본 테넌트는 3scale-admin.$wildcardDomain}
을 사용하여 고정 URL로 생성됩니다.
wildcardDomain
은 설치 중에 제공한 < wildCardDomain > 매개변수입니다. 다음 명령을 사용하여 브라우저에서 이 고유한 URL을 엽니다.
xdg-open https://3scale-admin.3scale-project.example.com
$ xdg-open https://3scale-admin.3scale-project.example.com
필요한 경우 MASTER 포털 URL:master.${wildcardDomain}
에서 새 테넌트를 만들 수 있습니다.
1.4.3. APIManager 관리 포털 및 마스터 관리 포털 인증 정보 가져오기
<namespace>를 APIManager 리소스가 생성된 네임스페이스 이름으로 바꿉니다.
Operator 기반 배포 후 3scale 관리 포털 또는 마스터 관리 포털에 로그인하려면 별도의 포털마다 인증 정보가 필요합니다. 다음 인증 정보를 가져오려면 다음을 수행합니다.
다음 명령을 실행하여 관리 포털 인증 정보를 가져옵니다.
oc get secret system-seed -n <namespace> -o json | jq -r .data.ADMIN_USER | base64 -d oc get secret system-seed -n <namespace> -o json | jq -r .data.ADMIN_PASSWORD | base64 -d
$ oc get secret system-seed -n <namespace> -o json | jq -r .data.ADMIN_USER | base64 -d $ oc get secret system-seed -n <namespace> -o json | jq -r .data.ADMIN_PASSWORD | base64 -d
Copy to Clipboard Copied! - 관리 포털 관리자로 로그인하여 이러한 인증 정보가 작동하는지 확인합니다.
다음 명령을 실행하여 마스터 관리 포털 인증 정보를 가져옵니다.
oc get secret system-seed -n <namespace> -o json | jq -r .data.MASTER_USER | base64 -d oc get secret system-seed -n <namespace> -o json | jq -r .data.MASTER_PASSWORD | base64 -d
$ oc get secret system-seed -n <namespace> -o json | jq -r .data.MASTER_USER | base64 -d $ oc get secret system-seed -n <namespace> -o json | jq -r .data.MASTER_PASSWORD | base64 -d
Copy to Clipboard Copied! - 마스터 관리 포털 관리자로 로그인하여 이러한 인증 정보가 작동하는지 확인합니다.
추가 리소스
필요한 경우 MASTER 포털 URL:master.${wildcardDomain}
에서 새 테넌트를 만들 수 있습니다.
1.4.4. Operator를 사용한 3scale API Management의 외부 데이터베이스
Red Hat 3scale API Management 배포에서 데이터베이스를 외부화하는 경우 애플리케이션 격리와 데이터베이스 수준의 서비스 중단에 대한 복원력을 제공합니다. 서비스 중단에 대한 복원력은 데이터베이스를 호스팅하는 인프라 또는 플랫폼 공급자가 제공하는 SLA(서비스 수준 계약)에 따라 달라집니다. 이는 3scale에서 제공되지 않습니다. 선택한 배포에서 제공하는 데이터베이스를 외부화하는 방법에 대한 자세한 내용은 관련 문서를 참조하십시오.
Operator를 사용하여 3scale에 외부 데이터베이스를 사용할 때 하나 이상의 데이터베이스가 실패하는 경우 중단없는 가동 시간을 제공하는 것이 목적입니다.
3scale Operator 기반 배포에서 외부 데이터베이스를 사용하는 경우 다음 사항에 유의하십시오.
- 3scale 중요한 데이터베이스를 외부에서 구성 및 배포합니다. 중요한 데이터베이스에는 시스템 데이터베이스, 시스템 redis 및 백엔드 redis 구성 요소가 포함됩니다. 이러한 구성 요소를 고가용성(HA)으로 배포 및 구성해야 합니다.
3scale을 배포하기 전에 해당 Kubernetes 시크릿을 생성하여 3scale용 구성 요소에 대한 연결 끝점을 지정합니다.
- 자세한 내용은 외부 데이터베이스 설치를 참조하십시오.
- 데이터베이스 이외의 배포 구성에 대한 자세한 내용은 Pod 중단 예산 활성화를 참조하십시오.
APIManager
CR에서.spec.externalComponents
속성을 설정하여 시스템 데이터베이스, 시스템 redis 및 백엔드 redis가 외부임을 지정합니다.externalComponents: backend: redis: true system: database: true redis: true zync: database: true
externalComponents: backend: redis: true system: database: true redis: true zync: database: true
Copy to Clipboard Copied!
또한 zync 데이터베이스를 다시 시작할 때 큐 작업 데이터가 손실되는 것을 방지하기 위해 zync 데이터베이스를 고가용성으로 설정하려면 다음 사항에 유의하십시오.
- 외부에서 zync 데이터베이스를 배포하고 구성합니다. 데이터베이스를 고가용성으로 배포하고 구성해야 합니다.
3scale을 배포하기 전에 해당 Kubernetes 시크릿을 생성하여 3scale의 zync 데이터베이스에 대한 연결 끝점을 지정합니다.
- Zync 데이터베이스 시크릿을 참조하십시오.
-
zync 데이터베이스가 외부 데이터베이스임을 지정하려면
APIManager
CR의.spec.externalComponents.zync.database
속성을true
로 설정하여 3scale을 구성합니다.
1.5. Operator를 사용하여 OpenShift에서 3scale API Management에 대한 배포 구성 옵션
이 노트에 포함된 외부 웹 사이트 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 본인이 그러한 외부 사이트나 콘텐츠를 사용(또는 신뢰)하여 초래되는 어떠한 손실이나 비용에 대해 Red Hat이 어떠한 책임도 지지 않는 데 동의합니다.
이 섹션에서는 Operator를 사용하여 OpenShift에서 Red Hat 3scale API Management의 배포 구성 옵션에 대해 설명합니다.
사전 요구 사항
- 먼저 Operator를 사용하여 3scale API Management를 배포하려면 OpenShift에 3scale API Management Operator 설치 단계를 수행해야 합니다.
OpenShift Container Platform 4.x.
- OpenShift 클러스터에서 관리자 권한이 있는 사용자 계정입니다.
1.5.1. 내장된 APIcast에 대한 프록시 매개변수 구성
3scale 관리자는 내장된 APIcast 준비 및 프로덕션에 대한 프록시 매개변수를 구성할 수 있습니다. 이 섹션에서는 APIManager CR(사용자 정의 리소스)에서 프록시 매개변수를 지정하는 데 필요한 참조 정보를 제공합니다. 즉, APIManager CR인 3scale Operator를 사용하여 OpenShift에 3scale을 배포합니다.
APIManager CR을 처음 배포할 때 이러한 매개변수를 지정하거나 배포된 APIManager CR을 업데이트할 수 있으며 Operator에서 업데이트를 조정할 수 있습니다. APIManager 사용자 정의 리소스 배포를 참조하십시오.
내장된 APIcast의 프록시 관련 구성 매개변수는 다음 네 가지입니다.
-
allProxy
-
httpProxy
-
httpsProxy
-
noProxy
allProxy
allProxy
매개변수는 요청이 프로토콜별 프록시를 지정하지 않는 경우 서비스 연결에 사용할 HTTP 또는 HTTPS 프록시를 지정합니다.
프록시를 설정한 후 allProxy
매개변수를 프록시 주소로 설정하여 APIcast를 구성합니다. 프록시에서 인증이 지원되지 않습니다. 즉, APIcast는 인증된 요청을 프록시에 보내지 않습니다.
allProxy
매개변수의 값은 문자열이며, 기본값이 없으며 매개 변수는 필요하지 않습니다. spec.apicast.productionSpec.allProxy
매개변수 또는 spec.apicast.stagingSpec.allProxy
매개변수를 설정하려면 이 형식을 사용합니다.
<scheme>://<host>:<port>
예를 들면 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: apicast: productionSpec: allProxy: http://forward-proxy:80 stagingSpec: allProxy: http://forward-proxy:81
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
allProxy: http://forward-proxy:80
stagingSpec:
allProxy: http://forward-proxy:81
httpProxy
httpProxy
매개변수는 HTTP 서비스 연결에 사용할 HTTP 프록시를 지정합니다.
프록시를 설정한 후 httpProxy
매개변수를 프록시 주소로 설정하여 APIcast를 구성합니다. 프록시에서 인증이 지원되지 않습니다. 즉, APIcast는 인증된 요청을 프록시에 보내지 않습니다.
httpProxy
매개변수의 값은 문자열이며, 기본값이 없으며 매개 변수는 필요하지 않습니다. spec.apicast.productionSpec.httpProxy
매개변수 또는 spec.apicast.stagingSpec.httpProxy
매개변수를 설정하려면 이 형식을 사용합니다.
http://<host>:<port>
예를 들면 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: apicast: productionSpec: httpProxy: http://forward-proxy:80 stagingSpec: httpProxy: http://forward-proxy:81
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
httpProxy: http://forward-proxy:80
stagingSpec:
httpProxy: http://forward-proxy:81
httpsProxy
httpsProxy
매개변수는 서비스 연결에 사용할 HTTPS 프록시를 지정합니다.
프록시를 설정한 후 httpsProxy
매개변수를 프록시 주소로 설정하여 APIcast를 구성합니다. 프록시에서 인증이 지원되지 않습니다. 즉, APIcast는 인증된 요청을 프록시에 보내지 않습니다.
httpsProxy
매개변수의 값은 문자열이며, 기본값이 없으며 매개 변수는 필요하지 않습니다. spec.apicast.productionSpec.httpsProxy
매개변수 또는 spec.apicast.stagingSpec.httpsProxy
매개변수를 설정하려면 이 형식을 사용합니다.
https://<host>:<port>
예를 들면 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: apicast: productionSpec: httpsProxy: https://forward-proxy:80 stagingSpec: httpsProxy: https://forward-proxy:81
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
httpsProxy: https://forward-proxy:80
stagingSpec:
httpsProxy: https://forward-proxy:81
noProxy
noProxy
매개변수는 쉼표로 구분된 호스트 이름과 도메인 이름을 지정합니다. 요청에 이러한 이름 중 하나가 포함되어 있으면 APIcast에서 요청을 프록시하지 않습니다.
프록시에 대한 액세스를 중지해야 하는 경우(예: 유지 관리 작업 중) noProxy
매개변수를 별표(*)로 설정합니다. 이는 모든 요청에 지정된 모든 호스트와 일치하며 프록시를 효과적으로 비활성화합니다.
noProxy
매개변수의 값은 문자열이며, 기본값이 없으며 매개 변수는 필요하지 않습니다. spec.apicast.productionSpec.noProxy
매개변수 또는 spec.apicast.stagingSpec.noProxy
매개변수를 설정하려면 쉼표로 구분된 문자열을 지정합니다. 예를 들면 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: apicast: productionSpec: noProxy: theStore,company.com,big.red.com stagingSpec: noProxy: foo,bar.com,.extra.dot.com
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
noProxy: theStore,company.com,big.red.com
stagingSpec:
noProxy: foo,bar.com,.extra.dot.com
1.5.2. 3scale API Management Operator를 사용하여 사용자 정의 환경 삽입
포함된 APIcast를 사용하는 3scale 설치에서는 3scale 연산자를 사용하여 사용자 정의 환경을 삽입할 수 있습니다. 임베디드 APIcast는 관리 또는 호스팅 APIcast라고도 합니다. 사용자 지정 환경은 게이트웨이가 제공하는 모든 업스트림 API에 APIcast가 적용되는 동작을 정의합니다. 사용자 지정 환경을 만들려면 Lua 코드에서 글로벌 구성을 정의합니다.
3scale 설치 전이나 후에 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경을 삽입한 후 3scale 설치 후 사용자 지정 환경을 제거할 수 있습니다. 3scale Operator는 변경 사항을 조정합니다.
사전 요구 사항
- 3scale Operator가 설치되어 있습니다.
절차
삽입할 사용자 지정 환경을 정의하는 Lua 코드를 작성합니다. 예를 들어 다음
env1.lua
파일은 3scale 운영자가 모든 서비스에 대해 로드하는 사용자 지정 로깅 정책을 보여줍니다.local cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
local cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
Copy to Clipboard Copied! 사용자 지정 환경을 정의하는 Lua 파일에서 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic custom-env-1 --from-file=./env1.lua
$ oc create secret generic custom-env-1 --from-file=./env1.lua
Copy to Clipboard Copied! 시크릿에는 여러 사용자 지정 환경이 포함될 수 있습니다. 사용자 지정 환경을 정의하는 각 파일에 대해
-from-file
옵션을 지정합니다. Operator는 각 사용자 지정 환경을 로드합니다.방금 생성한 시크릿을 참조하는 APIManager CR(사용자 정의 리소스)을 정의합니다. 다음 예제에서는 사용자 지정 환경을 정의하는 시크릿을 참조하는 상대적 콘텐츠만 보여줍니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-environment spec: wildcardDomain: <desired-domain> apicast: productionSpec: customEnvironments: - secretRef: name: custom-env-1 stagingSpec: customEnvironments: - secretRef: name: custom-env-1
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-environment spec: wildcardDomain: <desired-domain> apicast: productionSpec: customEnvironments: - secretRef: name: custom-env-1 stagingSpec: customEnvironments: - secretRef: name: custom-env-1
Copy to Clipboard Copied! APIManager CR은 사용자 정의 환경을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 환경을 로드합니다.
사용자 지정 환경을 추가하는 APIManager CR을 생성합니다. 예를 들면 다음과 같습니다.
oc apply -f apimanager.yaml
$ oc apply -f apimanager.yaml
Copy to Clipboard Copied!
다음 단계
사용자 지정 환경을 정의하는 보안의 콘텐츠를 업데이트할 수 없습니다. 사용자 지정 환경을 업데이트해야 하는 경우 다음 중 하나를 수행할 수 있습니다.
-
권장 옵션은 다른 이름으로 시크릿을 생성하고 APIManager CR 필드인
customEnvironments[].secretRef.name
을 업데이트하는 것입니다. Operator는 롤링 업데이트를 트리거하고 업데이트된 사용자 지정 환경을 로드합니다. -
또는
spec.apicast.productionSpec.replicas
또는spec.apicast.stagingSpec.replicas
를 0으로 설정하여 기존 보안을 업데이트하고spec.apicast.productionSpec.replicas
또는spec.apicast.stagingSpec.replicas
를 이전 값으로 설정하여 APIcast를 다시 배포할 수 있습니다.
1.5.3. 3scale API Management Operator를 사용하여 사용자 정의 정책 삽입
내장 APIcast를 사용하는 3scale 설치에서는 3scale Operator를 사용하여 사용자 지정 정책을 삽입할 수 있습니다. 임베디드 APIcast는 관리 또는 호스팅 APIcast라고도 합니다. 사용자 지정 정책을 삽입하면 정책 코드가 APIcast에 추가됩니다. 그런 다음 다음 중 하나를 사용하여 API 제품의 정책 체인에 사용자 지정 정책을 추가할 수 있습니다.
- 3scale API
-
Product
CR(사용자 정의 리소스)
3scale 관리 포털을 사용하여 제품의 정책 체인에 사용자 정의 정책을 추가하려면 사용자 정의 정책의 스키마를 CustomPolicyDefinition
CR에 등록해야 합니다. 사용자 지정 정책 등록은 관리 포털을 사용하여 제품의 정책 체인을 구성하려는 경우에만 필요합니다.
3scale 설치 후 또는 의 일부로 사용자 지정 정책을 삽입할 수 있습니다. 사용자 지정 정책을 삽입한 후 3scale 설치 후 APIManager CR에서 사양을 제거하여 사용자 지정 정책을 제거할 수 있습니다. 3scale Operator는 변경 사항을 조정합니다.
사전 요구 사항
- 3scale Operator를 설치하거나 이전에 설치했습니다.
-
자체 정책 쓰기에 설명된 대로 사용자 지정 정책을 정의했습니다. 즉, 사용자 지정 정책을 정의하는
my-policy.lua
,apicast-policy.json
,init.lua
파일을 이미 생성했습니다.
절차
하나의 사용자 지정 정책을 정의하는 파일에서 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
$ oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
Copy to Clipboard Copied! 사용자 지정 정책이 두 개 이상 있는 경우 각 사용자 지정 정책에 대한 보안을 생성합니다. 보안에는 하나의 사용자 지정 정책만 포함될 수 있습니다.
3scale Operator를 사용하여 시크릿 변경 사항을 모니터링합니다.
apimanager.apps.3scale.net/watched-by=apimanager
레이블을 추가하여 3scale Operator 시크릿 변경 모니터링을 시작합니다.oc label secret my-first-custom-policy-secret apimanager.apps.3scale.net/watched-by=apimanager
$ oc label secret my-first-custom-policy-secret apimanager.apps.3scale.net/watched-by=apimanager
Copy to Clipboard Copied! 참고기본적으로 시크릿 변경은 3scale Operator에서 추적하지 않습니다. 레이블을 배치하면 3scale Operator가 시크릿을 변경할 때마다 APIcast 배포를 자동으로 업데이트합니다. 이는 시크릿이 사용 중인 스테이징 및 프로덕션 환경 모두에서 발생합니다. 3scale Operator는 어떤 방식으로든 시크릿의 소유권을 허용하지 않습니다.
사용자 정의 정책이 포함된 각 보안을 참조하는 APIManager CR을 정의합니다. APIcast 스테이징 및 APIcast 프로덕션에 대해 동일한 시크릿을 지정할 수 있습니다. 다음 예제에서는 사용자 정의 정책이 포함된 보안을 참조하는 것과 관련된 콘텐츠만 보여줍니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-policy spec: apicast: stagingSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret productionSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-policy spec: apicast: stagingSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret productionSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret
Copy to Clipboard Copied! APIManager CR은 다른 사용자 정의 정책을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 정책을 로드합니다.
사용자 정의 정책이 포함된 보안을 참조하는 APIManager CR을 생성합니다. 예를 들면 다음과 같습니다.
oc apply -f apimanager.yaml
$ oc apply -f apimanager.yaml
Copy to Clipboard Copied!
다음 단계
apimanager.apps.3scale.net/watched-by=apimanager
레이블을 적용하면 3scale Operator가 시크릿의 변경 사항 모니터링을 시작합니다. 이제 보안 내에서 사용자 정의 정책을 수정할 수 있으며 Operator는 롤링 업데이트를 시작하여 업데이트된 사용자 지정 환경을 로드합니다.
-
또는
spec.apicast.productionSpec.replicas
또는spec.apicast.stagingSpec.replicas
를 0으로 설정하여 기존 보안을 업데이트하고spec.apicast.productionSpec.replicas
또는spec.apicast.stagingSpec.replicas
를 이전 값으로 설정하여 APIcast를 다시 배포할 수 있습니다.
1.5.4. 3scale API Management Operator를 사용하여 OpenTracing 구성
내장 APIcast를 사용하는 3scale 설치에서는 3scale Operator를 사용하여 OpenTracing을 구성할 수 있습니다. 스테이징 또는 프로덕션 환경에서 또는 두 환경 모두에서 OpenTracing을 구성할 수 있습니다. OpenTracing을 활성화하면 APIcast 인스턴스에 대한 더 많은 통찰력과 가시성을 얻을 수 있습니다.
사전 요구 사항
- 3scale Operator가 설치되었거나 설치 중입니다.
프로세스
stringData.config
에 OpenTracing 구성 세부 정보가 포함된 시크릿을 정의합니다. 이는 OpenTracing 구성 세부 정보가 포함된 속성에 대해 유일하게 유효한 값입니다. 다른 사양에서는 APIcast가 OpenTracing 구성 세부 정보를 수신하지 못하도록 합니다. 다음 예제에서는 유효한 보안 정의를 보여줍니다.apiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
apiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
Copy to Clipboard Copied! 시크릿을 생성합니다. 예를 들어 이전 시크릿 정의를
myjaeger.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc create -f myjaeger.yaml
$ oc create -f myjaeger.yaml
Copy to Clipboard Copied! OpenTracing
특성을 지정하는 APIManager CR(사용자 정의 리소스)을 정의합니다. CR 정의에서openTracing.tracingConfigSecretRef.name
속성을 OpenTracing 구성 세부 정보가 포함된 시크릿 이름으로 설정합니다. 다음 예제에서는 OpenTracing 구성을 기준으로 한 콘텐츠만 보여줍니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager1 spec: apicast: stagingSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger productionSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager1 spec: apicast: stagingSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger productionSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger
Copy to Clipboard Copied! OpenTracing을 구성하는 APIManager CR을 생성합니다. 예를 들어 APIManager CR을
apimanager1.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc apply -f apimanager1.yaml
$ oc apply -f apimanager1.yaml
Copy to Clipboard Copied!
다음 단계
OpenTracing이 설치된 방법에 따라 Jaeger 서비스 사용자 인터페이스에 추적이 표시되어야 합니다.
추가 리소스
1.5.5. 3scale API Management Operator를 사용하여 Pod 수준에서 TLS 활성화
3scale은 두 개의 APIcast 인스턴스를 배포합니다. 하나는 프로덕션용이고 다른 하나는 스테이징용입니다. TLS는 프로덕션 또는 스테이징 전용 또는 두 인스턴스에 대해서만 활성화할 수 있습니다.
사전 요구 사항
- TLS를 활성화하는 유효한 인증서입니다.
프로세스
유효한 인증서에서 보안을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret tls mycertsecret --cert=server.crt --key=server.key
$ oc create secret tls mycertsecret --cert=server.crt --key=server.key
Copy to Clipboard Copied! 구성은 APIManager CR(사용자 정의 리소스)에 시크릿 참조를 노출합니다. 보안을 생성한 다음 다음과 같이 APIManager CR에서 시크릿 이름을 참조합니다.
-
production: APIManager CR은
.spec.apicast.productionSpec.httpsCertificateSecretRef
필드에 인증서를 노출합니다. staging: APIManager CR은
.spec.apicast.stagingSpec.httpsCertificateSecretRef
필드에 인증서를 노출합니다.선택적으로 다음을 구성할 수 있습니다.
-
httpsPort
는 HTTPS 연결을 수신 대기해야 하는 포트 APIcast를 나타냅니다. HTTP 포트 APIcast와 충돌하면 이 포트를 HTTPS에만 사용합니다. httpsVerifyDepth
는 클라이언트 인증서 체인의 최대 길이를 정의합니다.참고APIManager CR에서 유효한 인증서 및 참조를 제공합니다. 구성이
httpsPort
에 액세스할 수 있지만httpsCertificateSecretRef
가 아닌 경우 APIcast는 자체 서명된 인증서를 사용합니다. 이는 권장되지 않습니다.
-
production: APIManager CR은
- Operators > 설치된 Operators를 클릭합니다.
- 설치된 Operator 목록에서 3scale Operator를 클릭합니다.
- API Manager 탭을 클릭합니다.
- APIManager 생성을 클릭합니다.
편집기에 다음 YAML 정의를 추가합니다.
프로덕션 환경에 사용할 수 있는 경우 다음 YAML 정의를 구성합니다.
spec: apicast: productionSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
spec: apicast: productionSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
Copy to Clipboard Copied! 스테이징 을 활성화하는 경우 다음 YAML 정의를 구성합니다.
spec: apicast: stagingSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
spec: apicast: stagingSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
Copy to Clipboard Copied!
- 생성을 클릭합니다.
1.5.6. 평가 배포에 대한 개념 증명
다음 섹션에서는 3scale 평가 배포에 대한 개념 증명에 적용되는 구성 옵션에 대해 설명합니다. 이 배포에서는 내부 데이터베이스를 기본값으로 사용합니다.
외부 데이터베이스의 구성은 프로덕션 환경의 표준 배포 옵션입니다.
1.5.6.1. 기본 배포 구성
컨테이너에 Kubernetes 리소스 제한 및 요청이 있습니다.
- 이는 최소 성능 수준을 보장합니다.
- 리소스를 제한하여 외부 서비스 및 솔루션 할당을 허용합니다.
- 내부 데이터베이스를 배포합니다.
파일 스토리지는 지속성 볼륨(PV)을 기반으로 합니다.
- 하나는 읽기, 쓰기, 실행(RWX) 액세스 모드가 필요합니다.
- OpenShift는 요청 시 이를 제공하도록 구성되어 있습니다.
- MySQL을 내부 관계형 데이터베이스로 배포합니다.
기본 구성 옵션은 PoC(Proof of concept) 또는 고객의 평가에 적합합니다.
APIManager CR(사용자 정의 리소스)의 특정 필드 값으로 기본 구성 옵션 중 하나 또는 모든 기본 구성 옵션을 덮어쓸 수 있습니다. 3scale Operator는 사용 가능한 모든 조합을 허용합니다. 예를 들어 3scale 연산자를 사용하면 평가 모드 및 외부 데이터베이스 모드에서 3scale을 배포할 수 있습니다.
1.5.6.2. 평가 설치
평가 설치의 경우 컨테이너에 kubernetes 리소스 제한 및 요청이 지정되지 않습니다. 예를 들면 다음과 같습니다.
- 작은 메모리 공간
- 빠른 시작
- 랩탑에서 실행 가능
- 사전 판매 / 판매 데모에 적합
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: lvh.me resourceRequirementsEnabled: false
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
resourceRequirementsEnabled: false
추가 리소스
1.5.7. 외부 데이터베이스 설치
- Red Hat 3scale API Management 배포에서 데이터베이스를 외부화하는 경우 애플리케이션 격리와 데이터베이스 수준의 서비스 중단에 대한 복원력을 제공합니다. 서비스 중단에 대한 복원력은 데이터베이스를 호스팅하는 인프라 또는 플랫폼 공급자가 제공하는 SLA(서비스 수준 계약)에 따라 달라집니다. 이는 3scale에서 제공되지 않습니다. 선택한 배포에서 제공하는 데이터베이스를 외부화하는 방법에 대한 자세한 내용은 관련 문서를 참조하십시오.
- 면책 조항: 여기에 포함된 외부 웹 사이트 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 본인이 그러한 외부 사이트나 콘텐츠를 사용(또는 신뢰)하여 초래되는 어떠한 손실이나 비용에 대해 Red Hat이 어떠한 책임도 지지 않는 데 동의합니다.
외부 데이터베이스 설치는 중단없는 가동 시간을 제공하거나 자체 데이터베이스를 재사용하려는 프로덕션에 적합합니다.
3scale 외부 데이터베이스 설치 모드를 활성화할 때 다음 데이터베이스 중 하나 이상을 3scale 외부로 구성할 수 있습니다.
-
backend-redis
-
system-redis
-
system-database
(mysql
,postgresql
또는Oracle
) -
zync-database
3scale을 배포하기 위해 APIManager CR을 생성하기 전에 OpenShift 시크릿을 사용하여 외부 데이터베이스에 대해 다음 연결 설정을 제공해야 합니다.
1.5.7.1. 백엔드 Redis 시크릿
3scale 백엔드는 두 개의 Redis 데이터베이스를 사용합니다. 하나는 스토리지용이고 하나는 대기열용입니다. 스토리지 데이터베이스에는 현재 사용 및 기록 분석을 포함하여 API 서비스, 애플리케이션 키, 메트릭, 제한 및 사용 데이터에 대한 정보가 들어 있습니다. 사용 데이터는 Redis 스토리지 데이터베이스에 고유하며 시스템 구성 요소의 데이터베이스는 다른 데이터의 기본 소스이며 필요한 경우 다시 생성할 수 있습니다.
큐 데이터베이스는 API 사용량 보고를 위해 Resque 를 기반으로 백그라운드 작업 큐를 임시로 저장합니다. 백엔드 리스너는 이러한 작업을 생성하고 백엔드 작업자는 이를 처리합니다.
다음 예와 같이 두 개의 외부 Redis 인스턴스를 배포하고 연결 설정을 작성합니다.
apiVersion: v1 kind: Secret metadata: name: backend-redis stringData: REDIS_STORAGE_URL: "redis://backend-redis-storage" REDIS_STORAGE_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379" REDIS_STORAGE_SENTINEL_ROLE: "master" REDIS_QUEUES_URL: "redis://backend-redis-queues" REDIS_QUEUES_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379" REDIS_QUEUES_SENTINEL_ROLE: "master" type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: backend-redis
stringData:
REDIS_STORAGE_URL: "redis://backend-redis-storage"
REDIS_STORAGE_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
REDIS_STORAGE_SENTINEL_ROLE: "master"
REDIS_QUEUES_URL: "redis://backend-redis-queues"
REDIS_QUEUES_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
REDIS_QUEUES_SENTINEL_ROLE: "master"
type: Opaque
시크릿 이름은 backend-redis
여야 합니다.
필드 | 설명 | 기본값 |
---|---|---|
REDIS_STORAGE_URL | 백엔드 Redis 스토리지 데이터베이스 URL. |
인스턴스를 외부에서 관리할 때 필요합니다. 그렇지 않으면 기본값은 |
REDIS_STORAGE_SENTINEL_ROLE |
백엔드 Redis Storage Sentinel 역할 이름( |
|
REDIS_STORAGE_SENTINEL_HOSTS | 백엔드 Redis Storage Sentinel 호스트 이름입니다. Redis Sentinel이 Redis 데이터베이스에 구성된 경우에만 사용합니다. |
|
REDIS_QUEUES_URL | 백엔드 Redis Queues 데이터베이스 URL. |
인스턴스를 외부에서 관리할 때 필요합니다. 그렇지 않으면 기본값은 |
REDIS_QUEUES_SENTINEL_ROLE |
백엔드 Redis Queues Sentinel 역할 이름( |
|
REDIS_QUEUES_SENTINEL_HOSTS | 백엔드 Redis Queues Sentinel 호스트 이름입니다. Redis Sentinel이 Redis 데이터베이스에 구성된 경우에만 사용합니다. |
|
1.5.7.2. 시스템 Redis 시크릿
다음 예와 같이 두 개의 외부 Redis 인스턴스를 배포하고 연결 설정을 작성합니다.
apiVersion: v1 kind: Secret metadata: name: system-redis stringData: URL: "redis://system-redis" SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379" SENTINEL_ROLE: "master" type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: system-redis
stringData:
URL: "redis://system-redis"
SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
SENTINEL_ROLE: "master"
type: Opaque
시크릿이름은 system-redis
여야 합니다.
필드 | 설명 | 기본값 |
---|---|---|
URL | 시스템 Redis 데이터베이스 URL. |
인스턴스를 외부에서 관리하는 경우 필수입니다. 그렇지 않으면 기본값은 |
SENTINEL_HOSTS | 시스템 Redis Sentinel 호스트. Redis Sentinel이 구성된 경우에만 사용합니다. |
|
SENTINEL_ROLE |
시스템 Redis Sentinel 역할 이름( |
|
1.5.7.3. 시스템 데이터베이스 시크릿
-
시크릿이름은
system-database
여야 합니다.
3scale을 배포할 때 시스템 데이터베이스에 대한 세 가지 대안이 있습니다. 각 대체의 관련 보안에 대해 서로 다른 속성 및 값을 구성합니다.
- MySQL
- PostgreSQL
- Oracle Database
MySQL, PostgreSQL 또는 Oracle Database 시스템 데이터베이스 시크릿을 배포하려면 다음 예와 같이 연결 설정을 작성합니다.
MySQL 시스템 데이터베이스 시크릿
apiVersion: v1 kind: Secret metadata: name: system-database stringData: URL: "mysql2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "mysql2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
type: Opaque
3scale 2.15와 함께 MySQL 8.0을 사용하는 경우 인증 플러그인을 mysql_native_password
로 설정해야 합니다. MySQL 구성 파일에 다음을 추가합니다.
[mysqld] default_authentication_plugin=mysql_native_password
[mysqld]
default_authentication_plugin=mysql_native_password
PostgreSQL 시스템 데이터베이스 시크릿
apiVersion: v1 kind: Secret metadata: name: system-database stringData: URL: "postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
type: Opaque
Oracle 시스템 데이터베이스 시크릿
apiVersion: v1 kind: Secret metadata: name: system-database stringData: URL: "oracle-enhanced://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" ORACLE_SYSTEM_PASSWORD: "{SYSTEM_PASSWORD}" type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "oracle-enhanced://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
ORACLE_SYSTEM_PASSWORD: "{SYSTEM_PASSWORD}"
type: Opaque
-
{DB_USER}
및{DB_PASSWORD}
는 일반 시스템 이외의 사용자의 사용자 이름과 암호입니다. -
{DB_NAME}
은 Oracle Database 서비스 이름입니다. -
ORACLE_SYSTEM_PASSWORD
는 선택 사항이며 데이터베이스 사용자 구성을 참조하십시오.
1.5.7.4. Zync 데이터베이스 시크릿
zync 데이터베이스 설정에서 spec.externalmanifests.zync.database
필드가 true
로 설정된 경우 3scale을 배포하기 전에 zync
라는 시크릿을 생성해야 합니다. 이 시크릿에서 DATABASE_URL
및 DATABASE_PASSWORD
필드를 외부 zync 데이터베이스를 가리키는 값으로 설정합니다. 예를 들면 다음과 같습니다.
apiVersion: v1 kind: Secret metadata: name: zync stringData: DATABASE_URL: postgresql://<zync-db-user>:<zync-db-password>@<zync-db-host>:<zync-db-port>/zync_production ZYNC_DATABASE_PASSWORD: <zync-db-password> type: Opaque
apiVersion: v1
kind: Secret
metadata:
name: zync
stringData:
DATABASE_URL: postgresql://<zync-db-user>:<zync-db-password>@<zync-db-host>:<zync-db-port>/zync_production
ZYNC_DATABASE_PASSWORD: <zync-db-password>
type: Opaque
zync 데이터베이스는 고가용성 모드여야 합니다.
1.5.7.5. 3scale API Management를 배포하기 위한 APIManager 사용자 정의 리소스
-
외부 구성 요소를 활성화하는 경우 3scale을 배포하기 전에 각 외부 구성 요소 (
backend-redis
system-redis
,system-database
,zync
)에 대한 시크릿을 생성해야 합니다. -
외부
system-database
의 경우 외부화할 하나의 데이터베이스 유형만 선택합니다.
APIManager CR(사용자 정의 리소스)의 구성은 선택한 데이터베이스가 3scale 배포 외부에 있는지 여부에 따라 달라집니다.
backend-redis
,system-redis
또는 system-database
가 3scale 외부에 있는 경우 다음 예와 같이 APIManager CR externalComponents
오브젝트를 채웁니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: lvh.me externalComponents: system: database: true
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
externalComponents:
system:
database: true
1.5.8. 3scale API Management Operator에서 Pod 유사성 활성화
모든 구성 요소에 대해 3scale Operator에서 Pod 기능을 활성화할 수 있습니다. 이렇게 하면 클러스터의 서로 다른 노드에 있는 각 deploymentConfig
에서 Pod 복제본이 배포되므로 AZ(가용성 영역) 간에 균등하게 분산됩니다.
1.5.8.1. 구성 요소 수준에서 노드 유사성 및 허용 오차 사용자 정의
APIManager CR 속성을 통해 3scale 솔루션의 kubernetes 선호도 및 허용 오차 를 사용자 지정합니다. 그런 다음 kubernetes 노드에 다른 3scale 구성 요소를 예약하도록 사용자 지정할 수 있습니다.
예를 들어 backend-listener
및 system-memcached
에 대한 사용자 정의 허용 오차에 대한 사용자 정의 노드 유사성을 설정하려면 다음을 수행합니다.
사용자 정의 유사성 및 허용 오차
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: backend: listenerSpec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "kubernetes.io/hostname" operator: In values: - ip-10-96-1-105 - key: "beta.kubernetes.io/arch" operator: In values: - amd64 system: memcachedTolerations: - key: key1 value: value1 operator: Equal effect: NoSchedule - key: key2 value: value2 operator: Equal effect: NoSchedule
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.io/hostname"
operator: In
values:
- ip-10-96-1-105
- key: "beta.kubernetes.io/arch"
operator: In
values:
- amd64
system:
memcachedTolerations:
- key: key1
value: value1
operator: Equal
effect: NoSchedule
- key: key2
value: value2
operator: Equal
effect: NoSchedule
다음 affinity 블록을 apicastProductionSpec
또는 비 데이터베이스 deploymentConfig
에 추가합니다. 그러면 preferredDuringSchedulingIgnoredDuringExecution
를 사용하여 소프트 podAntiAffinity
구성이 추가됩니다. 스케줄러는 다른 AZ의 다른 호스트에서 이 apicast-production
Pod 세트를 실행하려고 합니다. 불가능한 경우 다른 위치에서 실행할 수 있도록 허용하십시오.
소프트 podAntiAffinity
affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: deploymentConfig: apicast-production topologyKey: kubernetes.io/hostname - weight: 99 podAffinityTerm: labelSelector: matchLabels: deploymentConfig: apicast-production topologyKey: topology.kubernetes.io/zone
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: kubernetes.io/hostname
- weight: 99
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: topology.kubernetes.io/zone
다음 예에서는 requiredDuringSchedulingIgnoredDuringExecution
를 사용하여 하드 podAntiAffinity
구성이 설정됩니다. 노드에 Pod를 예약하려면 조건을 충족해야 합니다. 예를 들어 사용 가능한 리소스가 낮은 클러스터에서 새 Pod를 예약할 수 없는 위험이 있습니다.
하드 podAntiAffinity
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: deploymentConfig: apicast-production topologyKey: kubernetes.io/hostname - weight: 99 podAffinityTerm: labelSelector: matchLabels: deploymentConfig: apicast-production topologyKey: topology.kubernetes.io/zone
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: kubernetes.io/hostname
- weight: 99
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: topology.kubernetes.io/zone
추가 리소스
1.5.9. 여러 가용성 영역에 있는 여러 클러스터
오류가 발생하는 경우 수동 클러스터를 활성 모드로 전환하면 절차가 완료될 때까지 서비스 프로비저닝이 중단됩니다. 이러한 중단으로 인해 유지 관리 기간이 있는지 확인하십시오.
이 문서에서는 AWS(Amazon Web Services)를 사용한 배포에 중점을 둡니다. 동일한 구성 옵션은 공급자의 관리 데이터베이스 서비스 제공(예: 여러 가용성 영역 및 여러 지역에 대한 지원 등)을 제공하는 다른 퍼블릭 클라우드 공급업체에 적용됩니다.
여러 OpenShift 클러스터 및 HA(고가용성) 영역에 3scale을 설치하려는 경우 여기에서 참조할 수 있는 옵션을 사용할 수 있습니다.
여러 클러스터 설치 옵션에서 클러스터는 몇 가지 수동 단계와 관련된 장애 조치 절차에 따라 활성/수동 구성으로 작동합니다.
1.5.9.1. 여러 클러스터 설치의 사전 요구 사항
여러 OpenShift 클러스터를 사용하는 3scale 설치에서 다음을 사용합니다.
-
APIManager CR(사용자 정의 리소스)에서
kubernetes.io/hostname
및topology.kubernetes.io/zone
규칙과 함께 Pod 기능을 사용합니다. -
APIManager CR(사용자 정의 리소스)에서
kubernetes.io/hostname
및topology.kubernetes.io/zone
규칙과 함께 Pod 기능을 사용합니다. - APIManager CR에서 Pod 중단 예산을 사용합니다.
- 여러 클러스터에 대한 3scale 설치는 APIManager CR에서 동일한 공유 wildcardDomain 특성 사양을 사용해야 합니다. 데이터베이스에 저장된 정보가 충돌하므로 각 클러스터에 대해 다른 도메인을 사용할 수 없습니다.
동일한 값이 있는 모든 클러스터에 토큰 및 암호와 같은 인증 정보가 포함된 보안을 수동으로 배포해야 합니다. 3scale Operator는 모든 클러스터에서 보안 임의 값으로 생성합니다. 이 경우 두 클러스터에 동일한 인증 정보가 있어야 합니다. 보안 목록과 3scale Operator 설명서에서 구성하는 방법을 확인할 수 있습니다. 다음은 두 클러스터에서 미러링해야 하는 시크릿 목록입니다.
-
backend-internal-api
-
system-app
-
system-events-hook
-
system-master-apicast
system-seed
backend-redis
,system-redis
,system-database
및zync
의 데이터베이스 연결 문자열을 사용하여 시크릿을 수동으로 배포해야 합니다. 외부 데이터베이스 설치를 참조하십시오.- 클러스터에서 공유되는 데이터베이스는 모든 클러스터에서 동일한 값을 사용해야 합니다.
- 각 클러스터에 자체 데이터베이스가 있는 경우 각 클러스터에서 다른 값을 사용해야 합니다.
-
1.5.9.5. 동기화된 데이터베이스가 있는 다른 리전의 활성-패시브 클러스터
이 설정은 다른 지역에 두 개 이상의 클러스터가 있고 활성 모드에서 3scale을 배포하는 것으로 구성됩니다. 한 클러스터가 활성 상태이고 트래픽을 수신하며 다른 클러스터는 트래픽을 수신하지 않고 대기 모드이므로 active 클러스터에 오류가 있는 경우 활성 역할을 가정할 수 있습니다.
좋은 데이터베이스 액세스 대기 시간을 보장하기 위해 각 클러스터에는 자체 데이터베이스 인스턴스가 있습니다. 활성 3scale 설치의 데이터베이스는 3scale 수동 설치의 read-replica 데이터베이스에 복제되므로 가능한 장애 조치(failover)를 위해 데이터를 사용할 수 있고 모든 리전에서 최신 상태로 유지됩니다.

1.5.9.6. 동기화된 데이터베이스 구성 및 설치
프로세스
- 다른 가용성 영역을 사용하여 다른 지역에 두 개 이상의 OpenShift 클러스터를 생성합니다. 최소 3개의 영역이 권장됩니다.
모든 리전에서 Amazon RDS Multi-AZ가 활성화된 모든 AWS ElastiCache 인스턴스를 생성합니다.
- 백엔드 Redis 데이터베이스를 위한 AWS EC 2개(지역당 하나씩)
- System Redis 데이터베이스용 AWS EC 두 개: 리전당 1개
- 글로벌 데이터 저장소 기능이 활성화된 상태에서 지역 간 복제를 사용하므로 수동 지역의 데이터베이스는 활성 리전의 마스터 데이터베이스에서 읽기-복제본입니다.
모든 리전에서 Amazon RDS Multi-AZ가 활성화된 상태에서 필요한 모든 AWS RDS 인스턴스를 생성합니다.
- 시스템 데이터베이스용 AWS RDS 2개
- Zync 데이터베이스용 AWS RDS 2개
- 지역 간 복제를 사용하므로 수동 리전의 데이터베이스는 활성 리전의 마스터 데이터베이스에서 읽기-복제본입니다.
- 리전 간 복제를 사용하여 모든 리전에서 시스템 자산에 대한 AWS S3 버킷을 구성합니다.
- AWS Route53 또는 DNS 공급자에 사용자 지정 도메인을 생성하고 활성 클러스터의 OpenShift 라우터를 가리킵니다. APIManager CR의 wildcardDomain 속성과 일치해야 합니다.
수동 클러스터에 3scale을 설치합니다. APIManager CR은 이전 단계에서 사용한 것과 동일해야 합니다. 모든 Pod가 실행 중인 경우 APIManager를 변경하여 모든
백엔드
,시스템
,zync
및APIcast
Pod에 0개의 복제본을 배포합니다.- 활성 데이터베이스의 작업 사용을 방지하려면 복제본을 0으로 설정합니다. 각 복제본이 처음에 0으로 설정된 경우 Pod 종속성으로 인해 배포가 실패합니다. 예를 들어 Pod는 다른 사용자가 실행 중인지 확인합니다. 먼저 normal으로 배포한 다음 replicas를 0으로 설정합니다.
1.5.9.7. 수동 장애 조치 동기화 데이터베이스
프로세스
수동 Cryostat 공유 데이터베이스에서 1, 2 및 3단계를 수행합니다.
- 각 클러스터에는 고유한 독립 데이터베이스, 즉 활성 리전의 마스터의 읽기-복제본이 있습니다.
- 모든 데이터베이스에서 장애 조치(failover)를 수동으로 실행하여 패시브 리전에서 새 마스터를 선택해야 합니다. 그러면 활성 리전이 됩니다.
실행할 데이터베이스의 수동 페일오버는 다음과 같습니다.
- AWS RDS: 시스템 및 Zync.
- AWS ElastiCaches: 백엔드 및 시스템.
- 수동 Cryostat 공유 데이터베이스에서 4단계를 수행합니다.
1.5.10. Amazon Simple Storage Service 3scale API Management fileStorage 설치
3scale을 배포하기 위해 APIManager CR(사용자 정의 리소스)을 생성하기 전에 OpenShift 시크릿을 사용하여 Amazon Simple Storage Service(Amazon S3) 서비스에 대한 연결 설정을 제공합니다.
- 로컬 파일 시스템 스토리지를 사용하여 3scale을 배포하는 경우 이 섹션을 건너뜁니다.
- 시크릿에 대해 선택한 이름은 기존 보안 이름이 아니며 APIManager CR에서 참조되는 모든 이름이 될 수 있습니다.
-
S3 호환 스토리지에
AWS_REGION
이 제공되지 않으면default
를 사용하거나 배포에 실패합니다. - 면책 조항: 여기에 포함된 외부 웹 사이트 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 본인이 그러한 외부 사이트나 콘텐츠를 사용(또는 신뢰)하여 초래되는 어떠한 손실이나 비용에 대해 Red Hat이 어떠한 책임도 지지 않는 데 동의합니다.
1.5.10.1. Amazon S3 버킷 생성
사전 요구 사항
- AWS( Amazon Web Services ) 계정이 있어야 합니다.
프로세스
- 시스템 자산을 저장하기 위한 버킷을 생성합니다.
- 개발자 포털의 Logo 기능을 사용할 때 S3의 공용 액세스 차단기를 비활성화합니다.
다음과 같은 최소한의 권한으로 IAM(Identity and Access Management) 정책을 생성합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<target_bucket_name>", "arn:aws:s3:::<target_bucket_name>/*" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<target_bucket_name>",
1 "arn:aws:s3:::<target_bucket_name>/*"
2 ] } ] }
Copy to Clipboard Copied! 다음 규칙을 사용하여 CORS 구성을 생성합니다.
[ { "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "http://*" ] } ]
[ { "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "http://*" ] } ]
Copy to Clipboard Copied!
1.5.10.2. OpenShift 시크릿 생성
다음 예제에서는 PVC(영구 볼륨 클레임) 대신 Amazon S3를 사용하는 3scale fileStorage 를 보여줍니다.
AWS S3 호환 공급자는 AWS_HOSTNAME
,AWS_PATH_STYLE
, AWS_PROTOCOL
선택 키를 사용하여 S3 시크릿에 구성할 수 있습니다. 자세한 내용은 fileStorage S3 인증 정보 시크릿 필드 표를 참조하십시오.
다음 예에서 Secret 이름은 APIManager CR에서 참조되므로 무엇이든 될 수 있습니다.
apiVersion: v1 kind: Secret metadata: creationTimestamp: null name: aws-auth stringData: AWS_ACCESS_KEY_ID: <ID_123456> AWS_SECRET_ACCESS_KEY: <ID_98765544> AWS_BUCKET: <mybucket.example.com> AWS_REGION: eu-west-1 type: Opaque
apiVersion: v1
kind: Secret
metadata:
creationTimestamp: null
name: aws-auth
stringData:
AWS_ACCESS_KEY_ID: <ID_123456>
AWS_SECRET_ACCESS_KEY: <ID_98765544>
AWS_BUCKET: <mybucket.example.com>
AWS_REGION: eu-west-1
type: Opaque
마지막으로 APIManager CR을 생성하여 3scale을 배포합니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: <example_apimanager> namespace: <3scale_test> spec: wildcardDomain: lvh.me system: fileStorage: simpleStorageService: configurationSecretRef: name: aws-auth
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: <example_apimanager>
namespace: <3scale_test>
spec:
wildcardDomain: lvh.me
system:
fileStorage:
simpleStorageService:
configurationSecretRef:
name: aws-auth
APIManager SystemS3Spec 을 확인합니다.
다음 표에서는 IAM(Identity and Access Management) 및 STS(Security Token Service) 설정에 대한 fileStorage
Amazon S3 인증 정보 시크릿 필드 요구 사항을 보여줍니다.
- STS(Secure Token Service)를 사용하는 S3 인증 방법은 단기적이고 제한된 권한 보안 인증 정보를 위한 것입니다.
- S3 IAM(Identity and Access Management)은 장기적인 권한 보안 자격 증명을 위한 것입니다.
필드 | 설명 | IAM에 필요 | STS에 필수 |
---|---|---|---|
AWS_ACCESS_KEY_ID |
시스템의 | 제공됨 | 없음 |
AWS_SECRET_ACCESS_KEY |
시스템의 | 제공됨 | 없음 |
AWS_BUCKET |
자산의 시스템 | 제공됨 | 제공됨 |
AWS_REGION |
자산에 대한 시스템의 | 제공됨 | 제공됨 |
AWS_HOSTNAME | 기본값: Amazon endpoints - AWS S3 호환 공급자 끝점 호스트 이름 | 없음 | 없음 |
AWS_PROTOCOL |
기본값 | 없음 | 없음 |
AWS_PATH_STYLE |
default: | 없음 | 없음 |
AWS_ROLE_ARN | AWS STS를 사용하여 인증하는 정책이 연결된 역할의 ARN | 없음 | 제공됨 |
AWS_WEB_IDENTITY_TOKEN_FILE |
마운트된 토큰 파일 위치 경로입니다. 예: | 없음 | 제공됨 |
1.5.10.3. STS를 사용하는 수동 모드
STS 인증 모드는 APIManager CR에서 활성화해야 합니다. 그러나 대상을 정의할 수 있지만 기본값은 openshift
입니다.
사전 요구 사항
- AWS STS(Security Token Service)에서 다른 구성 요소에 임시 인증 정보를 사용하도록 OpenShift를 구성합니다. 자세한 내용은 Amazon Web Services Secure Token Service에서 수동 모드 사용을 참조하십시오.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: <apimanager_sample> namespace: <3scale_test> spec: wildcardDomain: lvh.me system: fileStorage: simpleStorageService: configurationSecretRef: name: s3-credentials sts: enabled: true audience: openshift
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: <apimanager_sample>
namespace: <3scale_test>
spec:
wildcardDomain: lvh.me
system:
fileStorage:
simpleStorageService:
configurationSecretRef:
name: s3-credentials
sts:
enabled: true
audience: openshift
클라우드 인증 정보 툴에서 생성한 시크릿은 IAM 시크릿과 다릅니다. AWS_ACCESS_KEY_
두 개의 새 필드가 있습니다.
ID
및 AWS_SECRET_ACCESS_KEY
대신 AWS_ROLE_ARN
및 AWS_RoleBinding_ID_TOKEN_FILE
STS 시크릿 예
kind: Secret apiVersion: v1 metadata: name: s3-credentials namespace: 3scale data: AWS_ROLE_ARN: arn:aws:iam::ID:role/ROLE AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/openshift/serviceaccount/token AWS_BUCKET: <mybucket.example.com> AWS_REGION: eu-west-1 type: Opaque
kind: Secret
apiVersion: v1
metadata:
name: s3-credentials
namespace: 3scale
data:
AWS_ROLE_ARN: arn:aws:iam::ID:role/ROLE
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/openshift/serviceaccount/token
AWS_BUCKET: <mybucket.example.com>
AWS_REGION: eu-west-1
type: Opaque
STS를 사용하면 3scale Operator에서 예상 볼륨을 추가하여 토큰을 요청합니다. 다음 Pod에는 예상 볼륨이 있습니다.
-
system-app
-
system-app 후크 사전
-
system-sidekiq
STS의 Pod 예
apiVersion: v1 kind: Pod metadata: name: system-sidekiq-1-zncrz namespace: 3scale-test spec: containers: .... volumeMounts: - mountPath: /var/run/secrets/openshift/serviceaccount name: s3-credentials readOnly: true .... volumes: - name: s3-credentials projected: defaultMode: 420 sources: - serviceAccountToken: audience: openshift expirationSeconds: 3600 path: token
apiVersion: v1
kind: Pod
metadata:
name: system-sidekiq-1-zncrz
namespace: 3scale-test
spec:
containers:
....
volumeMounts:
- mountPath: /var/run/secrets/openshift/serviceaccount
name: s3-credentials
readOnly: true
....
volumes:
- name: s3-credentials
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: openshift
expirationSeconds: 3600
path: token
1.5.11. PostgreSQL 설치
MySQL 내부 관계형 데이터베이스는 기본 배포입니다. 대신 PostgreSQL을 사용하도록 이 배포 구성을 재정의할 수 있습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: lvh.me system: database: postgresql: {}
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
system:
database:
postgresql: {}
추가 리소스
1.5.12. SMTP 변수 구성 (선택 사항)
3scale은 이메일을 사용하여 알림을 보내고 새 사용자를 초대합니다. 이러한 기능을 사용하려면 자체 SMTP 서버를 제공하고 system-smtp
시크릿에서 SMTP 변수를 구성해야 합니다.
프로세스
아직 로그인하지 않은 경우 OpenShift에 로그인하고
oc
명령을 사용하여 3scale 온-프레미스 인스턴스가 설치된 프로젝트를 선택합니다.oc login -u <user> <url> oc project <3scale-project>
$ oc login -u <user> <url> $ oc project <3scale-project>
Copy to Clipboard Copied! oc patch
명령을 사용하여 시크릿system-smtp
를 업데이트합니다.{"stringData":{"<field>":"<value>}}
옵션을 사용합니다. 여기서 <field
>는 시크릿 필드이고 <value
>는 원하는 값입니다.사용 가능한 필드의 전체 목록은 아래 표에 나열되어 있습니다.
표 1.4. system-smtp 필드 설명 시크릿의 기본값 애플리케이션 mailer의 기본값 address
원격 메일 서버의 주소입니다.
""
nil
port
사용할 원격 메일 서버의 포트입니다.
""
0
사용자 이름
메일 서버에 인증이 필요하고 인증 유형에 필요한 경우 사용자 이름입니다.
""
nil
암호
메일 서버에 인증이 필요하고 인증 유형에 필요한 경우 암호입니다.
""
nil
인증
메일 서버에 인증이 필요한 경우 를 사용합니다. 암호를
일반
으로 전송하려면 인증 유형을 설정합니다. Base64로 인코딩된 암호 Base64 또는cram_md5
를 보내 HMAC-MD5 알고리즘을 기반으로 챌린지/응답 메커니즘을 결합합니다.""
nil
openssl.verify.mode
TLS를 사용하는 경우 OpenSSL이 인증서를 확인하는 방법을 설정할 수 있습니다. 이 기능은 자체 서명 및/또는 와일드카드 인증서의 유효성을 검사해야 하는 경우에 유용합니다. OpenSSL 확인 상수:
none
또는peer
의 이름을 사용할 수 있습니다.""
nil
from_address
no-reply mail
의
address 값""
"no-reply@{wildcardDomain}"
참고-
메일 서버 구성에 사용되는
HELO
도메인은{wildcardDomain}
의 값입니다. -
{wildcardDomain}
은 APIManager CR의spec.wildcardDomain
에 설정된 값의 자리 표시자입니다.
예
oc patch secret system-smtp -p '{"stringData":{"address":"<your_address>"}}' oc patch secret system-smtp -p '{"stringData":{"port":"587"}}' oc patch secret system-smtp -p '{"stringData":{"username":"<your_username>"}}' oc patch secret system-smtp -p '{"stringData":{"password":"<your_password>"}}' oc patch secret system-smtp -p '{"stringData":{"authentication":"plain"}}' oc patch secret system-smtp -p '{"stringData":{"openssl.verify.mode":"none"}}'
$ oc patch secret system-smtp -p '{"stringData":{"address":"<your_address>"}}' $ oc patch secret system-smtp -p '{"stringData":{"port":"587"}}' $ oc patch secret system-smtp -p '{"stringData":{"username":"<your_username>"}}' $ oc patch secret system-smtp -p '{"stringData":{"password":"<your_password>"}}' $ oc patch secret system-smtp -p '{"stringData":{"authentication":"plain"}}' $ oc patch secret system-smtp -p '{"stringData":{"openssl.verify.mode":"none"}}'
Copy to Clipboard Copied! -
메일 서버 구성에 사용되는
보안 변수를 설정한 후
system-app
및system-sidekiq
Pod를 재배포합니다.oc rollout restart deployment/system-app oc rollout restart deployment/system-sidekiq
$ oc rollout restart deployment/system-app $ oc rollout restart deployment/system-sidekiq
Copy to Clipboard Copied! 롤아웃 상태를 확인하여 완료되었는지 확인합니다.
oc rollout status deployment/system-app oc rollout status deployment/system-sidekiq
$ oc rollout status deployment/system-app $ oc rollout status deployment/system-sidekiq
Copy to Clipboard Copied!
1.5.13. 구성 요소 수준에서 컴퓨팅 리소스 요구 사항 사용자 정의
APIManager CR(사용자 정의 리소스) 속성을 통해 3scale 솔루션의 Kubernetes 컴퓨팅 리소스 요구 사항을 사용자 정의합니다. 이 작업을 수행하여 특정 APIManager 구성 요소에 할당된 CPU 및 메모리인 컴퓨팅 리소스 요구 사항을 사용자 정의합니다.
다음 예제에서는 backend-listener
및 zync-database
에 대해 system-master의 system-provider
컨테이너에 대한 컴퓨팅 리소스 요구 사항을 사용자 지정하는 방법을 간략하게 설명합니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: backend: listenerSpec: resources: requests: memory: "150Mi" cpu: "300m" limits: memory: "500Mi" cpu: "1000m" system: appSpec: developerContainerResources: limits: cpu: 1500m memory: 1400Mi requests: cpu: 150m memory: 600Mi masterContainerResources: limits: cpu: 1500m memory: 1400Mi requests: cpu: 150m memory: 600Mi providerContainerResources: limits: cpu: 1500m memory: 1400Mi requests: cpu: 150m memory: 600Mi zync: databaseResources: requests: memory: "111Mi" cpu: "222m" limits: memory: "333Mi" cpu: "444m"
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
resources:
requests:
memory: "150Mi"
cpu: "300m"
limits:
memory: "500Mi"
cpu: "1000m"
system:
appSpec:
developerContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
masterContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
providerContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
zync:
databaseResources:
requests:
memory: "111Mi"
cpu: "222m"
limits:
memory: "333Mi"
cpu: "444m"
추가 리소스
1.5.13.1. 기본 APIManager 구성 요소 컴퓨팅 리소스
APIManager spec.resourceRequirementsEnabled
속성을 true
로 구성하면 기본 컴퓨팅 리소스가 APIManager 구성 요소에 대해 설정됩니다.
APIManager 구성 요소에 설정된 특정 컴퓨팅 리소스 기본값이 다음 표에 표시되어 있습니다.
1.5.13.1.1. CPU 및 메모리 단위
다음 목록에서는 컴퓨팅 리소스 기본값 표에 언급된 단위를 설명합니다. CPU 및 메모리 유닛에 대한 자세한 내용은 Managing Resources for Containers 를 참조하십시오.
리소스 단위 설명
- m - milliCPU 또는 millicore
- Mi - 메비 바이트
- GI - 기비바이트
- G - 기가바이트
Component | CPU 요청 | CPU 제한 | 메모리 요청 | 메모리 제한 |
---|---|---|---|---|
system-app의 system-master | 50m | 1000m | 600Mi | 800Mi |
system-app의 system-provider | 50m | 1000m | 600Mi | 800Mi |
system-app의 system- developer | 50m | 1000m | 600Mi | 800Mi |
system-sidekiq | 100m | 1000m | 500Mi | 2Gi |
system-searchd | 80m | 1000m | 250Mi | 512Mi |
system-redis | 150m | 500m | 256Mi | 32Gi |
system-mysql | 250m | 제한 없음 | 512Mi | 2Gi |
system-postgresql | 250m | 제한 없음 | 512Mi | 2Gi |
backend-listener | 500m | 1000m | 550Mi | 700Mi |
backend-worker | 150m | 1000m | 50Mi | 300Mi |
backend-cron | 100m | 500m | 100Mi | 500Mi |
backend-redis | 1000m | 2000m | 1024Mi | 32Gi |
APIcast-production | 500m | 1000m | 64Mi | 128Mi |
apicast-staging | 50m | 100m | 64Mi | 128Mi |
zync | 150m | 1 | 250M | 512Mi |
zync-que | 250m | 1 | 250M | 512Mi |
zync-database | 50m | 250m | 250M | 2G |
1.5.14. 3scale API Management 구성 요소의 Pod 우선순위
3scale 관리자는 APIManager CR(사용자 정의 리소스)을 수정하여 다양한 3scale 설치된 구성 요소의 Pod 우선 순위를 설정할 수 있습니다. 다음 구성 요소에서 사용할 수 있는 priorityClassName
옵션을 사용합니다.
-
APIcast-production
-
apicast-staging
-
backend-cron
-
backend-listener
-
backend-worker
-
backend-redis
-
system-app
-
system-sidekiq
-
system-searchd
-
system-memcache
-
system-mysql
-
system-postgresql
-
system-redis
-
zync
-
zync-database
-
zync-que
예를 들면 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: api.vmogilev01.0nno.s1.devshift.org resourceRequirementsEnabled: false apicast: stagingSpec: priorityClassName: openshift-user-critical productionSpec: priorityClassName: openshift-user-critical backend: listenerSpec: priorityClassName: openshift-user-critical cronSpec: priorityClassName: openshift-user-critical workerSpec: priorityClassName: openshift-user-critical redisPriorityClassName: openshift-user-critical system: appSpec: priorityClassName: openshift-user-critical sidekiqSpec: priorityClassName: openshift-user-critical searchdSpec: priorityClassName: openshift-user-critical searchdSpec: priorityClassName: openshift-user-critical memcachedPriorityClassName: openshift-user-critical redisPriorityClassName: openshift-user-critical database: postgresql: priorityClassName: openshift-user-critical zync: appSpec: priorityClassName: openshift-user-critical queSpec: priorityClassName: openshift-user-critical databasePriorityClassName: openshift-user-critical
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: api.vmogilev01.0nno.s1.devshift.org
resourceRequirementsEnabled: false
apicast:
stagingSpec:
priorityClassName: openshift-user-critical
productionSpec:
priorityClassName: openshift-user-critical
backend:
listenerSpec:
priorityClassName: openshift-user-critical
cronSpec:
priorityClassName: openshift-user-critical
workerSpec:
priorityClassName: openshift-user-critical
redisPriorityClassName: openshift-user-critical
system:
appSpec:
priorityClassName: openshift-user-critical
sidekiqSpec:
priorityClassName: openshift-user-critical
searchdSpec:
priorityClassName: openshift-user-critical
searchdSpec:
priorityClassName: openshift-user-critical
memcachedPriorityClassName: openshift-user-critical
redisPriorityClassName: openshift-user-critical
database:
postgresql:
priorityClassName: openshift-user-critical
zync:
appSpec:
priorityClassName: openshift-user-critical
queSpec:
priorityClassName: openshift-user-critical
databasePriorityClassName: openshift-user-critical
1.5.15. 사용자 정의 라벨 설정
해당 Pod에 적용되는 각 DeploymentConfig(DC)의 APIManager CR 레이블 속성을 통해 라벨을 사용자 지정할 수 있습니다.
CR(사용자 정의 리소스)에 정의된 라벨을 제거하면 연결된 DeploymentConfig(DC)에서 자동으로 제거되지 않습니다. DC에서 레이블을 수동으로 제거해야 합니다.
apicast-staging
및 backend-listener
의 예:
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: example.com resourceRequirementsEnabled: false backend: listenerSpec: labels: backendLabel1: sample-label1 backendLabel2: sample-label2 apicast: stagingSpec: labels: apicastStagingLabel1: sample-label1 apicastStagingLabel2: sample-label2
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: example.com
resourceRequirementsEnabled: false
backend:
listenerSpec:
labels:
backendLabel1: sample-label1
backendLabel2: sample-label2
apicast:
stagingSpec:
labels:
apicastStagingLabel1: sample-label1
apicastStagingLabel2: sample-label2
추가 리소스
1.5.16. 인증서 확인을 건너뛰도록 백엔드 클라이언트 설정
컨트롤러에서 오브젝트를 처리하면 API를 호출하기 위해 새 백엔드 클라이언트를 생성합니다. 기본적으로 이 클라이언트는 서버의 인증서 체인을 확인하도록 설정됩니다. 그러나 개발 및 테스트 중에 오브젝트를 처리할 때 클라이언트가 인증서 확인을 건너뛰어야 할 수 있습니다. 이를 위해 다음 오브젝트에 "insecure_skip_verify": "true"
주석을 추가합니다.
- ActiveDoc
- 애플리케이션
- 백엔드
- CustomPolicyDefinition
- DeveloperAccount
- DeveloperUser
- OpenAPI - 백엔드 및 제품
- 제품
- ProxyConfigPromote
- 테넌트
OpenAPI CR 예:
apiVersion: capabilities.3scale.net/v1beta1 kind: OpenAPI metadata: name: ownertest namespace: threescale annotations: "insecure_skip_verify": "true" spec: openapiRef: secretRef: name: myopenapi namespace: threescale productSystemName: testProduct
apiVersion: capabilities.3scale.net/v1beta1
kind: OpenAPI
metadata:
name: ownertest
namespace: threescale
annotations:
"insecure_skip_verify": "true"
spec:
openapiRef:
secretRef:
name: myopenapi
namespace: threescale
productSystemName: testProduct
1.5.17. 사용자 정의 주석 설정
3scale에서 구성 요소의 Pod에 주석이 있습니다. 구성에 사용되는 키/값 쌍입니다. APIManager CR을 사용하여 3scale 구성 요소에 대해 이러한 주석을 변경할 수 있습니다.
CR(사용자 정의 리소스)에 정의된 주석을 제거하면 연결된 DeploymentConfig(DC)에서 자동으로 제거되지 않습니다. DC에서 주석을 수동으로 제거해야 합니다.
apicast-staging 및 backend-listener에 대한 APIManager 주석
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: example.com apicast: stagingSpec: annotations: anno-sample1: anno1 backend: listenerSpec: annotations: anno-sample2: anno2
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: example.com
apicast:
stagingSpec:
annotations:
anno-sample1: anno1
backend:
listenerSpec:
annotations:
anno-sample2: anno2
추가 리소스
1.5.18. 조정
3scale이 설치되면 3scale Operator를 사용하면 CR(사용자 정의 리소스)에서 지정된 매개변수 세트를 업데이트하여 시스템 구성 옵션을 수정할 수 있습니다. 시스템을 중지하거나 종료하지 않고 핫 스와핑을 통해 수정이 수행됩니다.
3scale Operator와 APIcast Operator에서 조정 이벤트가 발생하면 두 가지 시나리오가 있습니다.
-
deploymentconfig
가 없고 CR에 replicas가 있는 경우deploymentconfig
값이 해당 복제본과 일치합니다. CR에 복제본이 포함되어 있지 않으면deploymentconfig
replica 값이1
로 설정됩니다. -
deploymentconfig
가 있고 CR에 replicas가 있는 경우deploymentconfig
값은0
인 경우에도 해당 복제본과 일치합니다. CR에 복제본이 포함되어 있지 않으면deploymentconfig
값이 동일하게 유지됩니다.
APIManager CR 정의(CRD)의 모든 매개변수가 조정 가능한 것은 아닙니다.
다음은 조정 가능한 매개변수 목록입니다.
1.5.18.1. Resources
모든 3scale 구성 요소에 대한 리소스 제한 및 요청
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: resourceRequirementsEnabled: true/false
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
resourceRequirementsEnabled: true/false
1.5.18.2. 백엔드 복제본
백엔드 구성 요소 pod 수입니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: backend: listenerSpec: replicas: X workerSpec: replicas: Y cronSpec: replicas: Z
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
replicas: X
workerSpec:
replicas: Y
cronSpec:
replicas: Z
replica 필드가 설정되지 않은 경우 Operator는 복제본을 조정하지 않습니다. 이를 통해 타사 컨트롤러는 HorizontalPodAutoscaler 컨트롤러와 같은 복제본을 관리할 수 있습니다. 또한 배포 오브젝트에서 수동으로 업데이트할 수 있습니다.
1.5.18.3. APIcast 복제본
APIcast 스테이징 및 프로덕션 구성 요소 Pod 수입니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: apicast: productionSpec: replicas: X stagingSpec: replicas: Z
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
replicas: X
stagingSpec:
replicas: Z
replica 필드가 설정되지 않은 경우 Operator는 복제본을 조정하지 않습니다. 이를 통해 타사 컨트롤러는 HorizontalPodAutoscaler 컨트롤러와 같은 복제본을 관리할 수 있습니다. 또한 배포 오브젝트에서 수동으로 업데이트할 수 있습니다.
1.5.18.4. 시스템 복제본
시스템 앱 및 시스템 sidekiq 구성 요소 Pod 수
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: system: appSpec: replicas: X sidekiqSpec: replicas: Z
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
system:
appSpec:
replicas: X
sidekiqSpec:
replicas: Z
replica 필드가 설정되지 않은 경우 Operator는 복제본을 조정하지 않습니다. 이를 통해 타사 컨트롤러는 HorizontalPodAutoscaler 컨트롤러와 같은 복제본을 관리할 수 있습니다. 또한 배포 오브젝트에서 수동으로 업데이트할 수 있습니다.
1.5.18.5. zync 복제본
zync 앱 및 쿼리 구성 요소 Pod 수
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: zync: appSpec: replicas: X queSpec: replicas: Z
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
zync:
appSpec:
replicas: X
queSpec:
replicas: Z
replica 필드가 설정되지 않은 경우 Operator는 복제본을 조정하지 않습니다. 이를 통해 타사 컨트롤러는 HorizontalPodAutoscaler 컨트롤러와 같은 복제본을 관리할 수 있습니다. 또한 배포 오브젝트에서 수동으로 업데이트할 수 있습니다.
1.5.19. APICAST_SERVICE_CACHE_SIZE 환경 변수 설정
APIManager CRD(사용자 정의 리소스 정의)에 선택적 필드를 추가하여 APIcast가 내부 캐시에 저장하는 서비스 수를 지정할 수 있습니다.
사전 요구 사항
-
APIcast
Operator를 설치했거나 설치 중입니다.
프로세스
-
사양
의 production 및 staging 섹션에serviceCacheSize
선택적 필드를 추가합니다.
apicast: productionSpec: serviceCacheSize: 20 stagingSpec: serviceCacheSize: 10
apicast:
productionSpec:
serviceCacheSize: 20
stagingSpec:
serviceCacheSize: 10
검증
다음 명령을 입력하여 배포를 확인합니다.
oc get dc/apicast-staging -o yaml
$ oc get dc/apicast-staging -o yaml
Copy to Clipboard Copied! oc get dc/apicast-production -o yaml
$ oc get dc/apicast-production -o yaml
Copy to Clipboard Copied! 환경 변수 포함을 확인합니다.
apicast-staging
# apicast-staging - name: APICAST_SERVICE_CACHE_SIZE value: '10'
Copy to Clipboard Copied! apicast-production
# apicast-production - name: APICAST_SERVICE_CACHE_SIZE value: '20'
Copy to Clipboard Copied!
APIManager CRD(사용자 정의 리소스 정의)에 선택적 필드를 추가하여 APIcast가 내부 캐시에 저장하는 서비스 수를 지정할 수 있습니다. replica 필드가 설정되지 않은 경우 Operator는 복제본을 조정하지 않습니다. 이를 통해 타사 컨트롤러는 HorizontalPodAutoscaler 컨트롤러와 같은 복제본을 관리할 수 있습니다. 또한 배포 오브젝트에서 수동으로 업데이트할 수 있습니다.
추가 리소스
1.6. 3scale API Management의 Horizontal Pod 자동 확장 구성
- 기본값(특히 임계값)은 사용자 환경에 충분하지 않을 수 있으며 조정이 필요할 수 있습니다.
- 요청 및 제한도 수정이 필요할 수 있습니다.
- 성능 테스트가 권장됩니다.
Red Hat 3scale API Management 구성 요소에 대한 Horizontal Pod Autoscaling(HPA)을 구성하면 최적의 리소스 사용 및 확장성을 보장합니다. 이 가이드를 사용하면 apicast-production
,backend-listener
, backend-worker
구성 요소에 대해 HPA를 활성화하고 구성할 수 있습니다. 효율적인 성능을 유지하고 다양한 워크로드를 동적으로 처리할 수 있습니다. APIManager CR(사용자 정의 리소스)을 업데이트하기 전에 사전 요구 사항을 확인하고 특정 요구 사항에 맞게 HPA 구성을 수정합니다.
사전 요구 사항
- Redis가 async 모드에서 실행 중인지 확인합니다. 이는 기본적으로 3scale Operator에 의해 활성화됩니다.
-
HPA가 작동하려면 resource
RequirementsEnabled
를true
로 설정해야 합니다.
프로세스
-
apicast-production
,backend-listener
,backend-worker
구성 요소에 대해 HPA를 활성화합니다. 기본 HPA 구성을 수락하여 85% 리소스 사용률을 최소 1개의 Pod 및 최대 5개의 Pod로 설정합니다. APIManager CR에 HPA 구성을 추가합니다. 다음 YAML은
backend-worker
,backend-listener
및apicast-production
구성 요소에 대한 구성의 예입니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: example.com resourceRequirementsEnabled: true apicast: productionSpec: hpa: true backend: listenerSpec: hpa: true workerSpec: hpa: true
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: wildcardDomain: example.com resourceRequirementsEnabled: true apicast: productionSpec: hpa: true backend: listenerSpec: hpa: true workerSpec: hpa: true
Copy to Clipboard Copied! 기본 HPA 구성을 검토합니다. 기본 HPA 구성은
backend-worker
에 대해 다음 설정을 사용하여 HPA 인스턴스를 생성합니다.apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: backend-worker spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: backend-worker minReplicas: 1 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: averageUtilization: 85 type: Utilization - type: Resource resource: name: memory target: averageUtilization: 85 type: Utilization
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: backend-worker spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: backend-worker minReplicas: 1 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: averageUtilization: 85 type: Utilization - type: Resource resource: name: memory target: averageUtilization: 85 type: Utilization
Copy to Clipboard Copied! - 필요에 따라 HPA 인스턴스를 수정합니다. HPA 인스턴스가 생성되면 수동으로 편집하여 워크로드 요구 사항에 따라 구성을 최적화합니다.
필요한 경우 HPA를 비활성화합니다. 구성 요소의 HPA를 제거하려면
hpa
필드를 제거하거나 false로 설정합니다.backend: workerSpec: hpa: false
backend: workerSpec: hpa: false
Copy to Clipboard Copied!
추가 참고 사항
-
HPA를 활성화하면
apicast-production
,backend-listener
,backend-worker
에 대해 APIManager CR에 설정된 모든 복제본 값을 재정의하고 무시합니다. - 수직 확장의 경우 리소스 요청을 제한과 동일하게 설정합니다. HPA는 기본 사용률을 85%로 확장하므로 제한에 대한 추가 리소스를 별도로 설정할 필요가 없습니다.
1.7. Oracle을 시스템 데이터베이스로 사용하여 Operator와 함께 3scale API Management 설치
Red Hat 3scale API Management 관리자는 Oracle Database를 사용하여 Operator와 함께 3scale을 설치할 수 있습니다. 기본적으로 3scale 2.15에는 MySQL 데이터베이스에 구성 데이터를 저장하는 system
이라는 구성 요소가 있습니다. 기본 데이터베이스를 재정의하고 정보를 외부 Oracle 데이터베이스에 저장할 수 있습니다.
- 3scale Operator 전용 설치를 수행하는 경우 Oracle Database는 OCP(OpenShift Container Platform) 버전 4.2 및 4.3에서는 지원되지 않습니다. 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.
-
이 문서에서
myregistry.example.com
은 레지스트리 URL의 예제로 사용됩니다. 레지스트리 URL로 바꿉니다. - 면책 조항: 여기에 포함된 외부 웹 사이트 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 본인이 그러한 외부 사이트나 콘텐츠를 사용(또는 신뢰)하여 초래되는 어떠한 손실이나 비용에 대해 Red Hat이 어떠한 책임도 지지 않는 데 동의합니다.
사전 요구 사항
- 3scale이 설치된 OCP 클러스터에서 액세스할 수 있는 컨테이너 이미지를 내보내는 컨테이너 레지스트리입니다.
- 다음 절차에서 생성되므로 APIManager CR을 설치하지 마십시오.
- OpenShift 클러스터에서 액세스할 수 있는 Oracle 데이터베이스 의 지원되는 버전입니다.
-
설치 절차를 위해 Oracle Database
SYSTEM
사용자에게 액세스합니다.
Oracle을 시스템 데이터베이스로 사용하여 Operator로 3scale을 설치하려면 다음 단계를 사용하십시오.
1.7.1. Oracle 데이터베이스 준비
3scale 관리자는 시스템 구성 요소에 사용하기로 결정할 때 3scale 설치를 위해 Oracle Database를 완전히 준비해야 합니다.
프로세스
- 새 데이터베이스를 만듭니다.
다음 설정을 적용합니다.
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;
Copy to Clipboard Copied! 데이터베이스 사용자 구성
Oracle Database 통합을 3scale에서 설정하는 방법은 Oracle
SYSTEM
사용자 암호를 제공하지 않거나 제공하지 않는 두 가지 옵션이 있습니다.3scale은 일반 사용자를 생성하고 필요한 권한을 부여하는 초기 설정에 대해서만
SYSTEM
사용자를 사용합니다. 다음 SQL 명령은 적절한 권한이 있는 일반 사용자를 설정합니다. ({DB_USER}
및{DB_PASSWORD}
는 실제 값으로 교체해야 하는 자리 표시자입니다.CREATE USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}; GRANT unlimited tablespace TO {DB_USER}; GRANT create session TO {DB_USER}; GRANT create table TO {DB_USER}; GRANT create view TO {DB_USER}; GRANT create sequence TO {DB_USER}; GRANT create trigger TO {DB_USER}; GRANT create procedure TO {DB_USER};
CREATE USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}; GRANT unlimited tablespace TO {DB_USER}; GRANT create session TO {DB_USER}; GRANT create table TO {DB_USER}; GRANT create view TO {DB_USER}; GRANT create sequence TO {DB_USER}; GRANT create trigger TO {DB_USER}; GRANT create procedure TO {DB_USER};
Copy to Clipboard Copied! SYSTEM
사용자 사용:-
system-database
시크릿의ORACLE_
필드에 SYSTEM 사용자 암호를 제공합니다.SYSTEM
_PASSWORD - 일반 사용자는 설치 전에 존재할 필요가 없습니다. 3scale 초기화 스크립트에 의해 생성됩니다.
-
system-database
시크릿의URL
필드에oracle-enhanced://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}
과 같이 연결 문자열에 원하는 사용자 이름과 암호를 입력합니다. -
일반 Oracle Database 비 시스템 사용자의 암호는 고유해야 하며
SYSTEM
사용자 암호와 일치하지 않아야 합니다. 지정된 사용자 이름을 가진 사용자가 이미 존재하는 경우 3scale 초기화 스크립트에서 다음 명령을 사용하여 암호를 업데이트하려고 합니다.
ALTER USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}
ALTER USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}
Copy to Clipboard Copied! 데이터베이스 구성으로 인해 동일한 암호 재사용을 제한하는 방식으로
PASSWORD_REUSE_TIME
및PASSWORD_REUSE_MAX
매개변수가 설정된 경우 이 명령이 성공적으로 완료되지 않을 수 있습니다.
-
일반 데이터베이스 사용자의 수동 설정:
-
system-database
시크릿에ORACLE_SYSTEM_PASSWORD
를 제공할 필요가 없습니다. -
3scale 설치 전에
system-database
시크릿의URL
필드에 있는 연결 문자열에 지정된 일반 데이터베이스 사용자(SYSTEM
)가 있어야 합니다. - 설치에 사용되는 일반 사용자에게는 위에 나열된 모든 권한이 있어야 합니다.
-
추가 리소스
- 새 데이터베이스를 만드는 방법에 대한 자세한 내용은 Oracle Database 19c 문서를 참조하십시오.
1.7.2. 사용자 정의 시스템 컨테이너 이미지 빌드
프로세스
GitHub 리포지토리에서 3scale OpenShift 템플릿을 다운로드하고 아카이브를 추출합니다.
curl -L -o system-oracle-3scale-2.15.0-GA.tar.gz https://github.com/3scale/system-oracle/archive/refs/tags/3scale-2.15.0-GA.tar.gz tar -xzf system-oracle-3scale-2.15.0-GA.tar.gz
curl -L -o system-oracle-3scale-2.15.0-GA.tar.gz https://github.com/3scale/system-oracle/archive/refs/tags/3scale-2.15.0-GA.tar.gz tar -xzf system-oracle-3scale-2.15.0-GA.tar.gz
Copy to Clipboard Copied! Instant Client 다운로드 페이지에서 다음을 다운로드합니다.
- 클라이언트: 이 값은 basic-lite 또는 basic 중 하나일 수 있습니다.
- ODBC driver.
Oracle Database 19c용 SDK
- 3scale의 경우 Linux x86-64용 Instant Client Downloads(64비트)를 사용하십시오.
- ppc64le 및 3scale의 경우 Power Little Endian (64 비트)에서 Linux용 Oracle Instant Client 다운로드를 사용하십시오.
다음 Oracle 소프트웨어 구성 요소 버전에 대한 표를 확인하십시오.
- Oracle Instant Client Package: Basic 또는 Basic Light
- Oracle Instant Client Package: SDK
Oracle Instant Client Package: ODBC
표 1.6. Oracle 19c 예제 3scale 패키지 Oracle 19c 패키지 이름 압축 파일 이름 Basic
Basic Light
SDK
ODBC
표 1.7. ppc64le 및 3scale의 Oracle 19c 예제 패키지 Oracle 19c 패키지 이름 압축 파일 이름 Basic
Basic Light
instantclient-basiclite-linux.leppc64.c64-19.3.0.0.0dbru.zip
SDK
ODBC
참고로컬로 다운로드 및 저장된 클라이언트 패키지 버전이 3scale과 일치하지 않는 경우 3scale은 다음 단계에서 적절한 버전을 자동으로 다운로드하여 사용합니다.
-
Oracle Database Instant Client 패키지 파일을
system-oracle-3scale-2.15.0-GA/oracle-client-files
디렉터리에 배치합니다. 사용자 지정 시스템 Oracle 기반 이미지를 빌드합니다. 이미지 태그는 다음 예와 같이 고정된 이미지 태그여야 합니다.
cd system-oracle-3scale-2.15.0-GA docker build . --tag myregistry.example.com/system-oracle:2.15.0-1
$ cd system-oracle-3scale-2.15.0-GA $ docker build . --tag myregistry.example.com/system-oracle:2.15.0-1
Copy to Clipboard Copied! 시스템 Oracle 기반 이미지를 OCP 클러스터에서 액세스할 수 있는 컨테이너 레지스트리로 푸시합니다. 이 컨테이너 레지스트리는 3scale 솔루션을 설치할 위치입니다.
docker push myregistry.example.com/system-oracle:2.15.0-1
$ docker push myregistry.example.com/system-oracle:2.15.0-1
Copy to Clipboard Copied!
1.7.3. Operator를 사용하여 Oracle로 3scale API Management 설치
프로세스
-
해당 필드에
system-database
시크릿을 생성하여 Oracle Database URL 연결 문자열 및 Oracle Database 시스템 암호를 설정합니다. Oracle Database의 외부 데이터베이스 설치를 참조하십시오. APIManager CR을 생성하여 3scale 솔루션을 설치합니다. Operator를 사용하여 3scale API Management 배포의 지침을 따르십시오.
APIManager CR은 이전에 빌드한 시스템의 Oracle 기반 이미지로 설정된
.spec.system.image
필드를 지정해야 합니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: imagePullSecrets: - name: threescale-registry-auth - name: custom-registry-auth system: image: "myregistry.example.com/system-oracle:2.15.0-1" externalComponents: system: database: true
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: imagePullSecrets: - name: threescale-registry-auth - name: custom-registry-auth system: image: "myregistry.example.com/system-oracle:2.15.0-1" externalComponents: system: database: true
Copy to Clipboard Copied!
1.8. 일반적인 3scale API Management 설치 문제 해결
이 섹션에는 일반적인 설치 문제 목록이 포함되어 있으며 문제 해결에 대한 지침을 제공합니다.
1.8.1. 더티 영구 볼륨 클레임을 남기는 이전 배포
문제
이전 배포 시도에서는 더티 PVC(영구 볼륨 클레임)로 인해 MySQL 컨테이너가 시작되지 않습니다.
원인
OpenShift에서 프로젝트를 삭제해도 연결된 PVC는 정리되지 않습니다.
해결책
절차
oc get pvc
명령을 사용하여 오류가 있는 MySQL 데이터가 포함된 PVC를 찾습니다.oc get pvc
# oc get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE backend-redis-storage Bound vol003 100Gi RWO,RWX 4d mysql-storage Bound vol006 100Gi RWO,RWX 4d system-redis-storage Bound vol008 100Gi RWO,RWX 4d system-storage Bound vol004 100Gi RWO,RWX 4d
Copy to Clipboard Copied! -
OCP(OpenShift Container Platform) 콘솔에서 cancel deployment 를 클릭하여
system-mysql
pod의 배포를 중지합니다. - MySQL 경로 아래의 모든 항목을 삭제하여 볼륨을 정리합니다.
-
새
system-mysql
배포를 시작합니다.
1.8.2. Docker 레지스트리에서 잘못 가져 오기
문제
설치 중에 다음 오류가 발생합니다.
svc/system-redis - 1EX.AMP.LE.IP:6379 deployment/system-redis deploys docker.io/rhscl/redis-32-rhel7:3.2-5.3 deployment #1 failed 13 minutes ago: config change
svc/system-redis - 1EX.AMP.LE.IP:6379
deployment/system-redis deploys docker.io/rhscl/redis-32-rhel7:3.2-5.3
deployment #1 failed 13 minutes ago: config change
원인
OpenShift는 docker
명령을 실행하여 컨테이너 이미지를 검색하고 가져옵니다. 이 명령은 registry.redhat.io
Red Hat Ecosystem Catalog 대신 docker.io
Docker 레지스트리를 참조합니다.
이는 시스템에 예기치 않은 버전의 Docker 컨테이너 환경이 포함된 경우 발생합니다.
해결책
절차
적절한 Docker 컨테이너 버전 을 사용합니다.
1.8.3. 영구 볼륨이 로컬에 마운트될 때 MySQL의 권한 문제
문제
system-msql Pod가 충돌하며 배포되지 않아 이에 종속된 다른 시스템이 배포에 실패합니다. Pod 로그에 다음 오류가 표시됩니다.
[ERROR] Cannot start server : on unix socket: Permission denied [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ? [ERROR] Aborting
[ERROR] Cannot start server : on unix socket: Permission denied
[ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
[ERROR] Aborting
원인
MySQL 프로세스는 부적절한 사용자 권한으로 시작됩니다.
해결책
절차
영구 볼륨에 사용되는 디렉터리에는 root 그룹에 대한 쓰기 권한이 있어야 합니다. MySQL 서비스가 root 그룹에서 다른 사용자로 실행되므로 root 사용자에 대한 읽기-쓰기 권한이 있는 것만으로는 충분하지 않습니다. root 사용자로 다음 명령을 실행합니다.
chmod -R g+w /path/for/pvs
$ chmod -R g+w /path/for/pvs
Copy to Clipboard Copied! SElinux가 액세스를 차단하지 못하도록 다음 명령을 실행합니다.
chcon -Rt svirt_sandbox_file_t /path/for/pvs
$ chcon -Rt svirt_sandbox_file_t /path/for/pvs
Copy to Clipboard Copied!
1.8.4. 로고 또는 이미지를 업로드할 수 없음
문제
로고를 업로드할 수 없음 - system-app
로그에 다음과 같은 오류가 표시됩니다.
Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2
Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2
원인
영구 볼륨은 OpenShift에서 쓸 수 없습니다.
해결책
절차
OpenShift에서 영구 볼륨에 쓸 수 있는지 확인합니다. root 그룹이 소유해야 하며 쓰기 가능한 그룹이어야 합니다.
1.8.5. OpenShift에서 작동하지 않는 테스트 호출
문제
테스트 호출은 OpenShift에서 새 서비스 및 경로를 생성한 후 작동하지 않습니다. curl을 통한 직접 호출도 실패합니다. 즉, service not available
.
원인
3scale에서는 기본적으로 HTTPS 경로가 필요하며 OpenShift 경로는 보안되지 않습니다.
해결책
절차
OpenShift 라우터 설정에서 보안 경로 확인란이 클릭되었는지 확인합니다.
1.8.6. 3scale API Management와 다른 프로젝트의 APIcast 배포 실패
문제
APIcast 배포가 실패합니다(pod가 파란색으로 바뀌지 않음). 로그에 다음 오류가 표시됩니다.
update acceptor rejected apicast-3: pods for deployment "apicast-3" took longer than 600 seconds to become ready
update acceptor rejected apicast-3: pods for deployment "apicast-3" took longer than 600 seconds to become ready
Pod에 다음 오류가 표시됩니다.
Error synching pod, skipping: failed to "StartContainer" for "apicast" with RunContainerError: "GenerateRunContainerOptions: secrets \"apicast-configuration-url-secret\" not found"
Error synching pod, skipping: failed to "StartContainer" for "apicast" with RunContainerError: "GenerateRunContainerOptions: secrets \"apicast-configuration-url-secret\" not found"
원인
시크릿이 제대로 설정되어 있지 않았습니다.
해결책
절차
APIcast v3을 사용하여 보안을 생성할 때 apicast-configuration-url-secret
을 지정합니다.
oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>
$ oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>
1.9. 추가 리소스
2장. APIcast 설치
APIcast는 내부 및 외부 API 서비스를 Red Hat 3scale API Management Platform과 통합하는 데 사용되는 NGINX 기반 API 게이트웨이입니다. APIcast는 라운드 로빈을 사용하여 로드 밸런싱을 수행합니다.
이 가이드에서는 배포 옵션, 환경 제공 및 시작 방법에 대해 알아봅니다.
사전 요구 사항
APIcast는 독립 실행형 API 게이트웨이가 아닙니다. 3scale API Manager에 연결해야 합니다.
- 작동하는 3scale 온프레미스 인스턴스입니다.
APIcast를 설치하려면 다음 섹션에 설명된 단계를 수행합니다.
2.1. APIcast 배포 옵션
호스팅 또는 자체 관리 APIcast를 사용할 수 있습니다. 두 경우 모두 APIcast가 3scale API Management 플랫폼의 나머지 부분에 연결되어야 합니다.
- 임베디드 APIcast: 3scale API Management 설치에는 스테이징 및 프로덕션이라는 두 가지 기본 APIcast 게이트웨이가 포함되어 있습니다. 이러한 게이트웨이는 사전 구성되어 즉시 사용할 준비가 되어 있습니다.
자체 관리형 APIcast: 원하는 곳에 APIcast를 배포할 수 있습니다. 다음은 APIcast 배포에 권장되는 옵션 중 하나입니다.
- Red Hat OpenShift에서 APIcast 실행: 지원되는 OpenShift 버전에서 APIcast를 실행합니다. 자체 관리 APIcast를 3scale 온-프레미스 설치 또는 3scale Hosted(SaaS) 계정에 연결할 수 있습니다. 이를 위해 Operator를 사용하여 APIcast 게이트웨이 자체 관리 솔루션을 배포합니다.
2.2. APIcast 환경
기본적으로 3scale 계정을 생성할 때 두 가지 다른 환경에 내장 APIcast가 제공됩니다.
- 스테이징: API 통합을 구성하고 테스트하는 경우에만 사용됩니다. 설정이 예상대로 작동하는지 확인한 후 프로덕션 환경에 배포하도록 선택할 수 있습니다.
-
프로덕션: 이 환경은 프로덕션 용도로 사용됩니다. 다음 매개변수는 OpenShift 템플릿에서 Production APIcast에 대해 설정됩니다.
APICAST_CONFIGURATION_LOADER: boot
,APICAST_CONFIGURATION_CACHE: 300
. 즉, APIcast가 시작될 때 구성이 완전히 로드되고 300초(5분) 동안 캐시됩니다. 5분 후에 설정이 다시 로드됩니다. 즉, 구성을 프로덕션으로 승격시킬 때 APIcast의 새 배포를 트리거하지 않는 한 최대 5분이 걸릴 수 있습니다.
2.3. 통합 설정 구성
3scale 관리자는 3scale이 실행되는 환경의 통합 설정을 구성합니다.
사전 요구 사항
관리자 권한이 있는 3scale 계정입니다.
프로세스
- [ your_product_name] > Integration > Settings 로 이동합니다.
배포 시 기본 옵션은 다음과 같습니다.
- 배포 옵션: APIcast 3scale 관리
- 인증 모드: API 키
- 기본 옵션을 변경합니다.
- 변경 사항을 저장하려면 제품 업데이트를 클릭합니다.
2.4. 제품 구성
API 백엔드의 엔드포인트 호스트인 Private Base URL 필드에 API 백엔드를 선언해야 합니다. APIcast는 모든 인증, 권한 부여, 속도 제한 및 통계가 처리된 후 모든 트래픽을 API 백엔드로 리디렉션합니다.
이 섹션에서는 제품 구성을 안내합니다.
2.4.1. API 백엔드 선언
일반적으로 API의 프라이빗 기본 URL은 관리하는 도메인의 https://api-backend.yourdomain.com:443
(yourdomain.com
)과 같습니다. 예를 들어, Twitter API와 통합하려는 경우 개인 기본 URL은 https://api.twitter.com/
입니다.
이 예제에서는 3scale에서 호스팅하는 Echo API 를 사용하여 경로를 수락하고 요청에 대한 정보를 반환합니다(path, request parameters, headers 등). 프라이빗 기본 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"
Copy to Clipboard Copied! 다음과 같은 응답을 받습니다.
{ "method": "GET", "path": "/", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.51.0", "HTTP_X_FORWARDED_FOR": "2.139.235.79, 10.0.103.58", "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "443", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_FORWARDED": "for=10.0.103.58;host=echo-api.3scale.net;proto=https" }, "uuid": "ee626b70-e928-4cb1-a1a4-348b8e361733" }
{ "method": "GET", "path": "/", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.51.0", "HTTP_X_FORWARDED_FOR": "2.139.235.79, 10.0.103.58", "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "443", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_FORWARDED": "for=10.0.103.58;host=echo-api.3scale.net;proto=https" }, "uuid": "ee626b70-e928-4cb1-a1a4-348b8e361733" }
Copy to Clipboard Copied!
2.4.2. 인증 설정 구성
[ your_product_name] > Integration > Settings 의 AUTHENTICATION 섹션에서 API에 대한 인증 설정을 구성할 수 있습니다.
필드 | 설명 |
---|---|
인증 사용자 키 | 인증 정보 위치와 연결된 사용자 키를 설정합니다. |
인증 정보 위치 | 인증 정보가 HTTP 헤더로 전달되는지, 쿼리 매개변수 또는 HTTP 기본 인증으로 전달되는지 여부를 정의합니다. |
호스트 헤더 | 사용자 지정 호스트 요청 헤더를 정의합니다. 이는 API 백엔드가 특정 호스트의 트래픽만 허용하는 경우에만 필요합니다. |
시크릿 토큰 | API 백엔드에 대한 직접 개발자 요청을 차단하는 데 사용됩니다. 여기에서 헤더 값을 설정하고 백엔드에서 이 시크릿 헤더를 사용하여 호출만 허용하도록 합니다. |
또한 [ your_product_name] > Integration > Settings 에서 GATEWAY RESPONSE 오류 코드를 구성할 수 있습니다. 오류 (인증 실패, 인증 누락 및 일치하는 항목이 없음)에 대한 응답 코드, 콘텐츠 유형 및 응답 본문을 정의합니다.
응답 코드 | 응답 본문 |
---|---|
403 | 인증이 실패했습니다 |
403 | 인증 매개변수가 누락됨 |
404 | 일치하는 매핑 규칙 없음 |
429 | 사용량 제한 초과 |
2.4.3. API 테스트 호출 구성
API를 구성하려면 제품을 사용하여 백엔드를 테스트하고 APIcast 구성을 준비 및 프로덕션 환경으로 승격하여 요청 호출을 기반으로 테스트를 수행해야 합니다.
각 제품의 경우 요청은 경로에 따라 해당 백엔드로 리디렉션됩니다. 이 경로는 제품에 백엔드를 추가할 때 구성됩니다. 예를 들어 제품에 두 개의 백엔드가 추가되면 각 백엔드에는 고유한 경로가 있습니다.
사전 요구 사항
- 제품에 하나 이상의 백엔드가 추가되었습니다.
- 각 백엔드의 매핑 규칙이 제품에 추가되었습니다.
- 액세스 정책을 정의하는 애플리케이션 계획입니다.
- 애플리케이션 계획을 구독하는 애플리케이션입니다.
절차
- [ your_product_name] > Integration > Configuration으로 이동하여 APIcast 구성을 스테이징으로 승격합니다.
APIcast Configuration에서 제품에 추가된 각 백엔드의 매핑 규칙을 확인할 수 있습니다. promote v.[n] to Staging APIcast 를 클릭합니다.
- v.[n] 은 승격할 버전 번호를 나타냅니다.
스테이징으로 승격되면 프로덕션으로 승격할 수 있습니다. Staging APIcast에서 promote v.[n] to Production APIcast를 클릭합니다.
- v.[n] 은 승격할 버전 번호를 나타냅니다.
명령줄에서 API에 대한 요청을 테스트하려면 테스트에 대해 예제 curl에 제공된 명령을 사용합니다.
- curl 명령 예제는 제품의 첫 번째 매핑 규칙을 기반으로 합니다.
API에 대한 요청을 테스트할 때 메서드 및 메트릭을 추가하여 매핑 규칙을 수정할 수 있습니다.
구성을 수정하고 API를 호출하기 전에 스테이징(Staging) 및 프로덕션(Production) 환경으로 승격해야 합니다. 스테이징 환경으로 승격할 보류 중인 변경 사항이 있는 경우 Integration 메뉴 항목 옆에 관리 포털에 느낌표가 표시됩니다.
3scale 호스팅 APIcast 게이트웨이는 인증 정보를 검증하고 API의 애플리케이션 계획에 대해 정의한 속도 제한을 적용합니다. 인증 정보 없이 호출하거나 잘못된 인증 정보를 사용하는 경우 Authentication failed
오류 메시지가 표시됩니다.
2.4.4. Podman에 APIcast 배포
이는 Red Hat 3scale API Management API 게이트웨이로 사용할 Pod Manager(Podman) 컨테이너 환경에 APIcast를 배포하는 단계별 가이드입니다.
Podman 컨테이너 환경에 APIcast를 배포할 때 지원되는 RHEL(Red Hat Enterprise Linux) 및 Podman은 다음과 같습니다.
- RHEL 8.x/9.x
- Podman 4.6.1
사전 요구 사항
- 3scale 관리 포털에서 APIcast 설치 에 따라 APIcast 를 구성해야 합니다.
Podman 컨테이너 환경에 APIcast를 배포하려면 다음 섹션에 설명된 단계를 수행합니다.
2.4.4.1. Podman 컨테이너 환경 설치
이 가이드에서는 RHEL 8.x에서 Podman 컨테이너 환경을 설정하는 단계를 설명합니다. Docker는 RHEL 8.x에 포함되어 있지 않으므로 컨테이너 작업을 위해 Podman을 사용합니다.
RHEL 8.x를 사용한 Podman에 대한 자세한 내용은 컨테이너 명령줄 참조를 확인하십시오.
절차
Podman 컨테이너 환경 패키지를 설치합니다.
sudo dnf install podman
$ sudo dnf install podman
Copy to Clipboard Copied!
추가 리소스
다른 운영 체제의 경우 다음 Podman 설명서를 참조하십시오.
2.4.4.2. Podman 환경 실행
Podman 컨테이너 환경을 실행하려면 아래 절차를 따르십시오.
절차
Red Hat 레지스트리에서 Podman 컨테이너 이미지를 사용할 준비가 된 것을 다운로드합니다.
podman pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15
$ podman pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15
Copy to Clipboard Copied! Podman에서 APIcast를 실행합니다.
podman run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://<access_token>@<domain>-admin.3scale.net registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15
$ podman run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://<access_token>@<domain>-admin.3scale.net registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15
Copy to Clipboard Copied! 여기서
<access_token>
은 3scale 계정 관리 API의 액세스 토큰입니다. 액세스 토큰 대신 공급자 키를 사용할 수 있습니다.<domain>-admin.3scale.net
은 3scale 관리 포털의 URL입니다.
이 명령은 포트 8080
에서 "apicast"라는 Podman 컨테이너 엔진을 실행하고 3scale 관리 포털에서 JSON 구성 파일을 가져옵니다. 기타 구성 옵션은 APIcast 설치를 참조하십시오.
2.4.4.2.1. Podman을 사용하여 APIcast 테스트
이전 단계에서는 3scale 레지스트리의 고유한 구성 파일 및 Podman 컨테이너 이미지를 사용하여 Podman 컨테이너 엔진이 실행되고 있는지 확인합니다. 포트 8080
에서 APIcast를 통해 호출을 테스트하고 3scale 계정에서 가져올 수 있는 올바른 인증 정보를 제공할 수 있습니다.
테스트 호출은 APIcast가 올바르게 실행되고 있는지 확인할 뿐만 아니라 인증 및 보고가 성공적으로 처리되고 있는지도 확인합니다.
호출에 사용하는 호스트가 Integration (통합) 페이지의 Public Base URL 필드에 구성된 호스트와 같은지 확인합니다.
2.4.4.3. podman
명령 옵션
podman
명령에 다음 옵션 예제를 사용할 수 있습니다.
-
-d
: 분리된 모드로 컨테이너를 실행하고 컨테이너 ID를 출력합니다. 지정하지 않으면 컨테이너가 전경 모드에서 실행되며CTRL + c
를 사용하여 중지할 수 있습니다. 분리 모드에서 시작되면podman attach
명령을 사용하여 컨테이너에 다시 연결할 수 있습니다(예:podman attach apicast
). -
ps
및-a
: Podmanps
는 생성 및 실행 중인 컨테이너를 나열하는 데 사용됩니다.ps
명령에-a
를 추가하면 실행 중이고 중지된 모든 컨테이너(예:podman ps -a
)가 표시됩니다. -
inspect
및-l
: 실행 중인 컨테이너를 검사합니다. 예를 들어, 컨테이너에 할당된 ID를 확인하려면inspect
를 사용합니다.-l
을 사용하여 최신 컨테이너의 세부 정보를 가져옵니다(예:podman inspect -l | grep Id\":
).
2.4.4.4. 추가 리소스
2.5. Operator를 사용하여 APIcast 게이트웨이 자체 관리 솔루션 배포
이 가이드에서는 Openshift Container Platform 콘솔을 통해 APIcast Operator를 사용하여 APIcast 게이트웨이 자체 관리 솔루션을 배포하는 단계를 제공합니다.
기본 설정은 APIcast를 배포할 때 프로덕션 환경에 사용됩니다. 스테이징 환경을 배포하기 위해 항상 이러한 설정을 조정할 수 있습니다. 예를 들어 다음 oc
명령을 사용합니다.
oc patch apicast/{apicast_name} --type=merge -p '{"spec":{"deploymentEnvironment":"staging","configurationLoadMode":"lazy"}}'
$ oc patch apicast/{apicast_name} --type=merge -p '{"spec":{"deploymentEnvironment":"staging","configurationLoadMode":"lazy"}}'
자세한 내용은: APIcast 사용자 정의 리소스 참조를참조하십시오.
사전 요구 사항
- 관리자 권한이 있는 OCP(OpenShift Container Platform) 4.x 이상.
- * OpenShift에 APIcast Operator 설치의 단계를 수행했습니다.
프로세스
- 관리자 권한이 있는 계정을 사용하여 OCP 콘솔에 로그인합니다.
- Operators > 설치된 Operators를 클릭합니다.
- Installed Operators 목록에서 APIcast Operator를 클릭합니다.
- APIcast > APIcast 생성을 클릭합니다.
2.5.1. APIcast 배포 및 구성 옵션
다음 두 가지 방법을 사용하여 APIcast 게이트웨이 자체 관리 솔루션을 배포하고 구성할 수 있습니다.
또한 다음을 참조하십시오.
2.5.1.1. 3scale API Management 시스템 끝점 제공
절차
3scale System 관리 포털 엔드포인트 정보가 포함된 OpenShift 시크릿을 생성합니다.
oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
$ oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
Copy to Clipboard Copied! -
${SOME_SECRET_NAME}
은 시크릿의 이름이며 기존 보안과 충돌하지 않는 한 원하는 이름이 될 수 있습니다. ${MY_3SCALE_URL}
은 3scale 액세스 토큰 및 3scale System 포털 끝점을 포함하는 URI입니다. 자세한 내용은THREESCALE_PORTAL_ENDPOINT
를 참조하십시오.예제
oc create secret generic 3scaleportal --from-literal=AdminPortalURL=https://access-token@account-admin.3scale.net
$ oc create secret generic 3scaleportal --from-literal=AdminPortalURL=https://access-token@account-admin.3scale.net
Copy to Clipboard Copied! 시크릿 콘텐츠에 대한 자세한 내용은 관리 포털 구성 시크릿 참조를 살펴보십시오.
-
APIcast용 OpenShift 오브젝트 생성
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: adminPortalCredentialsRef: name: SOME_SECRET_NAME
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: adminPortalCredentialsRef: name: SOME_SECRET_NAME
Copy to Clipboard Copied! spec.adminPortalCredentialsRef.name
은 3scale 시스템 관리 포털 끝점 정보가 포함된 기존 OpenShift 시크릿의 이름이어야 합니다.APIcast 오브젝트와 연결된 OpenShift 배포의
readyReplicas
필드가 1 인지 확인하여 APIcast Pod가 실행 중이고 준비되었는지 확인합니다. 또는 다음을 사용하여 필드가 설정될 때까지 기다립니다.echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}')
$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
Copy to Clipboard Copied!
2.5.1.1.1. APIcast 게이트웨이가 실행 중이고 사용 가능한지 확인
절차
OpenShift Service APIcast가 로컬 머신에 노출되었는지 확인하고 테스트 요청을 수행합니다. 이렇게 하려면 포트-캐스트 OpenShift 서비스를
localhost:8080
으로 전달합니다.oc port-forward svc/apicast-example-apicast 8080
$ oc port-forward svc/apicast-example-apicast 8080
Copy to Clipboard Copied! 구성된 3scale 서비스에 요청하여 성공적인 HTTP 응답을 확인합니다. 서비스의
Staging Public Base URL
또는Production Public Base URL
설정에 구성된 도메인 이름을 사용합니다. 예를 들면 다음과 같습니다.curl 127.0.0.1:8080/test -H "Host: localhost"
$ curl 127.0.0.1:8080/test -H "Host: localhost" { "method": "GET", "path": "/test", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.65.3", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_FORWARDED_FOR": ... "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "80", "HTTP_X_FORWARDED_PROTO": "http", "HTTP_FORWARDED": "for=10.0.101.216;host=echo-api.3scale.net;proto=http" }, "uuid": "603ba118-8f2e-4991-98c0-a9edd061f0f0"
Copy to Clipboard Copied!
2.5.1.1.2. Kubernetes 인그레스를 통해 외부에서 APIcast 노출
쿠버네티스 인그레스를 통해 APIcast를 외부에 노출하려면 exposedHost
섹션을 설정하고 구성하십시오. exposedHost
섹션의 host
필드가 설정되면 Kubernetes Ingress 오브젝트가 생성됩니다. 그런 다음 Kubernetes Ingress 오브젝트는 이전에 설치한 및 기존 Kubernetes Ingress 컨트롤러에서 Kubernetes Ingress를 사용하여 외부에서 APIcast에 액세스할 수 있도록 할 수 있습니다.
APIcast를 외부에서 액세스할 수 있도록 하는 데 사용 가능한 Ingress 컨트롤러가 무엇인지 알아보고 Kubernetes Ingress 컨트롤러 설명서를 참조하십시오.
호스트 이름 myhostname.com
을 사용하여 APIcast를 노출하는 예는 다음과 같습니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: ... exposedHost: host: "myhostname.com" ...
apiVersion: apps.3scale.net/v1alpha1
kind: APIcast
metadata:
name: example-apicast
spec:
...
exposedHost:
host: "myhostname.com"
...
이 예제에서는 HTTP를 사용하여 포트 80에 Kubernetes Ingress 오브젝트를 생성합니다. APIcast 배포가 OpenShift 환경에 있는 경우 OpenShift 기본 Ingress 컨트롤러는 APIcast 설치에 대한 외부 액세스를 허용하는 Ingress 오브젝트 APIcast를 사용하여 Route 오브젝트를 생성합니다.
exposedHost
섹션에 대해 TLS를 구성할 수도 있습니다. 다음 표에서 사용 가능한 필드에 대한 세부 정보:
json/yaml 필드 | 유형 | 필수 항목 | 기본값 | 설명 |
---|---|---|---|---|
| string | 제공됨 | 해당 없음 | 게이트웨이로 라우팅되는 도메인 이름 |
| []networkv1.IngressTLS | 없음 | 해당 없음 | ingress TLS 오브젝트의 배열입니다. TLS에서 자세한 내용을 참조하십시오. |
2.5.1.2. 구성 시크릿 제공
절차
구성 파일을 사용하여 시크릿을 생성합니다.
curl https://raw.githubusercontent.com/3scale/APIcast/master/examples/configuration/echo.json -o $PWD/config.json oc create secret generic apicast-echo-api-conf-secret --from-file=$PWD/config.json
$ curl https://raw.githubusercontent.com/3scale/APIcast/master/examples/configuration/echo.json -o $PWD/config.json $ oc create secret generic apicast-echo-api-conf-secret --from-file=$PWD/config.json
Copy to Clipboard Copied! 구성 파일은
config.json
이라고 합니다. 이는 APIcast CRD 참조 요구 사항입니다.시크릿 콘텐츠에 대한 자세한 내용은 관리 포털 구성 시크릿 참조를 살펴보십시오.
APIcast 사용자 정의 리소스를 생성합니다.
cat my-echo-apicast.yaml apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: my-echo-apicast spec: exposedHost: host: YOUR DOMAIN embeddedConfigurationSecretRef: name: apicast-echo-api-conf-secret oc apply -f my-echo-apicast.yaml
$ cat my-echo-apicast.yaml apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: my-echo-apicast spec: exposedHost: host: YOUR DOMAIN embeddedConfigurationSecretRef: name: apicast-echo-api-conf-secret $ oc apply -f my-echo-apicast.yaml
Copy to Clipboard Copied! 다음은 포함된 구성 시크릿의 예입니다.
apiVersion: v1 kind: Secret metadata: name: SOME_SECRET_NAME type: Opaque stringData: config.json: | { "services": [ { "proxy": { "policy_chain": [ { "name": "apicast.policy.upstream", "configuration": { "rules": [{ "regex": "/", "url": "http://echo-api.3scale.net" }] } } ] } } ] }
apiVersion: v1 kind: Secret metadata: name: SOME_SECRET_NAME type: Opaque stringData: config.json: | { "services": [ { "proxy": { "policy_chain": [ { "name": "apicast.policy.upstream", "configuration": { "rules": [{ "regex": "/", "url": "http://echo-api.3scale.net" }] } } ] } } ] }
Copy to Clipboard Copied!
APIcast 오브젝트를 생성할 때 다음 콘텐츠를 설정합니다.
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: embeddedConfigurationSecretRef: name: SOME_SECRET_NAME
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: embeddedConfigurationSecretRef: name: SOME_SECRET_NAME
Copy to Clipboard Copied! spec.embeddedConfigurationSecretRef.name
은 게이트웨이 구성이 포함된 기존 OpenShift 시크릿의 이름이어야 합니다.APIcast 오브젝트와 연결된 OpenShift 배포의
readyReplicas
필드가 1 인지 확인하여 APIcast Pod가 실행 중이고 준비되었는지 확인합니다. 또는 다음을 사용하여 필드가 설정될 때까지 기다립니다.echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}')
$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
Copy to Clipboard Copied!
2.5.1.2.1. APIcast 게이트웨이가 실행 중이고 사용 가능한지 확인
절차
OpenShift Service APIcast가 로컬 머신에 노출되었는지 확인하고 테스트 요청을 수행합니다. 이렇게 하려면 포트-캐스트 OpenShift 서비스를
localhost:8080
으로 전달합니다.oc port-forward svc/apicast-example-apicast 8080
$ oc port-forward svc/apicast-example-apicast 8080
Copy to Clipboard Copied!
2.5.1.3. APIcast Operator를 사용하여 사용자 정의 환경 삽입
자체 관리 APIcast를 사용하는 3scale 설치에서는 APIcast
연산자를 사용하여 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경은 게이트웨이가 제공하는 모든 업스트림 API에 APIcast가 적용되는 동작을 정의합니다. 사용자 지정 환경을 만들려면 Lua 코드에서 글로벌 구성을 정의합니다.
APIcast 설치 후 또는 APIcast 설치 후 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경을 삽입한 후 이를 제거하고 APIcast
Operator가 변경 사항을 조정할 수 있습니다.
사전 요구 사항
- APIcast Operator가 설치되어 있습니다.
절차
삽입할 사용자 지정 환경을 정의하는 Lua 코드를 작성합니다. 예를 들어 다음
env1.lua
파일은APIcast
운영자가 모든 서비스에 대해 로드하는 사용자 지정 로깅 정책을 보여줍니다.local cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
local cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
Copy to Clipboard Copied! 사용자 지정 환경을 정의하는 Lua 파일에서 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic custom-env-1 --from-file=./env1.lua
$ oc create secret generic custom-env-1 --from-file=./env1.lua
Copy to Clipboard Copied! 시크릿에는 여러 사용자 지정 환경이 포함될 수 있습니다. 사용자 지정 환경을 정의하는 각 파일에 대해
-from-file
옵션을 지정합니다. Operator는 각 사용자 지정 환경을 로드합니다.방금 생성한 시크릿을 참조하는
APIcast
사용자 정의 리소스를 정의합니다. 다음 예제에서는 사용자 지정 환경을 정의하는 시크릿을 참조하는 상대적 콘텐츠만 보여줍니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customEnvironments: - secretRef: name: custom-env-1
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customEnvironments: - secretRef: name: custom-env-1
Copy to Clipboard Copied! APIcast
사용자 정의 리소스는 사용자 지정 환경을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 환경을 로드합니다.사용자 지정 환경을 추가하는
APIcast
사용자 정의 리소스를 생성합니다. 예를 들어APIcast
사용자 정의 리소스를apicast.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc apply -f apicast.yaml
$ oc apply -f apicast.yaml
Copy to Clipboard Copied!
다음 단계
사용자 정의 환경을 업데이트하는 경우 시크릿에 업데이트가 포함되도록 시크릿을 다시 만들어야 합니다. APIcast
Operator는 업데이트를 감시하고 업데이트를 찾을 때 자동으로 재배포됩니다.
2.5.1.4. APIcast Operator를 사용하여 사용자 정의 정책 삽입
자체 관리 APIcast를 사용하는 3scale 설치에서는 APIcast
Operator를 사용하여 사용자 지정 정책을 삽입할 수 있습니다. 사용자 지정 정책을 삽입하면 정책 코드가 APIcast에 추가됩니다. 그런 다음 다음 중 하나를 사용하여 API 제품의 정책 체인에 사용자 지정 정책을 추가할 수 있습니다.
- 3scale API
-
Product
사용자 정의 리소스
3scale 관리 포털을 사용하여 제품의 정책 체인에 사용자 지정 정책을 추가하려면 사용자 지정 정책의 스키마를 CustomPolicyDefinition
사용자 지정 리소스에 등록해야 합니다. 사용자 지정 정책 등록은 관리 포털을 사용하여 제품의 정책 체인을 구성하려는 경우에만 필요합니다.
사용자 지정 정책을 APIcast 설치의 일부로 삽입할 수 있습니다. 사용자 지정 정책을 삽입한 후 제거할 수 있으며 APIcast
operator가 변경 사항을 조정합니다.
사전 요구 사항
- APIcast Operator가 설치되었거나 설치 중입니다.
-
자체 정책 쓰기에 설명된 대로 사용자 지정 정책을 정의했습니다. 즉, 사용자 지정 정책을 정의하는
my-first-custom-policy.lua
,apicast-policy.json
,init.lua
파일이 이미 생성되었습니다.
절차
하나의 사용자 지정 정책을 정의하는 파일에서 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
$ oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
Copy to Clipboard Copied! 사용자 지정 정책이 두 개 이상 있는 경우 각 사용자 지정 정책에 대한 보안을 생성합니다. 보안에는 하나의 사용자 지정 정책만 포함될 수 있습니다.
방금 생성한 시크릿을 참조하는
APIcast
사용자 정의 리소스를 정의합니다. 다음 예제에서는 사용자 정의 정책을 정의하는 시크릿을 참조하는 것과 관련된 콘텐츠만 보여줍니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret
Copy to Clipboard Copied! APIcast
사용자 정의 리소스는 사용자 지정 정책을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 정책을 로드합니다.사용자 지정 정책을 추가하는
APIcast
사용자 정의 리소스를 생성합니다. 예를 들어APIcast
사용자 정의 리소스를apicast.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc apply -f apicast.yaml
$ oc apply -f apicast.yaml
Copy to Clipboard Copied!
다음 단계
사용자 정의 정책을 업데이트하는 경우 보안이 업데이트가 포함되도록 보안을 다시 생성해야 합니다. APIcast
Operator는 업데이트를 감시하고 업데이트를 찾을 때 자동으로 재배포됩니다.
추가 리소스
2.5.1.5. APIcast Operator를 사용하여 OpenTracing 구성
자체 관리 APIcast
를 사용하는 3scale 설치에서는 APIcast Operator를 사용하여 OpenTracing을 구성할 수 있습니다. OpenTracing을 활성화하면 APIcast 인스턴스에 대한 더 많은 통찰력과 가시성을 얻을 수 있습니다.
사전 요구 사항
-
APIcast
Operator가 설치되었거나 설치 중입니다.
프로세스
stringData.config
에 OpenTracing 구성 세부 정보가 포함된 시크릿을 정의합니다. 이는 OpenTracing 구성 세부 정보가 포함된 속성에 대해 유일하게 유효한 값입니다. 다른 사양에서는 APIcast가 OpenTracing 구성 세부 정보를 수신하지 못하도록 합니다. 다음 예제에서는 유효한 보안 정의를 보여줍니다.apiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
apiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
Copy to Clipboard Copied! 시크릿을 생성합니다. 예를 들어 이전 시크릿 정의를
myjaeger.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc create -f myjaeger.yaml
$ oc create -f myjaeger.yaml
Copy to Clipboard Copied! OpenTracing
특성을 지정하는APIcast
사용자 지정 리소스를 정의합니다. CR 정의에서spec.tracingConfigSecretRef.name
속성을 OpenTracing 구성 세부 정보가 포함된 보안 이름으로 설정합니다. 다음 예제에서는 OpenTracing 구성을 기준으로 한 콘텐츠만 보여줍니다.apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: ... openTracing: enabled: true tracingConfigSecretRef: name: myjaeger tracingLibrary: jaeger ...
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: ... openTracing: enabled: true tracingConfigSecretRef: name: myjaeger tracingLibrary: jaeger ...
Copy to Clipboard Copied! OpenTracing을 구성하는
APIcast
사용자 정의 리소스를 만듭니다. 예를 들어APIcast
사용자 정의 리소스를apicast1.yaml
파일에 저장한 경우 다음 명령을 실행합니다.oc apply -f apicast1.yaml
$ oc apply -f apicast1.yaml
Copy to Clipboard Copied!
다음 단계
OpenTracing이 설치된 방법에 따라 Jaeger 서비스 사용자 인터페이스에 추적이 표시되어야 합니다.
추가 리소스
2.5.1.6. APICAST_SERVICE_CACHE_SIZE 환경 변수 설정
APIcast CR(사용자 정의 리소스)에 선택적 필드를 추가하여 APIcast가 내부 캐시에 저장하는 서비스 수를 지정할 수 있습니다.
사전 요구 사항
- APIcast Operator를 설치했거나 설치 중입니다.
프로세스
-
spec
에serviceCacheSize
선택적 필드를 추가합니다.
spec: // ... serviceCacheSize: 42
spec:
// ...
serviceCacheSize: 42
검증
다음 명령을 입력하여 배포를 확인합니다.
oc get deployment/apicast-example-apicast -o yaml
$ oc get deployment/apicast-example-apicast -o yaml
Copy to Clipboard Copied! 환경 변수 포함을 확인합니다.
... ...
# ... - name: APICAST_SERVICE_CACHE_SIZE value: '42' # ...
Copy to Clipboard Copied!
추가 리소스
2.6. 추가 리소스
최신 릴리스 및 지원되는 APIcast 버전에 대한 자세한 내용은 문서를 참조하십시오.
3장. 3scale API Management에서 고가용성 지원을 위한 외부 Redis 데이터베이스 구성
Red Hat은 외부 Redis 데이터베이스를 사용하는 3scale 구성을 지원합니다. 그러나 공식적으로 제로 다운타임으로 Redis 설정, 3scale의 백엔드 구성 요소 구성 또는 Redis 데이터베이스 복제 및 샤딩을 지원하지 않습니다. 콘텐츠는 참조용으로만 제공됩니다. 또한 Redis cluster mode
는 3scale에서 지원되지 않습니다.
HA(고가용성)는 OpenShift Container Platform(OCP)에서 대부분의 구성 요소에 대해 제공됩니다.
Red Hat 3scale API Management 배포에서 데이터베이스를 외부화하는 경우 애플리케이션 격리와 데이터베이스 수준의 서비스 중단에 대한 복원력을 제공합니다. 서비스 중단에 대한 복원력은 데이터베이스를 호스팅하는 인프라 또는 플랫폼 공급자가 제공하는 SLA(서비스 수준 계약)에 따라 달라집니다. 이는 3scale에서 제공되지 않습니다. 선택한 배포에서 제공하는 데이터베이스를 외부화하는 방법에 대한 자세한 내용은 관련 문서를 참조하십시오.
Red Hat 3scale API Management의 HA에 대한 데이터베이스 구성 요소는 다음과 같습니다.
-
backend-redis
: 통계 스토리지 및 임시 작업 스토리지에 사용됩니다. -
system-redis
: 3scale의 백그라운드 작업을 위한 임시 스토리지를 제공하며,system-app
Pod의 Ruby 프로세스에 대한 메시지 버스로도 사용됩니다.
backend-redis
및 system-redis
모두 Redis Sentinel 및 Redis Enterprise에서 지원되는 Redis 고가용성 변형에서 작동합니다.
Redis Pod를 중지하거나 OpenShift Container Platform에서 중지하면 새 Pod가 자동으로 생성됩니다. 영구 스토리지는 Pod가 계속 작동하도록 데이터를 복원합니다. 이러한 시나리오에서는 새 pod가 시작되는 동안 약간의 다운타임이 발생합니다. 이는 여러 마스터 설정을 지원하지 않는 Redis의 제한 때문입니다. Redis가 배포된 모든 노드에 Redis 이미지를 사전 설치하여 다운타임을 줄일 수 있습니다. 이렇게 하면 Pod 재시작 시간이 빨라집니다.
다운 타임에 대한 Redis를 설정하고 3scale에 대한 백엔드 구성 요소를 구성합니다.
사전 요구 사항
- 관리자 역할이 있는 3scale 계정입니다.
3.1. 제로 다운타임으로 Redis 설정
3scale 관리자로서 다운타임이 필요하지 않은 경우 OCP 외부에서 Redis를 구성하십시오. 3scale Pod의 구성 옵션을 사용하여 설정하는 방법은 여러 가지가 있습니다.
- 자체 관리 Redis 설정
- Redis Sentinel 사용: Redis Sentinel 문서 참조
Redis는 서비스로 제공됩니다.
예를 들면 다음과 같습니다.
- Amazon ElastiCache
- Redis Labs
Red Hat은 위에 언급된 서비스를 지원하지 않습니다. 이러한 서비스에 대한 언급은 Red Hat의 제품 또는 서비스를 보증한다는 의미는 아닙니다. 사용자는 Red Hat이 귀하의 외부 콘텐츠 사용 (또는 의존)으로 인해 발생할 수있는 손실 또는 비용을 부담하지 않는 것에 동의합니다.
3.2. 3scale API Management의 백엔드 구성 요소 구성
3scale 관리자로 backend-cron
, backend-listener
, backend-worker
구성 요소 환경 변수에 대한 back-end
의 Redis HA(failover)를 구성합니다. 이러한 구성은 3scale의 Redis HA에 필요합니다.
sentinels와 함께 Redis를 사용하려면 backend-redis
,system-redis
또는 두 가지 보안 모두에 sentinel 구성을 제공해야 합니다.
3.2.1. backend-redis
및 system-redis
시크릿 생성
다음 단계에 따라 backend-redis
및 system-redis
시크릿을 생성합니다.
3.2.2. HA용 3scale API Management 신규 설치 배포
프로세스
아래 필드를 사용하여
backend-redis
및system-redis
시크릿을 생성합니다.backend-redis
REDIS_QUEUES_SENTINEL_HOSTS REDIS_QUEUES_SENTINEL_ROLE REDIS_QUEUES_URL REDIS_STORAGE_SENTINEL_HOSTS REDIS_STORAGE_SENTINEL_ROLE REDIS_STORAGE_URL
REDIS_QUEUES_SENTINEL_HOSTS REDIS_QUEUES_SENTINEL_ROLE REDIS_QUEUES_URL REDIS_STORAGE_SENTINEL_HOSTS REDIS_STORAGE_SENTINEL_ROLE REDIS_STORAGE_URL
Copy to Clipboard Copied! system-redis
NAMESPACE SENTINEL_HOSTS SENTINEL_ROLE URL
NAMESPACE SENTINEL_HOSTS SENTINEL_ROLE URL
Copy to Clipboard Copied! sentinels를 사용하여 Redis에 대해 구성할 때
backend-redis
및system-redis
의 해당URL
필드는redis://[:redis-password@]redis-group[/db]
형식의 Redis 그룹을 나타냅니다. 여기서 [x]는 선택적 요소 x이며,redis-password
,redis-group
,db
변수를 적절하게 대체합니다.예제
redis://:redispwd@mymaster/5
redis://:redispwd@mymaster/5
Copy to Clipboard Copied! SENTINEL_HOSTS
필드는 다음 형식의 sentinel 연결 문자열을 쉼표로 구분한 목록입니다.redis://:sentinel-password@sentinel-hostname-or-ip:port
redis://:sentinel-password@sentinel-hostname-or-ip:port
Copy to Clipboard Copied! 목록의 각 요소에 대해 [x]는 선택적 요소 x 및
sentinel-password
,sentinel-hostname-or-ip
를 나타내며,port
는 그에 따라 교체할 변수입니다.예제
:sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
:sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
Copy to Clipboard Copied!
-
SENTINEL_ROLE
필드는master
또는slave
입니다.
Operator를 사용하여 3scale API Management 배포에 표시된 대로 3scale을 배포합니다.
-
이미 존재하는
backend-redis
및system-redis
로 인한 오류를 무시합니다.
-
이미 존재하는
3.2.3. 3scale API Management의 HA가 아닌 배포를 HA로 마이그레이션
-
HA용 3scale API Management의 새로운 설치 배포와 같이 모든 필드를 사용하여
backend-redis
및system-redis
시크릿을 편집합니다. 백엔드 pod에 대해 다음
backend-redis
환경 변수가 정의되어 있는지 확인합니다.name: BACKEND_REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_HOSTS name: backend-redis name: BACKEND_REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_ROLE name: backend-redis
name: BACKEND_REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_HOSTS name: backend-redis name: BACKEND_REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_ROLE name: backend-redis
Copy to Clipboard Copied! 다음
system-redis
환경 변수가system-(app|sidekiq)
Pod에 대해 정의되어 있는지 확인합니다.name: REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: SENTINEL_HOSTS name: system-redis name: REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: SENTINEL_ROLE name: system-redis
name: REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: SENTINEL_HOSTS name: system-redis name: REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: SENTINEL_ROLE name: system-redis
Copy to Clipboard Copied! - 계속 link:h:Link3scaleMigrating3scale: 템플릿을 사용하여 3scale 업그레이드 를 위한 지침을 진행합니다.
3.2.3.1. Redis Enterprise 사용
OpenShift에 배포된 Redis Enterprise를 사용하여 다음과 같은 세 가지
redis-enterprise
인스턴스를 사용하십시오.system-redis
시크릿을 편집합니다.-
system-redis
에서 시스템 redis 데이터베이스를URL
로 설정합니다.
-
-
backend-redis
의 백엔드 데이터베이스를REDIS_QUES_URL
로 설정합니다. -
backend-redis
의 세 번째 데이터베이스를REDIS_STORAGE_URL
로 설정합니다.
3.2.3.2. Redis Sentinel 사용
필요에 따라 Redis Sentinels를 모든 데이터베이스에 적용할 수 있습니다. 그러나 Red Hat은 HA에 대해 Redis Sentinels를 모두 적용할 것을 권장합니다.
통계의 백엔드 redis:
backend-redis
시크릿을 업데이트하고 다음 값을 제공합니다.-
REDIS_STORAGE_URL
-
REDIS_STORAGE_SENTINEL_ROLE
REDIS_STORAGE_SENTINEL_HOSTS
REDIS_STORAGE_SENTINEL_ROLE
을 쉼표로 구분된 호스트 및 포트 목록으로 설정합니다 (예::sentinelpwd@123.45.67.009:2711,:sentinel@other-sentinel:2722
)
-
대기열의 백엔드 redis:
backend-redis
시크릿을 업데이트하고 다음 값을 제공합니다.-
REDIS_QUEUES_URL
-
REDIS_QUEUES_SENTINEL_ROLE
REDIS_QUEUES_SENTINEL_HOSTS
REDIS_QUEUES_SENTINEL_ROLE
을 쉼표로 구분된 sentinels 호스트 및 포트 목록으로 설정합니다. (예::sentinelpwd@123.45.67.009:2711,:sentinel@other-sentinel:2722
)
-
- 다음 Redis 데이터베이스와 함께 Redis Sentinel을 사용하십시오.
데이터에 대한 시스템 redis:
system-redis
시크릿을 업데이트하고 다음 값을 제공합니다.참고system-redis
시크릿 편집:URL
-
SENTINEL_ROLE
-
NAMESPACE
-
URL
SENTINEL_HOSTS
SENTINEL_HOSTS
를 쉼표로 구분된 sentinels 호스트 및 포트 목록으로 설정합니다. (예::sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
)
-
참고
system-app 및 system-sidekiq 구성 요소는 통계를 검색하기 위해
back-end
Redis에 직접 연결합니다.-
3scale 2.7부터 이러한 시스템 구성 요소는 sentinels를 사용할 때
back-end
Redis(스토리지)에도 연결할 수 있습니다.
-
3scale 2.7부터 이러한 시스템 구성 요소는 sentinels를 사용할 때
system-app 및 system-sidekiq 구성 요소는
backend-redis
대기열이 아닌backend-redis
스토리지 만 사용합니다.-
시스템 구성 요소를 변경하면 sentinels가 있는
backend-redis
스토리지를 지원합니다.
-
시스템 구성 요소를 변경하면 sentinels가 있는
3.3. 추가 정보
- 3scale 및 Redis 데이터베이스 지원에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 를 참조하십시오.
- Redis용 Amazon ElastiCache에 대한 자세한 내용은 공식 Amazon ElastiCache 문서를 참조하십시오.
- Redis Enterprise에 대한 자세한 내용은 최신 문서 를 참조하십시오.
4장. 외부 MySQL 데이터베이스 구성
Red Hat 3scale API Management 배포에서 데이터베이스를 외부화하는 경우 애플리케이션 격리와 데이터베이스 수준의 서비스 중단에 대한 복원력을 제공합니다. 서비스 중단에 대한 복원력은 데이터베이스를 호스팅하는 인프라 또는 플랫폼 공급자가 제공하는 SLA(서비스 수준 계약)에 따라 달라집니다. 이는 3scale에서 제공되지 않습니다. 선택한 배포에서 제공하는 데이터베이스를 외부화하는 방법에 대한 자세한 내용은 관련 문서를 참조하십시오.
Red Hat은 외부 MySQL 데이터베이스를 사용하는 3scale 구성을 지원합니다. 그러나 데이터베이스 자체는 지원 범위에 포함되지 않습니다.
이 가이드에서는 MySQL 데이터베이스를 외부화하는 데 필요한 정보를 제공합니다. 이는 기본 system-mysql
pod를 사용하여 네트워크 또는 파일 시스템과 같은 여러 인프라 문제가 있는 경우 유용합니다.
사전 요구 사항
- 관리자 권한이 있는 계정을 사용하여 OpenShift Container Platform 4.x 클러스터에 액세스할 수 있습니다.
- OpenShift 클러스터에 3scale 인스턴스 설치 OpenShift에 3scale API Management 설치를 참조하십시오.
- 외부 MySQL 데이터베이스 구성에 따라 구성된 외부(3scale 설치의 일부가 아닌) MySQL 데이터베이스입니다.
외부 MySQL 데이터베이스를 구성하려면 다음 섹션에 설명된 단계를 수행합니다.
4.1. 외부 MySQL 데이터베이스 구성
외부 MySQL 데이터베이스를 만들 때 아래에 설명된 대로 구성해야 합니다.
MySQL 데이터베이스 사용자
외부 MySQL 데이터베이스에 대한 연결 문자열은 데이터베이스 연결을 구성하는 데 사용되는 연결 문자열입니다(연결 문자열을 구성할 위치를 알아보려면 시스템 데이터베이스 시크릿 참조)는 다음 형식이어야 합니다.
mysql2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}
mysql2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}
{DB_PASSWORD}
및 {DB_PORT}
는 선택 사항입니다.
사용자 이름이 {DB_USER}
인 사용자는 {DB_NAME}
로 표시된 데이터베이스에 모든 권한을 생성하고 부여해야 합니다. 사용자를 생성하는 명령의 예:
CREATE USER 'exampleuser'@'%' IDENTIFIED BY 'examplepass'; GRANT ALL PRIVILEGES ON exampledb.* to 'exampleuser'@'%';
CREATE USER 'exampleuser'@'%' IDENTIFIED BY 'examplepass';
GRANT ALL PRIVILEGES ON exampledb.* to 'exampleuser'@'%';
3scale을 새로 설치하는 경우 {DB_NAME}
데이터베이스가 없으면 설치 스크립트에 의해 생성됩니다.
바이너리 로깅 구성
MySQL 서버에서 바이너리 로깅이 활성화되어 있고 데이터베이스 사용자에게 SUPER 권한이 없는 경우 글로벌 시스템 변수 log_bin_trust_function_creators
를 1
로 설정해야 합니다. 이는 3scale에서 저장 프로시저 및 트리거를 사용하므로 필요합니다.
또는 데이터베이스 사용자에 대한 SUPER 권한을 설정하도록 선택하는 경우 MySQL 8.0에서 더 이상 사용되지 않으며 향후 MySQL 버전에서 제거됩니다. 자세한 내용은 MySQL 설명서 를 참조하십시오.
4.2. MySQL 데이터베이스 외부 지정
다음 단계를 사용하여 MySQL 데이터베이스를 완전히 외부화합니다.
그러면 프로세스가 진행되는 동안 환경에서 다운타임이 발생합니다.
절차
3scale 온-프레미스 인스턴스가 호스팅되는 OpenShift 노드에 로그인하고 해당 프로젝트로 변경합니다.
oc login -u <user> <url> oc project <3scale-project>
$ oc login -u <user> <url> $ oc project <3scale-project>
Copy to Clipboard Copied! <user>
,<url>
,<3scale-project>
를 사용자 고유의 자격 증명 및 프로젝트 이름으로 바꿉니다.표시된 순서에 따라 모든 pod를 축소합니다. 이는 데이터 손실을 방지 할 것입니다.
3scale 온-프레미스 중지
OpenShift 웹 콘솔 또는 CLI(명령줄 인터페이스)에서 모든 배포 구성을 다음 순서로 0개의 복제본으로 축소합니다.
-
3scale 2.6 이전 버전의 경우
apicast-wildcard-router
및zync
3scale 2.6 이상 버전의 경우zync-que
및zync
-
apicast-staging
및apicast-production
. system-sidekiq
,backend-cron
,system-searchd
.-
3scale 2.3에는
system-resque
가 포함되어 있습니다.
-
3scale 2.3에는
-
system-app
. -
backend-listener
및backend-worker
. backend-redis
,system-memcache
,system-mysql
,system-redis
,zync-database
.다음 예제에서는
apicast-wildcard-router
및zync
에 대해 CLI에서 이 작업을 수행하는 방법을 보여줍니다.oc scale deployment/apicast-wildcard-router --replicas=0 oc scale deployment/zync --replicas=0
$ oc scale deployment/apicast-wildcard-router --replicas=0 $ oc scale deployment/zync --replicas=0
Copy to Clipboard Copied! 참고각 단계에 대한 배포 구성은 동시에 축소할 수 있습니다. 예를 들어
apicast-wildcard-router
및zync
를 함께 축소할 수 있습니다. 그러나 다음 항목을 축소하기 전에 각 단계의 Pod가 종료될 때까지 기다리는 것이 좋습니다. 3scale 인스턴스는 완전히 다시 시작될 때까지 완전히 액세스할 수 없습니다.
-
3scale 2.6 이전 버전의 경우
3scale 프로젝트에서 실행 중인 Pod가 없는지 확인하려면 다음 명령을 사용합니다.
oc get pods -n <3scale_namespace>
$ oc get pods -n <3scale_namespace>
Copy to Clipboard Copied! 명령에서 리소스를 찾을 수 없음을 반환해야 합니다.
다음 명령을 사용하여 데이터베이스 수준 Pod를 다시 확장합니다.
oc scale deployment/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1
$ oc scale deployment/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1
Copy to Clipboard Copied! 다음 단계를 진행하기 전에
system-mysql
pod를 통해 외부 MySQL 데이터베이스에 로그인할 수 있는지 확인합니다.oc rsh system-mysql-<system_mysql_pod_id>
$ oc rsh system-mysql-<system_mysql_pod_id> mysql -u root -p -h <host>
Copy to Clipboard Copied! - <system_mysql_pod_id> : system-mysql Pod의 식별자입니다.
사용자는 항상 root여야 합니다. 자세한 내용은 External MySQL 데이터베이스 구성 을 참조하십시오.
-
CLI에
mysql>
이 표시됩니다. exit을 입력한 다음 return을 누릅니다. 다음 프롬프트에서 exit을 다시 입력하여 OpenShift 노드 콘솔로 돌아갑니다.
-
CLI에
다음 명령을 사용하여 전체 MySQL 덤프를 수행합니다.
oc rsh system-mysql-<system_mysql_pod_id> /bin/bash -c "mysqldump -u root --single-transaction --routines --triggers --all-databases" > system-mysql-dump.sql
$ oc rsh system-mysql-<system_mysql_pod_id> /bin/bash -c "mysqldump -u root --single-transaction --routines --triggers --all-databases" > system-mysql-dump.sql
Copy to Clipboard Copied! -
<system_mysql_pod_id>를 고유한
system-mysql
Pod ID 로 바꿉니다. 다음 예제와 같이
system-mysql-dump.sql
파일에 유효한 MySQL 수준 덤프가 포함되어 있는지 확인합니다.head -n 10 system-mysql-dump.sql
$ head -n 10 system-mysql-dump.sql -- MySQL dump 10.13 Distrib 8.0, for Linux (x86_64) -- -- Host: localhost Database: -- ------------------------------------------------------ -- Server version 8.0 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */;
Copy to Clipboard Copied!
-
<system_mysql_pod_id>를 고유한
system-mysql
pod를 축소하고 0(영) 복제본으로 둡니다.oc scale deployment/system-mysql --replicas=0
$ oc scale deployment/system-mysql --replicas=0
Copy to Clipboard Copied! 은 URL
mysql2://root:<password>@<host>/system
와 동등한 base64 를 찾아 <password> 및 <host> 를 적절하게 바꿉니다.echo "mysql2://root:<password>@<host>/system" | base64
$ echo "mysql2://root:<password>@<host>/system" | base64
Copy to Clipboard Copied! 원격 MySQL 데이터베이스에 기본 'user'@'%' 를 생성합니다. SELECT 권한만 있으면 됩니다. 또한 동등한 base64를 찾을 수 있습니다.
echo "user" | base64 echo "<password>" | base64
$ echo "user" | base64 $ echo "<password>" | base64
Copy to Clipboard Copied! - <password>를 'user'@'%'의 암호로 바꿉니다.
백업을 수행하고 OpenShift 시크릿
system-database
를 편집합니다.oc get secret system-database -o yaml > system-database-orig.bkp.yml oc edit secret system-database
$ oc get secret system-database -o yaml > system-database-orig.bkp.yml $ oc edit secret system-database
Copy to Clipboard Copied! - URL: [step-8]의 값으로 바꿉니다.
- DB_USER 및 DB_PASSWORD: 두 가지 모두에 대해 이전 단계의 값을 사용합니다.
-
system-mysql-dump.sql
을 원격 데이터베이스 서버로 전송하고 덤프를 가져옵니다. 명령을 사용하여 가져옵니다. 아래 명령을 사용하여
system-mysql-dump.sql
을 원격 데이터베이스 서버에 전송하고 덤프를 서버로 가져옵니다.mysql -u root -p < system-mysql-dump.sql
mysql -u root -p < system-mysql-dump.sql
Copy to Clipboard Copied! system 이라는 새 데이터베이스가 생성되었는지 확인합니다.
mysql -u root -p -se "SHOW DATABASES"
mysql -u root -p -se "SHOW DATABASES"
Copy to Clipboard Copied! 모든 Pod를 올바른 순서로 확장하는 Start 3scale 온-프레미스 에 대한 다음 지침을 사용합니다.
3scale 온-프레미스 시작
-
backend-redis
,system-memcache
,system-mysql
,system-redis
,zync-database
. -
backend-listener
및backend-worker
. -
system-app
. system-sidekiq
,backend-cron
,system-searchd
-
3scale 2.3에는
system-resque
가 포함되어 있습니다.
-
3scale 2.3에는
-
apicast-staging
및apicast-production
. 3scale 2.6 이전 버전의 경우
apicast-wildcard-router
및zync
3scale 2.6 이상 버전의 경우zync-que
및zync
다음 예제에서는
backend-redis
,system-memcache
,system-mysql
,system-redis
,zync-database
에 대해 CLI에서 이 작업을 수행하는 방법을 보여줍니다.oc scale deployment/backend-redis --replicas=1 oc scale deployment/system-memcache --replicas=1 oc scale deployment/system-mysql --replicas=1 oc scale deployment/system-redis --replicas=1 oc scale deployment/zync-database --replicas=1
$ oc scale deployment/backend-redis --replicas=1 $ oc scale deployment/system-memcache --replicas=1 $ oc scale deployment/system-mysql --replicas=1 $ oc scale deployment/system-redis --replicas=1 $ oc scale deployment/zync-database --replicas=1
Copy to Clipboard Copied! 이제
system-app
pod가 문제 없이 가동 및 실행되어야 합니다.
-
- 검증 후 표시된 순서대로 다른 포드를 확장합니다.
-
system-mysql
DeploymentConfig 오브젝트를 백업합니다. 모든 것이 제대로 실행되고 있는지 확인한 후 며칠 후에 삭제할 수 있습니다.system-mysql
DeploymentConfig를 삭제하면 향후 이 절차가 다시 수행되는 경우 향후 혼동이 발생하지 않습니다.
4.3. 롤백
system-app
pod가 완전히 온라인 상태가 아니며 14단계 후에 확인 또는 처리할 수 없는 근본 원인이 있는 경우 롤백 절차를 수행합니다.
system-database-orig.bkp.yml
의 원래 값을 사용하여 시크릿system-database
를 편집합니다. [단계-10] 을 참조하십시오.oc edit secret system-database
$ oc edit secret system-database
Copy to Clipboard Copied! URL, DB_USER, DB_PASSWORD를 원래 값으로 바꿉니다.
모든 pod를 축소한 다음
system-mysql
을 포함하여 다시 확장합니다.system-app
pod 및 기타 pod를 시작한 후 다시 실행해야 합니다. 다음 명령을 실행하여 모든 Pod가 백업되어 실행 중인지 확인합니다.oc get pods -n <3scale-project>
$ oc get pods -n <3scale-project>
Copy to Clipboard Copied!
4.4. 추가 정보
- 3scale 및 MySQL 데이터베이스 지원에 대한 자세한 내용은 Red Hat 3scale API Management 지원 구성을 참조하십시오.