3scale 설치

Red Hat 3scale API Management 2.11

3scale API Management 설치 및 구성.

Red Hat Customer Content Services

초록

이 가이드에서는 3scale API Management를 설치하고 구성하는 데 필요한 정보를 제공합니다.

머리말

이 가이드는 3scale을 설치하고 구성하는 데 유용한 정보를 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.

1장. 3scale의 레지스트리 서비스 계정

3scale 2.11이 있는 공유 환경에서 registry.redhat.io 의 컨테이너 이미지를 사용하려면 개별 사용자의 고객 포털 인증 정보 대신 레지스트리 서비스 계정을 사용해야 합니다.

중요

두 옵션 모두 템플릿 또는 운영자를 통해 OpenShift에 배포하기 전에 이 장에 설명된 단계를 수행하는 3scale을 배포해야 합니다.

레지스트리 서비스 계정을 생성하고 수정하려면 다음 섹션에 설명된 단계를 수행합니다.

1.1. 레지스트리 서비스 계정 생성

레지스트리 서비스 계정을 생성하려면 아래 절차를 따르십시오.

절차

  1. 레지스트리 서비스 계정 페이지로 이동하여 로그인합니다.
  2. 새 서비스 계정을 클릭합니다.
  3. 새 레지스트리 서비스 계정 생성 페이지의 양식을 작성합니다.

    1. 서비스 계정의 이름을 추가합니다.

      참고: 양식 필드 앞에 무작위로 생성된 숫자 문자열이 고정 길이로 표시됩니다.

    2. 설명을 입력합니다.
    3. 생성을 클릭합니다.
  4. 서비스 계정으로 다시 이동합니다.
  5. 생성한 서비스 계정을 클릭합니다.
  6. 접두사 문자열(예: 12345678|username) 및 암호를 포함하여 사용자 이름을 기록해 둡니다. 이 사용자 이름과 암호는 registry.redhat.io에 로그인하는 데 사용됩니다.
참고

인증 토큰 사용 방법을 보여주는 토큰 정보 페이지에는 사용 가능한 탭이 있습니다. 예를 들어 토큰 정보 탭에는 12345678|username 형식의 사용자 이름과 그 아래의 암호 문자열이 표시되어 있습니다.

1.2. 레지스트리 서비스 계정 수정

표의 각 인증 토큰 오른쪽에 있는 팝업 메뉴를 사용하여 레지스트리 서비스 계정 페이지에서 서비스 계정을 편집하거나 삭제할 수 있습니다.

주의

서비스 계정을 다시 생성 또는 제거해도 registry.redhat.io에서 콘텐츠를 인증하고 검색하는 데 토큰을 사용하는 시스템에 영향을 미칩니다.

각 기능에 대한 설명은 다음과 같습니다.

  • 토큰 다시 생성: 권한 있는 사용자가 서비스 계정과 연결된 암호를 재설정할 수 있도록 허용합니다.

    참고: 서비스 계정의 사용자 이름은 수정할 수 없습니다.

  • 설명 업데이트: 권한 있는 사용자가 서비스 계정에 대한 설명을 업데이트할 수 있도록 허용합니다.
  • 계정 삭제: 권한이 있는 사용자가 서비스 계정을 제거할 수 있도록 허용합니다.

1.3. 추가 리소스

2장. OpenShift에 3scale 설치

이 섹션에서는 OpenShift에 Red Hat 3scale API Management 2.11을 배포하는 단계를 안내합니다.

온프레미스 배포를 위한 Red Hat 3scale API Management 솔루션은 다음으로 구성됩니다.

  • 두 가지 API 게이트웨이: 임베디드 APIcast
  • 영구 스토리지를 사용하는 3scale 관리 포털 및 개발자 포털

3scale 솔루션을 배포하는 방법은 다음 두 가지가 있습니다.

참고
  • 운영자 또는 템플릿을 통해 3scale을 배포하는지 여부에 관계없이 먼저 Red Hat 컨테이너 레지스트리에 대한 레지스트리 인증을 구성해야 합니다. 컨테이너 레지스트리 인증 구성을 참조하십시오.
  • 3scale Istio Adapter는 Red Hat OpenShift Service Mesh 내에서 실행되는 서비스에 레이블을 지정하고 해당 서비스를 Red Hat 3scale API Management와 통합할 수 있는 선택적 어댑터로 사용할 수 있습니다. 자세한 내용은 3scale 어댑터 설명서를 참조하십시오.

사전 요구 사항

OpenShift에 3scale을 설치하려면 다음 섹션에 설명된 단계를 수행합니다.

2.1. OpenShift에 3scale을 설치하기 위한 시스템 요구 사항

이 섹션에는 3scale - OpenShift 템플릿의 요구 사항이 나열되어 있습니다.

2.1.1. 환경 요구사항

Red Hat 3scale API Management에는 지원되는 구성에 지정된 환경이 필요합니다.

로컬 파일 시스템 스토리지를 사용하는 경우:

PV(영구 볼륨)

  • Redis 및 MySQL 지속성을 위한 3 RWO(ReadWriteOnce) 영구 볼륨
  • 개발자 포털 콘텐츠 및 System-app Assets를 위한 1 RWX(ReadWriteMany) 영구 볼륨

RWX 영구 볼륨을 그룹 쓰기 가능으로 구성합니다. 필요한 액세스 모드를 지원하는 영구 볼륨 유형 목록은 OpenShift 설명서를 참조하십시오.

콘텐츠 관리 시스템(CMS) 스토리지에 Amazon Simple Storage Service(Amazon S3) 버킷을 사용하는 경우:

PV(영구 볼륨)

  • Redis 및 MySQL 지속성을 위한 3 RWO(ReadWriteOnce) 영구 볼륨

스토리지

  • Amazon S3 버킷 1개
  • 네트워크 파일 시스템(NFS)

2.1.2. 하드웨어 요구 사항

하드웨어 요구 사항은 사용 요구 사항에 따라 다릅니다. 특정 요구 사항에 맞게 환경을 테스트하고 구성하는 것이 좋습니다. 다음은 OpenShift에서 3scale에 대한 환경을 구성할 때의 권장 사항입니다.

  • 클라우드 환경(AWS c4.2xlarge 또는 Azure Standard_F8)에 배포할 수 있도록 컴퓨팅 최적화된 노드.
  • 메모리 요구 사항이 현재 노드의 사용 가능한 RAM을 초과하는 경우 Redis에 별도의 노드 (AWS M4 시리즈 또는 Azure Av2 시리즈)가 필요할 수 있습니다.
  • 라우팅 작업과 컴퓨팅 작업 간에 노드를 분리합니다.
  • 3scale 특정 작업을 위한 전용 컴퓨팅 노드.
  • 백엔드 리스너의 PUMA_WORKERS 변수를 컴퓨팅 노드의 코어 수로 설정합니다.

2.2. 노드 및 인타이틀먼트 구성

OpenShift에 3scale을 배포하기 전에 필요한 노드와 환경에 대한 자격을 구성하여 Red Hat Ecosystem Catalog 에서 이미지를 가져와야 합니다. 다음 단계를 수행하여 노드 및 인타이틀먼트를 구성합니다.

절차

  1. 각 노드에 RHEL(Red Hat Enterprise Linux)을 설치합니다.
  2. 인터페이스 또는 명령줄을 통해 RHSM(Red Hat Subscription Manager)을 사용하여 Red Hat에 노드를 등록합니다.
  3. RHSM 을 사용하여 3scale 서브스크립션에 노드를 연결합니다.
  4. 노드에 OpenShift를 설치하고 다음 요구 사항을 준수합니다.

  5. OpenShift 명령줄 인터페이스를 설치합니다.
  6. 서브스크립션 관리자를 사용하여 rhel-7-server-3scale-amp-2-rpms 리포지토리에 대한 액세스를 활성화합니다.

    sudo subscription-manager repos --enable=rhel-7-server-3scale-amp-2-rpms
  7. 3scale-amp-template이라는 3scale 템플릿을 설치합니다. 이는 /opt/amp/templates에 저장됩니다.

    sudo yum install 3scale-amp-template

2.2.1. Amazon Simple Storage Service 구성

중요

로컬 파일 시스템 스토리지를 사용하여 3scale을 배포하는 경우 이 섹션을 건너뜁니다.

Amazon Simple Storage Service(Amazon S3) 버킷을 스토리지로 사용하려면 OpenShift에 3scale을 배포할 수 있습니다.

3scale에 대해 Amazon S3 버킷을 구성하려면 다음 단계를 수행합니다.

  1. 다음과 같은 최소한의 권한으로 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:::targetBucketName",
                    "arn:aws:s3:::targetBucketName/*"
                ]
            }
        ]
    }
  2. 다음 규칙을 사용하여 CORS 구성을 생성합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>https://*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
    </CORSConfiguration>

2.3. 템플릿을 사용하여 OpenShift에 3scale 배포

참고

OCP(OpenShift Container Platform) 4.x는 Operator만 사용하여 3scale 배포를 지원합니다. Operator를 사용하여 3scale 배포를 참조하십시오.

사전 요구 사항

  • 노드 및 인타이틀먼트 섹션에 지정된 대로 구성된 OpenShift 클러스터입니다.
  • OpenShift 클러스터로 해석되는 도메인입니다.
  • Red Hat Ecosystem Catalog에 액세스할 수 있습니다.
  • (선택 사항) 로컬 파일 시스템 외부의 콘텐츠 관리 시스템(CMS) 스토리지용 Amazon Simple Storage Service(Amazon S3) 버킷입니다.
  • (선택 사항) PostgreSQL을 사용한 배포입니다.

    • 이는 Openshift의 기본 배포와 동일하지만 PostgreSQL을 내부 시스템 데이터베이스로 사용합니다.
  • (선택 사항) 이메일 기능에 대한 작동하는 SMTP 서버입니다.
참고

템플릿을 사용하여 OpenShift에 3scale 배포는 OpenShift Container Platform 3.11을 기반으로 합니다.

다음 절차에 따라 .yml 템플릿을 사용하여 OpenShift에 3scale을 설치합니다.

2.4. 컨테이너 레지스트리 인증 구성

3scale 관리자는 OpenShift에 3scale 컨테이너 이미지를 배포하기 전에 registry.redhat.io를 사용하여 인증을 구성합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 대한 클러스터 관리자 액세스
  • OpenShift oc 클라이언트 툴이 설치되어 있습니다. 자세한 내용은 OpenShift CLI 설명서를 참조하십시오.

절차

  1. 관리자로 OpenShift 클러스터에 로그인합니다.

    $ oc login -u system:admin
  2. 3scale을 배포하려는 프로젝트를 엽니다.

    oc project your-openshift-project
  3. Red Hat Customer Portal 계정을 사용하여 docker-registry 시크릿을 생성하고 3scale-registry-auth를 시크릿으로 교체하여 다음을 생성할 수 있습니다.

    $ oc create secret docker-registry threescale-registry-auth \
      --docker-server=registry.redhat.io \
      --docker-username=CUSTOMER_PORTAL_USERNAME \
      --docker-password=CUSTOMER_PORTAL_PASSWORD \
      --docker-email=EMAIL_ADDRESS

    다음 출력이 표시됩니다.

    secret/threescale-registry-auth created
  4. 이미지를 가져오는 데 시크릿을 사용하도록 서비스 계정에 시크릿을 연결합니다. 서비스 계정 이름은 OpenShift pod에서 사용하는 이름과 일치해야 합니다. 이 예에서는 default 서비스 계정을 사용합니다.

    $ oc secrets link default threescale-registry-auth --for=pull
  5. 빌드 이미지를 푸시하고 가져오는 데 보안을 사용하도록 builder 서비스 계정에 보안을 연결합니다.

    $ oc secrets link builder threescale-registry-auth

추가 리소스

컨테이너 이미지용 Red Hat으로 인증하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

2.4.1. 레지스트리 서비스 계정 생성

OpenShift에 3scale 2.11이 배포된 공유 환경에서 registry.redhat.io 의 컨테이너 이미지를 사용하려면 개별 사용자의 고객 포털 인증 정보 대신 레지스트리 서비스 계정을 사용해야 합니다.

참고

두 옵션 모두 템플릿 또는 운영자를 통해 OpenShift에 배포하기 전에 아래 설명된 단계를 수행하는 3scale 2.8 이상에서 레지스트리 인증을 사용해야 합니다.

절차

  1. 레지스트리 서비스 계정 페이지로 이동하여 로그인합니다.
  2. 새 서비스 계정을 클릭합니다. 새 레지스트리 서비스 계정 생성 페이지의 양식을 작성합니다.

    1. 서비스 계정의 이름을 추가합니다.

      참고: 양식 필드 앞에 무작위로 생성된 숫자 문자열이 고정 길이로 표시됩니다.

  3. 설명을 입력합니다.
  4. 생성을 클릭합니다.
  5. 서비스 계정으로 다시 이동합니다.
  6. 생성한 서비스 계정을 클릭합니다.
  7. 접두사 문자열(예: 12345678|username) 및 암호를 포함하여 사용자 이름을 기록해 둡니다.

    1. 이 사용자 이름과 암호는 registry.redhat.io에 로그인하는 데 사용됩니다.

      참고

      인증 토큰 사용 방법을 보여주는 토큰 정보 페이지에는 사용 가능한 탭이 있습니다. 예를 들어 토큰 정보 탭에는 12345678|username 형식의 사용자 이름과 그 아래의 암호 문자열이 표시되어 있습니다.

2.4.2. 레지스트리 서비스 계정 수정

서비스 계정을 수정하거나 삭제할 수 있습니다. 이 작업은 표의 각 인증 토큰 오른쪽에 팝업 메뉴를 사용하여 레지스트리 서비스 계정 페이지에서 수행할 수 있습니다.

주의

서비스 계정을 다시 생성 또는 제거해도 registry.redhat.io에서 콘텐츠를 인증하고 검색하는 데 토큰을 사용하는 시스템에 영향을 미칩니다.

각 기능에 대한 설명은 다음과 같습니다.

  • 토큰 다시 생성: 권한 있는 사용자가 서비스 계정과 연결된 암호를 재설정할 수 있도록 허용합니다.

    참고: 서비스 계정의 사용자 이름은 변경할 수 없습니다.

  • 설명 업데이트: 권한 있는 사용자가 서비스 계정에 대한 설명을 업데이트할 수 있도록 허용합니다.
  • 계정 삭제: 권한이 있는 사용자가 서비스 계정을 제거할 수 있도록 허용합니다.

2.4.3. 3scale 템플릿 가져오기

참고
  • 와일드카드 경로가 3scale 2.6에서 제거되었습니다.

    • 이 기능은 백그라운드에서 Zync에 의해 처리됩니다.
  • API 공급자가 생성, 업데이트 또는 삭제되면 경로에 해당 변경 사항이 자동으로 반영됩니다.

3scale 템플릿을 OpenShift 클러스터로 가져오려면 다음 단계를 수행합니다.

절차

  1. 터미널 세션에서 클러스터 관리자로 OpenShift에 로그인합니다.

    oc login
  2. 프로젝트를 선택하거나 새 프로젝트를 생성합니다.

    oc project <project_name>
    oc new-project <project_name>
  3. oc new-app 명령을 입력합니다.

    1. 다운로드한 amp.yml 파일의 경로를 사용하여 노드 및 인타이틀먼트 구성의 일부로 --file 옵션을 지정합니다.
    2. OpenShift 클러스터 도메인으로 설정된 WILDCARD_DOMAIN 매개변수를 사용하여 --param 옵션을 지정합니다.

      oc new-app --file /opt/amp/templates/amp.yml --param WILDCARD_DOMAIN=<WILDCARD_DOMAIN>

      터미널에는 새로 생성된 3scale 관리 포털의 마스터 및 테넌트 URL과 인증 정보가 표시됩니다. 이 출력에는 다음 정보가 포함되어야 합니다.

      • 마스터 관리자 사용자 이름
      • 마스터 암호
      • 마스터 토큰 정보
      • 테넌트 사용자 이름
      • 테넌트 암호
      • 테넌트 토큰 정보
  4. https://user-admin.3scale-project.example.com에 admin/xXXyz123으로 로그인합니다.

    * With parameters:
    
     * ADMIN_PASSWORD=xXxXyz123 # generated
     * ADMIN_USERNAME=admin
     * TENANT_NAME=user
    
     * MASTER_NAME=master
     * MASTER_USER=master
     * MASTER_PASSWORD=xXxXyz123 # generated
    
    --> Success
    Access your application via route 'user-admin.3scale-project.example.com'
    Access your application via route 'master-admin.3scale-project.example.com'
    Access your application via route 'backend-user.3scale-project.example.com'
    Access your application via route 'user.3scale-project.example.com'
    Access your application via route 'api-user-apicast-staging.3scale-project.example.com'
    Access your application via route 'api-user-apicast-production.3scale-project.example.com'
  5. 나중에 참조할 수 있도록 이러한 세부 사항을 기록해 두십시오.
  6. 다음 명령이 반환되면 OpenShift에서 3scale 배포가 성공적으로 배포된 것입니다.

    oc wait --for=condition=available --timeout=-1s $(oc get dc --output=name)
    참고

    OpenShift의 3scale 배포가 성공하면 로그인 인증 정보가 작동합니다.

2.4.4. 관리자 포털 URL 가져오기

템플릿을 사용하여 3scale을 배포할 때 고정 URL을 사용하여 기본 테넌트가 생성됩니다. 3scale-admin.${wildcardDomain}

3scale 대시보드는 테넌트의 새 포털 URL을 보여줍니다. 예를 들어 <wildCardDomain>3scale-project.example.com인 경우 관리자 포털 URL은 https://3scale-admin.3scale-project.example.com입니다.

wildcardDomain은 설치 중에 제공한 <wildCardDomain> 매개변수입니다. 다음 명령을 사용하여 브라우저에서 이 고유한 URL을 엽니다.

xdg-open https://3scale-admin.3scale-project.example.com

필요한 경우 선택 사항으로 MASTER portal URL: master.${wildcardDomain}에서 새 테넌트를 만들 수 있습니다.

2.4.5. Amazon Simple Storage Service로 3scale 배포

Amazon Simple Storage Service(Amazon S3)를 사용하여 3scale을 배포하는 절차는 선택 사항입니다. 다음 단계를 사용하여 Amazon S3로 3scale을 배포합니다.

절차

  1. amp;s3.yml을 다운로드합니다.
  2. 터미널 세션에서 OpenShift에 로그인합니다.

    oc login
  3. 프로젝트를 선택하거나 새 프로젝트를 생성합니다.

    oc project <project_name>

    또는

oc new-project <project_name>
  1. oc new-app 명령을 입력합니다.

    • amp-s3.yml 파일의 경로로 --file 옵션을 지정합니다.
    • 다음 값을 사용하여 --param 옵션을 지정합니다.

      • WILDCARD_DOMAIN: OpenShift 클러스터의 도메인으로 설정된 매개변수입니다.
      • AWS_BUCKET: 대상 버킷 이름
      • AWS_ACCESS_KEY_ID: AWS 인증 정보 ID 사용
      • AWS_SECRET_ACCESS_KEY: AWS 인증 정보 KEY 사용
      • AWS_REGION: AWS: 버킷 리전 사용
      • AWS_HOSTNAME: 기본값: Amazon 끝점 - AWS S3 호환 공급자 끝점 호스트 이름.
      • AWS_PROTOCOL: 기본값: HTTPS - AWS S3 호환 공급자 끝점 프로토콜.
      • AWS_PATH_STYLE: 기본값: false - true로 설정하면 버킷 이름이 요청 URI에 항상 남아 있으며 호스트로 하위 도메인으로 이동하지 않습니다.
    • 필요한 경우 TENANT_NAME 매개 변수로 --param 옵션을 지정하여 Admin Portal의 사용자 지정 이름을 설정합니다. 생략하면 기본값은 3scale입니다.

      oc new-app --file /path/to/amp-s3.yml \
      	--param WILDCARD_DOMAIN=<a-domain-that-resolves-to-your-ocp-cluster.com> \
      	--param TENANT_NAME=3scale \
      	--param AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
      	--param AWS_SECRET_ACCESS_KEY=<your-aws-access-key-secret> \
      	--param AWS_BUCKET=<your-target-bucket-name> \
      	--param AWS_REGION=<your-aws-bucket-region> \
      	--param FILE_UPLOAD_STORAGE=s3

      터미널에는 마스터 및 테넌트 URL과 새로 생성된 3scale 관리 포털의 인증 정보가 표시됩니다. 이 출력에는 다음 정보가 포함되어야 합니다.

    • 마스터 관리자 사용자 이름
    • 마스터 암호
    • 마스터 토큰 정보
    • 테넌트 사용자 이름
    • 테넌트 암호
    • 테넌트 토큰 정보
  2. https://user-admin.3scale-project.example.com에 admin/xXXyz123으로 로그인합니다.

    ...
    
    * With parameters:
     * ADMIN_PASSWORD=xXxXyz123 # generated
     * ADMIN_USERNAME=admin
     * TENANT_NAME=user
     ...
    
     * MASTER_NAME=master
     * MASTER_USER=master
     * MASTER_PASSWORD=xXxXyz123 # generated
     ...
    
    --> Success
    Access your application via route 'user-admin.3scale-project.example.com'
    Access your application via route 'master-admin.3scale-project.example.com'
    Access your application via route 'backend-user.3scale-project.example.com'
    Access your application via route 'user.3scale-project.example.com'
    Access your application via route 'api-user-apicast-staging.3scale-project.example.com'
    Access your application via route 'api-user-apicast-production.3scale-project.example.com'
    Access your application via route 'apicast-wildcard.3scale-project.example.com'
    
    ...
  3. 나중에 참조할 수 있도록 이러한 세부 사항을 기록해 두십시오.
  4. 다음 명령이 반환되면 OpenShift에서 3scale 배포가 성공적으로 배포된 것입니다.

    oc wait --for=condition=available --timeout=-1s $(oc get dc --output=name)
    참고

    OpenShift의 3scale 배포가 성공하면 로그인 인증 정보가 작동합니다.

2.4.6. PostgreSQL을 사용하여 3scale 배포

PostgreSQL을 사용하여 3scale을 배포하는 절차는 선택 사항입니다. 다음 단계를 사용하여 PostgreSQL으로 3scale을 배포합니다.

절차

  1. amp-postgresql.yml 을 다운로드합니다.
  2. 터미널 세션에서 OpenShift에 로그인합니다.

    oc login
  3. 프로젝트를 선택하거나 새 프로젝트를 생성합니다.

    oc project <project_name>

    또는

oc new-project <project_name>
  1. oc new-app 명령을 입력합니다.

    • amp-postgresql.yml 파일의 경로를 사용하여 --file 옵션을 지정합니다.
    • 다음 값을 사용하여 --param 옵션을 지정합니다.
    • WILDCARD_DOMAIN: OpenShift 클러스터의 도메인으로 설정된 매개변수입니다.
    • 필요한 경우 TENANT_NAME 매개 변수로 --param 옵션을 지정하여 Admin Portal의 사용자 지정 이름을 설정합니다. 생략하면 기본값은 3scale입니다.

      oc new-app --file /path/to/amp-postgresql.yml \
      	--param WILDCARD_DOMAIN=<a-domain-that-resolves-to-your-ocp-cluster.com> \
      	--param TENANT_NAME=3scale \

      터미널에는 마스터 및 테넌트 URL과 새로 생성된 3scale 관리 포털의 인증 정보가 표시됩니다. 이 출력에는 다음 정보가 포함되어야 합니다.

    • 마스터 관리자 사용자 이름
    • 마스터 암호
    • 마스터 토큰 정보
    • 테넌트 사용자 이름
    • 테넌트 암호
    • 테넌트 토큰 정보
  2. https://user-admin.3scale-project.example.com에 admin/xXXyz123으로 로그인합니다.

    ...
    
    * With parameters:
     * ADMIN_PASSWORD=xXxXyz123 # generated
     * ADMIN_USERNAME=admin
     * TENANT_NAME=user
     ...
    
     * MASTER_NAME=master
     * MASTER_USER=master
     * MASTER_PASSWORD=xXxXyz123 # generated
     ...
    
    --> Success
    Access your application via route 'user-admin.3scale-project.example.com'
    Access your application via route 'master-admin.3scale-project.example.com'
    Access your application via route 'backend-user.3scale-project.example.com'
    Access your application via route 'user.3scale-project.example.com'
    Access your application via route 'api-user-apicast-staging.3scale-project.example.com'
    Access your application via route 'api-user-apicast-production.3scale-project.example.com'
    Access your application via route 'apicast-wildcard.3scale-project.example.com'
    
    ...
  3. 나중에 참조할 수 있도록 이러한 세부 사항을 기록해 두십시오.
  4. 다음 명령이 반환되면 OpenShift에서 3scale 배포가 성공적으로 배포된 것입니다.

    oc wait --for=condition=available --timeout=-1s $(oc get dc --output=name)
    참고

    OpenShift의 3scale 배포가 성공하면 로그인 및 인증 정보가 작동합니다.

2.4.7. SMTP 변수 구성 (선택 사항)

OpenShift는 이메일을 사용하여 알림을 보내고 새 사용자를 초대합니다. 이러한 기능을 사용하려면 자체 SMTP 서버를 제공하고 system-smtp 시크릿에서 SMTP 변수를 구성해야 합니다.

다음 단계를 수행하여 system-smtp 시크릿에서 SMTP 변수를 구성합니다.

절차

  1. 아직 로그인하지 않은 경우 OpenShift에 로그인합니다.

    oc login
    1. oc patch 명령을 사용하여 secret 유형을 지정합니다. 여기서 system-smtp는 보안의 이름, 그 뒤에 -p 옵션을 사용한 후 다음 변수에 대해 JSON에 새 값을 작성합니다.

      변수설명

      주소

      원격 메일 서버를 릴레이로 지정할 수 있습니다.

      사용자 이름

      메일 서버 사용자 이름 지정

      암호

      메일 서버 암호 지정

      domain

      HELO 도메인 지정

      port

      메일 서버가 새 연결을 수신 대기하는 포트를 지정합니다.

      인증

      메일 서버의 인증 유형을 지정합니다. 허용되는 값: plain (암호를 일반 상태로 전송), login (Base64로 인코딩된 암호 전송) 또는 cram_md5 (정보 교환 및 중요한 정보를 해시하는 암호화 Message Digest 5 알고리즘)

      openssl.verify.mode

      TLS를 사용할 때 OpenSSL이 인증서를 확인하는 방법을 지정합니다. 허용되는 값: none 또는 peer.

      예제

      oc patch secret system-smtp -p '{"stringData":{"address":"<your_address>"}}'
      oc patch secret system-smtp -p '{"stringData":{"username":"<your_username>"}}'
      oc patch secret system-smtp -p '{"stringData":{"password":"<your_password>"}}'
  2. 보안 변수를 설정한 후 system-appsystem-sidekiq Pod를 재배포합니다.

    oc rollout latest dc/system-app
    oc rollout latest dc/system-sidekiq
  3. 롤아웃 상태를 확인하여 완료되었는지 확인합니다.

    oc rollout status dc/system-app
    oc rollout status dc/system-sidekiq

2.5. 3scale 템플릿의 매개변수

템플릿 매개 변수는 배포 중 및 배포 후 3scale(amp.yml) 템플릿의 환경 변수를 구성합니다.

표 2.1. 템플릿 매개변수

이름설명기본값필수 여부

APP_LABEL

오브젝트 앱 레이블에 사용됨

3scale-api-management

제공됨

ZYNC_DATABASE_PASSWORD

PostgreSQL 연결 사용자의 암호입니다. 제공되지 않는 경우 임의로 생성됩니다.

해당 없음

제공됨

ZYNC_SECRET_KEY_BASE

Zync의 secret 키 기반입니다. 제공되지 않는 경우 임의로 생성됩니다.

해당 없음

제공됨

ZYNC_AUTHENTICATION_TOKEN

Zync에 대한 인증 토큰입니다. 제공되지 않는 경우 임의로 생성됩니다.

해당 없음

제공됨

AMP_RELEASE

3scale 릴리스 태그입니다.

2.11.0

제공됨

ADMIN_PASSWORD

임의로 생성된 3scale 관리자 계정 암호입니다.

해당 없음

제공됨

ADMIN_USERNAME

3scale 관리자 계정 사용자 이름입니다.

admin

제공됨

APICAST_ACCESS_TOKEN

APIcast가 구성을 다운로드하는 데 사용할 액세스 토큰만 읽습니다.

해당 없음

제공됨

ADMIN_ACCESS_TOKEN

API 액세스에 대한 모든 범위 및 쓰기 권한이 있는 관리자 액세스 토큰입니다.

해당 없음

제공되지 않음

WILDCARD_DOMAIN

와일드카드 경로의 루트 도메인. 예를 들어 루트 도메인 example.com3scale-admin.example.com을 생성합니다.

해당 없음

제공됨

TENANT_NAME

-admin 접미사를 사용하여 관리 포털을 사용할 수 있는 루트 아래의 테넌트 이름입니다.

3scale

제공됨

MYSQL_USER

데이터베이스 액세스에 사용할 MySQL 사용자의 사용자 이름입니다.

mysql

제공됨

MYSQL_PASSWORD

MySQL 사용자의 암호입니다.

해당 없음

제공됨

MYSQL_DATABASE

액세스한 MySQL 데이터베이스의 이름입니다.

system

제공됨

MYSQL_ROOT_PASSWORD

root 사용자의 암호입니다.

해당 없음

제공됨

SYSTEM_BACKEND_USERNAME

내부 3scale api auth의 내부 3scale API 사용자 이름입니다.

3scale_api_user

제공됨

SYSTEM_BACKEND_PASSWORD

내부 3scale api auth의 내부 3scale API 암호입니다.

해당 없음

제공됨

REDIS_IMAGE

사용할 Redis 이미지

registry.redhat.io/rhscl/redis-5-rhel7:5.0

제공됨

MYSQL_IMAGE

사용할 Mysql 이미지

registry.redhat.io/rhscl/mysql-57-rhel7:5.7

제공됨

MEMCACHE_SERVERS

콤마로 구분된 memcache 서버의 문자열, system-* pod에서 사용할 memcache 서버 링을 생성합니다.

system-memcache:11211

제공됨

예를 들어 다음과 같습니다. MEMCACHE_SERVERS="cache-1.us-east.domain.com:11211,cache-3.east.domain.com:11211,cache-2.us-east.domain.com:11211"

MEMCACHED_IMAGE

사용할 Memcached 이미지

registry.redhat.io/3scale-amp2/memcached-rhel7:3scale2.11

제공됨

POSTGRESQL_IMAGE

사용할 Postgresql 이미지

registry.redhat.io/rhscl/postgresql-10-rhel7

제공됨

AMP_SYSTEM_IMAGE

사용할 3scale 시스템 이미지

registry.redhat.io/3scale-amp2/system-rhel7:3scale2.11

제공됨

AMP_BACKEND_IMAGE

사용할 3scale 백엔드 이미지

registry.redhat.io/3scale-amp2/backend-rhel7:3scale2.11

제공됨

AMP_APICAST_IMAGE

사용할 3scale APIcast 이미지

registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.11

제공됨

AMP_ZYNC_IMAGE

사용할 3scale Zync 이미지

registry.redhat.io/3scale-amp2/zync-rhel7:3scale2.11

제공됨

SYSTEM_BACKEND_SHARED_SECRET

백엔드에서 시스템으로 이벤트를 가져오는 공유 시크릿입니다.

해당 없음

제공됨

SYSTEM_APP_SECRET_KEY_BASE

시스템 애플리케이션 시크릿 키 기반

해당 없음

제공됨

APICAST_MANAGEMENT_API

APIcast Management API의 범위입니다. disabled, status, debug일 수 있습니다. 상태 검사에는 최소한 상태가 필요합니다.

status

제공되지 않음

APICAST_OPENSSL_VERIFY

설정을 다운로드할 때 OpenSSL 피어 확인을 켜거나 끕니다. true/false로 설정할 수 있습니다.

false

제공되지 않음

APICAST_RESPONSE_CODES

APIcast에서 응답 코드 로깅을 활성화합니다.

true

제공되지 않음

APICAST_REGISTRY_URL

APIcast 정책의 위치로 확인되는 URL

http://apicast-staging:8090/policies

제공됨

MASTER_USER

마스터 관리자 계정 사용자 이름

master

제공됨

MASTER_NAME

마스터 관리 포털의 하위 도메인 값에는 -master 접미사가 추가됩니다.

master

제공됨

MASTER_PASSWORD

임의로 생성된 마스터 관리자 암호

해당 없음

제공됨

MASTER_ACCESS_TOKEN

API 호출에 대한 마스터 수준 권한이 있는 토큰

해당 없음

제공됨

IMAGESTREAM_TAG_IMPORT_INSECURE

서버가 인증서 확인을 바이패스하거나 이미지 가져오기 중에 HTTP를 통해 직접 연결할 수 있는 경우 true로 설정합니다.

false

제공됨

2.6. Operator를 사용하여 3scale 배포

이 섹션에서는 APIManager 사용자 지정 리소스를 사용하여 3scale Operator를 통해 3scale 솔루션을 설치하고 배포하는 방법을 설명합니다.

참고
  • 3scale 2.6 이후 와일드카드 경로가 제거되었습니다.

    • 이 기능은 백그라운드에서 Zync에 의해 처리됩니다.
  • API 공급자가 생성, 업데이트 또는 삭제되면 경로에 해당 변경 사항이 자동으로 반영됩니다.

사전 요구 사항

다음 절차에 따라 Operator를 사용하여 3scale을 배포합니다.

2.6.1. APIManager 사용자 정의 리소스 배포

APIManager 사용자 지정 리소스를 배포하면 Operator가 처리를 시작하고 해당 리소스에서 3scale 솔루션을 배포합니다.

절차

  1. Operators > 설치된 Operators를 클릭합니다.

    1. 설치된 Operator 목록에서 3scale Operator를 클릭합니다.
  2. API Manager 탭을 클릭합니다.
  3. APIManager 생성을 클릭합니다.
  4. 샘플 콘텐츠를 지우고 편집기에 다음 YAML 정의를 추가한 다음 생성 을 클릭합니다.

    • 3scale 2.8 이전에는 highAvailability 필드를 true 로 설정하여 복제본을 자동으로 추가할 수 있습니다. 3scale 2.8의 다음 예와 같이 복제본 추가는 APIManager CR의 replicas 필드를 통해 제어됩니다.

      참고

      wildcardDomain 매개변수는 유효한 DNS 도메인인 IP 주소로 확인되는 제공할 원하는 이름일 수 있습니다.

    • 최소 요구사항이 있는 APIManager CR:

      apiVersion: apps.3scale.net/v1alpha1
      kind: APIManager
      metadata:
        name: apimanager-sample
      spec:
        wildcardDomain: example.com
    • 복제본이 구성된 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

2.6.2. APIManager 관리 포털 및 마스터 관리자 포털 인증 정보 가져오기

운영자 기반 배포 후 3scale 관리 포털 또는 마스터 관리 포털에 로그인하려면 별도의 각 포털에 대한 인증 정보가 필요합니다. 다음 인증 정보를 얻으려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 관리 포털 인증 정보를 가져옵니다.

    oc get secret system-seed -o json | jq -r .data.ADMIN_USER | base64 -d
    oc get secret system-seed -o json | jq -r .data.ADMIN_PASSWORD | base64 -d
    1. 관리 포털 관리자로 로그인하여 이러한 인증 정보가 작동하는지 확인합니다.
  2. 다음 명령을 실행하여 마스터 관리자 포털 자격 증명을 가져옵니다.

    oc get secret system-seed -o json | jq -r .data.MASTER_USER | base64 -d
    oc get secret system-seed -o json | jq -r .data.MASTER_PASSWORD | base64 -d
    1. 마스터 관리 포털 관리자로 로그인하여 이러한 인증 정보가 작동하는지 확인합니다.

추가 리소스

APIManager 필드에 대한 자세한 내용은 참조 설명서를 참조하십시오.

2.6.3. 관리자 포털 URL 가져오기

Operator를 사용하여 3scale을 배포할 때 고정 URL을 사용하여 기본 테넌트가 생성됩니다. 3scale-admin.${wildcardDomain}

3scale 대시보드는 테넌트의 새 포털 URL을 보여줍니다. 예를 들어 < wildCardDomain >이 3scale-project.example.com 인 경우 관리 포털 URL은 https://3scale-admin.3scale-project.example.com 입니다.

wildcardDomain은 설치 중에 제공한 <wildCardDomain> 매개변수입니다. 다음 명령을 사용하여 브라우저에서 이 고유한 URL을 엽니다.

xdg-open https://3scale-admin.3scale-project.example.com

필요한 경우 선택 사항으로 MASTER portal URL: master.${wildcardDomain}에서 새 테넌트를 만들 수 있습니다.

2.6.4. 마이크로 릴리스의 자동화된 애플리케이션 구성

마이크로 릴리스 업데이트를 가져와 자동으로 적용하려면 3scale Operator의 승인 전략을 자동으로 설정해야 합니다. 다음에서는 자동 설정과 수동 설정의 차이점을 설명하고 절차의 단계를 간략하게 설명합니다.

자동 및 수동:

  • 설치하는 동안 자동 설정은 기본적으로 선택한 옵션입니다. 새 업데이트의 설치는 사용 가능할 때 발생합니다. 설치하는 동안에 또는 나중에 언제든지 변경할 수 있습니다.
  • 설치 중 또는 설치 후 수동 옵션을 선택하면 언제든지 사용 가능한 업데이트를 받게 됩니다. 다음으로 설치 계획을 승인하고 직접 적용해야 합니다.

절차

  1. Operators > 설치된 Operators를 클릭합니다.
  2. 설치된 Operator 목록에서 3scale API Management를 클릭합니다.
  3. 서브스크립션 탭을 클릭합니다. 서브스크립션 세부 정보 제목 아래에 해당 승인이 표시됩니다.
  4. 승인 아래 링크를 클릭합니다. 이 링크는 기본적으로 자동으로 설정됩니다. 업데이트 승인 전략 변경이라는 제목이 있는 모달이 표시됩니다.
  5. 기본 설정 옵션을 선택합니다. 자동(기본값) 또는 수동을 클릭한 다음 저장을 클릭합니다.

추가 리소스

2.6.5. Operator를 사용하여 3scale의 고가용성

연산자를 사용하는 3scale의 고가용성(HA)은 예를 들어 하나 이상의 데이터베이스가 실패하는 경우 중단없는 가동 시간을 제공하는 것을 목표로 합니다.

3scale Operator 기반 배포에서 HA를 사용하려면 다음 사항에 유의하십시오.

  • 3scale 중요 데이터베이스, 특히 시스템 데이터베이스, 시스템 redis 및 백엔드 redis를 외부에 배포 및 구성합니다. 데이터베이스를 고가용성으로 배포하고 구성해야 합니다.
  • 해당 Kubernetes 보안을 사전 생성하여 3scale의 데이터베이스에 대한 연결 끝점을 지정합니다.

  • 중요한 데이터베이스의 외부 데이터베이스(system database, system redis, backend redis)를 활성화하려면 APIManager CR을 배포할 때 .spec.highAvailability.enabled 속성을 true로 설정합니다.

또한 zync 데이터베이스를 다시 시작할 때 큐 작업 데이터가 손실되는 것을 방지하기 위해 zync 데이터베이스를 고가용성으로 설정하려면 다음 사항에 유의하십시오.

  • 외부에서 zync 데이터베이스를 배포하고 구성합니다. 데이터베이스를 고가용성으로 배포하고 구성해야 합니다.
  • 해당 Kubernetes 보안을 사전 생성하여 3scale의 zync 데이터베이스에 대한 연결 끝점을 지정합니다.

  • spec.highAvailability.externalZyncDatabaseEnabled 속성을 true로 설정하여 zync 데이터베이스를 외부 데이터베이스로 지정합니다.

2.7. Operator를 사용하여 OpenShift에서 3scale에 대한 배포 구성 옵션

이 섹션에서는 Operator를 사용하여 OpenShift에서 Red Hat 3scale API Management의 배포 구성 옵션에 대해 설명합니다.

사전 요구 사항

2.7.1. 내장된 APIcast에 대한 프록시 매개변수 구성

3scale 관리자는 내장된 APIcast 준비 및 프로덕션에 대한 프록시 매개변수를 구성할 수 있습니다. 이 섹션에서는 APIManager 사용자 정의 리소스에서 프록시 매개변수를 지정하는 데 필요한 참조 정보를 제공합니다. 즉, 3scale 연산자( APIManager 사용자 정의 리소스)를 사용하여 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

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

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

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

2.7.2. 3scale Operator를 사용하여 사용자 지정 환경 삽입

포함된 APIcast를 사용하는 3scale 설치에서는 3scale 연산자를 사용하여 사용자 정의 환경을 삽입할 수 있습니다. 임베디드 APIcast는 관리 또는 호스팅 APIcast라고도 합니다. 사용자 지정 환경은 게이트웨이가 제공하는 모든 업스트림 API에 APIcast가 적용되는 동작을 정의합니다. 사용자 지정 환경을 만들려면 Lua 코드에서 글로벌 구성을 정의합니다.

3scale 설치 전이나 후에 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경을 삽입한 후 3scale 설치 후 사용자 지정 환경을 제거할 수 있습니다. 3scale Operator는 변경 사항을 조정합니다.

사전 요구 사항

  • 3scale Operator가 설치되어 있습니다.

절차

  1. 삽입할 사용자 지정 환경을 정의하는 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 },
    }
  2. 사용자 지정 환경을 정의하는 Lua 파일에서 시크릿을 생성합니다. 예를 들어 다음과 같습니다.

    oc create secret generic custom-env-1 --from-file=./env1.lua

    시크릿에는 여러 사용자 지정 환경이 포함될 수 있습니다. 사용자 지정 환경을 정의하는 각 파일에 대해 '-from-file 옵션을 지정합니다. Operator는 각 사용자 지정 환경을 로드합니다.

  3. 방금 생성한 시크릿을 참조하는 APIManager 사용자 정의 리소스를 정의합니다. 다음 예제에서는 사용자 지정 환경을 정의하는 시크릿을 참조하는 상대적 콘텐츠만 보여줍니다.

    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

    APIManager 사용자 정의 리소스는 사용자 지정 환경을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 환경을 로드합니다.

  4. 사용자 지정 환경을 추가하는 APIManager 사용자 정의 리소스를 생성합니다. 예를 들어 다음과 같습니다.

    oc apply -f apimanager.yaml

다음 단계

사용자 지정 환경을 정의하는 보안의 콘텐츠를 업데이트할 수 없습니다. 사용자 지정 환경을 업데이트해야 하는 경우 다음 중 하나를 수행할 수 있습니다.

  • 권장 옵션은 다른 이름으로 시크릿을 생성하고 APIManager 사용자 정의 리소스 필드, customEnvironments[].secretRef.name 을 업데이트하는 것입니다. Operator는 롤링 업데이트를 트리거하고 업데이트된 사용자 지정 환경을 로드합니다.
  • 또는 spec.apicast.productionSpec.replicas 또는 spec.apicast.stagingSpec.replicas 를 0으로 설정한 다음 spec.apicast.productionSpec.replicas 또는 spec.apicast.stagingSpec.replicas 를 이전 값으로 설정하여 APIcast를 다시 배포하여 기존 보안을 업데이트할 수 있습니다.

2.7.3. 3scale Operator를 사용하여 사용자 정의 정책 삽입

내장 APIcast를 사용하는 3scale 설치에서는 3scale Operator를 사용하여 사용자 지정 정책을 삽입할 수 있습니다. 임베디드 APIcast는 관리 또는 호스팅 APIcast라고도 합니다. 사용자 지정 정책을 삽입하면 정책 코드가 APIcast에 추가됩니다. 그런 다음 다음 중 하나를 사용하여 API 제품의 정책 체인에 사용자 지정 정책을 추가할 수 있습니다.

  • 3scale API
  • Product 사용자 정의 리소스

3scale 관리 포털을 사용하여 제품의 정책 체인에 사용자 지정 정책을 추가하려면 사용자 지정 정책의 스키마를 CustomPolicyDefinition 사용자 지정 리소스에 등록해야 합니다. 사용자 지정 정책 등록은 관리 포털을 사용하여 제품의 정책 체인을 구성하려는 경우에만 필요합니다.

3scale 설치 후 또는 의 일부로 사용자 지정 정책을 삽입할 수 있습니다. 사용자 지정 정책을 삽입한 후 3scale 설치 후 APIManager CR에서 사양을 제거하여 사용자 지정 정책을 제거할 수 있습니다. 3scale Operator는 변경 사항을 조정합니다.

사전 요구 사항

  • 3scale Operator를 설치하거나 이전에 설치했습니다.
  • 자체 정책 쓰기에 설명된 대로 사용자 지정 정책을 정의했습니다. 즉, 사용자 지정 정책을 정의하는 my-policy.lua, apicast-policy.json, init.lua 파일이 이미 생성되었습니다.

절차

  1. 하나의 사용자 지정 정책을 정의하는 파일에서 시크릿을 생성합니다. 예를 들어 다음과 같습니다.

    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

    사용자 지정 정책이 두 개 이상 있는 경우 각 사용자 지정 정책에 대한 보안을 생성합니다. 보안에는 하나의 사용자 지정 정책만 포함될 수 있습니다.

  2. 사용자 지정 정책이 포함된 각 보안을 참조하는 APIManager 사용자 지정 리소스를 정의합니다. 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

    APIManager 사용자 정의 리소스는 다른 사용자 지정 정책을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 정책을 로드합니다.

  3. 사용자 지정 정책이 포함된 보안을 참조하는 APIManager 사용자 지정 리소스를 생성합니다. 예를 들어 다음과 같습니다.

    oc apply -f apimanager.yaml

다음 단계

사용자 정의 정책을 정의하는 시크릿 콘텐츠를 업데이트할 수 없습니다. 사용자 지정 정책을 업데이트해야 하는 경우 다음 중 하나를 수행할 수 있습니다.

  • 권장 옵션은 다른 이름으로 시크릿을 생성하고 새 시크릿을 참조하도록 APIManager 사용자 지정 리소스 customPolicies 섹션을 업데이트하는 것입니다. Operator는 롤링 업데이트를 트리거하고 업데이트된 사용자 지정 정책을 로드합니다.
  • 또는 spec.apicast.productionSpec.replicas 또는 spec.apicast.stagingSpec.replicas 를 0으로 설정한 다음 spec.apicast.productionSpec.replicas 또는 spec.apicast.stagingSpec.replicas 를 이전 값으로 설정하여 APIcast를 다시 배포하여 기존 보안을 업데이트할 수 있습니다.

2.7.4. 3scale Operator로 OpenTracing 구성

내장 APIcast를 사용하는 3scale 설치에서는 3scale Operator를 사용하여 OpenTracing을 구성할 수 있습니다. 스테이징 또는 프로덕션 환경에서 또는 두 환경 모두에서 OpenTracing을 구성할 수 있습니다. OpenTracing을 활성화하면 APIcast 인스턴스에 대한 더 많은 통찰력과 가시성을 얻을 수 있습니다.

절차

  1. 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
  2. 시크릿을 생성합니다. 예를 들어 이전 시크릿 정의를 myjaeger.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc create secret generic myjaeger --from-file myjaeger.yaml
  3. OpenTracing 특성을 지정하는 APIManager 사용자 지정 리소스를 정의합니다. 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
  4. OpenTracing을 구성하는 APIManager 사용자 지정 리소스를 만듭니다. 예를 들어 APIManager 사용자 정의 리소스를 apimanager1.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc apply -f apimanager1.yaml

다음 단계

OpenTracing이 설치된 방법에 따라 Jaeger 서비스 사용자 인터페이스에 추적이 표시되어야 합니다.

2.7.5. 3scale Operator를 사용하여 Pod 수준에서 TLS 활성화

3scale은 두 개의 APIcast 인스턴스를 배포합니다. 하나는 프로덕션용이고 다른 하나는 스테이징용입니다. 프로덕션 또는 스테이징만 또는 두 인스턴스에만 TLS를 활성화할 수 있습니다.

사전 요구 사항

  • TLS를 활성화하는 데 유효한 인증서입니다.

절차

  1. 유효한 인증서에서 보안을 생성합니다. 예를 들면 다음과 같습니다.

    oc create secret tls mycertsecret --cert=server.crt --key=server.key

    구성에서 APIManager CRD에 보안 참조를 노출합니다. 시크릿을 생성한 다음 다음과 같이 APIManager 사용자 정의 리소스에서 시크릿 이름을 참조합니다.

    • 제품 이름: APIManager CR은 .spec.apicast.productionSpec.httpsCertificateSecretRef 필드에 인증서를 노출합니다.
    • 스테이징: APIManager CR은 .spec.apicast.stagingSpec.httpsCertificateSecretRef 필드에 인증서를 노출합니다.

      선택적으로 다음을 구성할 수 있습니다.

    • httpsPort 는 HTTPS 연결에서 수신 대기해야 하는 포트 APIcast를 나타냅니다. HTTP 포트 APIcast가 충돌하면 이 포트는 HTTPS용으로만 사용됩니다.
    • httpsVerifyDepth 는 클라이언트 인증서 체인의 최대 길이를 정의합니다.

      참고

      APImanager CR에서 유효한 인증서 및 참조를 제공합니다. 구성에서 httpsPort 에 액세스할 수 있지만 httpsCertificateSecretRef 는 액세스할 수 없는 경우 APIcast는 포함된 자체 서명된 인증서를 사용합니다. 이는 권장되지 않습니다.

  2. Operators > 설치된 Operators를 클릭합니다.
  3. 설치된 Operator 목록에서 3scale Operator를 클릭합니다.
  4. API Manager 탭을 클릭합니다.
  5. APIManager 생성을 클릭합니다.
  6. 편집기에 다음 YAML 정의를 추가합니다.

    1. 프로덕션에 대해 활성화하는 경우 다음 YAML 결함을 구성합니다.

      spec:
        apicast:
          productionSpec:
            httpsPort: 8443
            httpsVerifyDepth: 1
            httpsCertificateSecretRef:
              name: mycertsecret
    2. 스테이징 을 위해 활성화하는 경우 다음 YAML 결함을 구성합니다.

      spec:
        apicast:
          stagingSpec:
            httpsPort: 8443
            httpsVerifyDepth: 1
            httpsCertificateSecretRef:
              name: mycertsecret
  7. 생성을 클릭합니다.

2.7.6. 평가 배포에 대한 개념 증명

다음 섹션에서는 3scale 평가 배포에 대한 개념 증명에 적용되는 구성 옵션에 대해 설명합니다. 이 배포에서는 내부 데이터베이스를 기본값으로 사용합니다.

중요

외부 데이터베이스의 구성은 프로덕션 환경의 표준 배포 옵션입니다.

2.7.6.1. 기본 배포 구성

  • 컨테이너에 Kubernetes 리소스 제한 및 요청이 있습니다.

    • 이는 최소 성능 수준을 보장합니다.
    • 리소스를 제한하여 외부 서비스 및 솔루션 할당을 허용합니다.
  • 내부 데이터베이스를 배포합니다.
  • 파일 스토리지는 지속성 볼륨(PV)을 기반으로 합니다.

    • 하나는 읽기, 쓰기, 실행(RWX) 액세스 모드가 필요합니다.
    • OpenShift는 요청 시 이를 제공하도록 구성되어 있습니다.
  • MySQL을 내부 관계형 데이터베이스로 배포합니다.

기본 구성 옵션은 PoC(Proof of concept) 또는 고객의 평가에 적합합니다.

APIManager 사용자 정의 리소스의 특정 필드 값으로 기본 구성 옵션 중 하나 또는 모든 기본 구성 옵션을 재정의할 수 있습니다. 3scale 연산자를 사용하면 모든 사용 가능한 조합을 사용할 수 있지만 템플릿은 고정 배포 프로필을 허용합니다. 예를 들어 3scale 연산자를 사용하면 평가 모드 및 외부 데이터베이스 모드에서 3scale을 배포할 수 있습니다. 템플릿에서는 이러한 특정 배포 구성을 허용하지 않습니다. 템플릿은 가장 일반적인 구성 옵션에서만 사용할 수 있습니다.

2.7.6.2. 평가 설치

평가 설치의 경우 컨테이너에 kubernetes 리소스 제한 및 요청이 지정되지 않습니다. 예를 들어 다음과 같습니다.

  • 작은 메모리 공간
  • 빠른 시작
  • 랩탑에서 실행 가능
  • 사전 판매 / 판매 데모에 적합
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  resourceRequirementsEnabled: false

추가 리소스

  • 자세한 내용은 APIManager 사용자 정의 리소스를 참조하십시오.

2.7.7. 외부 데이터베이스 설치

외부 데이터베이스 설치는 고가용성(HA)이 요구 사항이거나 자체 데이터베이스를 재사용할 계획인 프로덕션 용도에 적합합니다.

중요

3scale 외부 데이터베이스 설치 모드를 활성화하면 다음 모든 데이터베이스가 외부화됩니다.

  • backend-redis
  • system-redis
  • system-database (mysql,postgresql 또는 Oracle)

3scale 2.8 이상은 다음 데이터베이스 버전에서 지원됩니다.

데이터베이스버전

Redis

5.0

MySQL

5.7

PostgreSQL

10.6

3scale을 배포하기 위해 APIManager 사용자 지정 리소스를 생성하기 전에 OpenShift 시크릿을 사용하여 외부 데이터베이스에 대해 다음 연결 설정을 제공해야 합니다.

2.7.7.1. 백엔드 Redis 시크릿

다음 예와 같이 두 개의 외부 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

시크릿 이름은 backend-redis 여야 합니다.

2.7.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"
  NAMESPACE: ""
  MESSAGE_BUS_URL: "redis://system-redis-messagebus"
  MESSAGE_BUS_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
  MESSAGE_BUS_SENTINEL_ROLE: "master"
  MESSAGE_BUS_NAMESPACE: ""
type: Opaque

시크릿이름은 system-redis 여야 합니다.

2.7.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

PostgreSQL 시스템 데이터베이스 시크릿

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

참고
  • Oracle 시스템 사용자는 시스템 권한으로 명령을 실행합니다. 일부는 이 GitHub 리포지토리에 자세히 설명되어 있습니다. 데이터베이스에서 테이블을 초기화할 때 Oracle 데이터베이스 이니셜라이저 에서 최신을 실행할 수 있습니다. 이러한 링크에 나열되지 않은 다른 명령이 있을 수 있습니다.
  • 스키마 마이그레이션을 실행할 때 업그레이드에는 시스템 사용자가 필요하므로 이전 링크에 포함되지 않은 다른 명령이 실행될 수 있습니다.
  • 면책 조항: 외부 웹 사이트에 대한 이 노트에 포함된 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 Red Hat이 외부 사이트 또는 콘텐츠의 사용 (또는 신뢰)으로 인해 발생할 수 있는 어떠한 손실이나 비용에 대해 책임을 지지 않습니다.

2.7.7.4. Zync 데이터베이스 시크릿

zync 데이터베이스 설정에서 HighAvailability가 활성화되고 externalZyncDatabaseEnabled 필드도 활성화된 경우 사용자는 zync라는 시크릿을 사전 생성해야 합니다. 그런 다음, DATABASE_URLDATABASE_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

2.7.7.5. 3scale을 배포하기 위한 APIManager 사용자 정의 리소스

참고
  • highAvailability 를 활성화하면 backend-redis,system-redissystem-database 시크릿을 사전 생성해야 합니다.
  • highAvailabilityexternalZyncDatabaseEnabled 필드를 함께 활성화하면 zync 데이터베이스 시크릿을 사전 생성해야 합니다.

    • system-database 의 경우 외부화할 하나의 데이터베이스 유형만 선택합니다.

APIManager 사용자 정의 리소스의 구성은 3scale 배포 외부에 있는 데이터베이스 선택 여부에 따라 달라집니다.

백엔드 Redis, 시스템 Redis 및 시스템 데이터베이스가 3scale 외부에 있는 경우 APIManager 사용자 정의 리소스에 highAvailabilitytrue 로 설정되어야 합니다. 다음 예제를 참조하십시오.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  highAvailability:
    enabled: true

zync 데이터베이스가 외부인 경우 APIManager 사용자 지정 리소스에 highAvailabilitytrue 로 설정되어야 하며 externalZyncDatabaseEnabledtrue 로 설정해야 합니다. 다음 예제를 참조하십시오.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  highAvailability:
    enabled: true
    externalZyncDatabaseEnabled: true

2.7.8. Amazon Simple Storage Service 3scale Filestorage 설치

다음 예제에서는 PVC(영구 볼륨 클레임) 대신 Amazon Simple Storage Service(Amazon S3)를 사용하여 3scale FileStorage를 보여줍니다.

3scale을 배포하기 위해 APIManager 사용자 지정 리소스를 생성하기 전에 openshift 시크릿을 사용하여 S3 서비스에 대한 연결 설정을 제공해야 합니다.

2.7.8.1. Amazon S3 시크릿

참고

AWS S3 호환 공급자는 AWS_HOSTNAME,AWS_PATH_STYLE, AWS_PROTOCOL 선택 키를 사용하여 S3 시크릿에 구성할 수 있습니다. 자세한 내용은 S3 시크릿 참조를 확인하십시오.

다음 예에서 Secret 이름은 APIManager 사용자 정의 리소스에서 참조되므로 무엇이든 될 수 있습니다.

kind: Secret
metadata:
  creationTimestamp: null
  name: aws-auth
stringData:
  AWS_ACCESS_KEY_ID: 123456
  AWS_SECRET_ACCESS_KEY: 98765544
  AWS_BUCKET: mybucket.example.com
  AWS_REGION: eu-west-1
type: Opaque
참고

Amazon S3 리전 및 Amazon S3 버킷 설정은 APIManager 사용자 정의 리소스에서 직접 제공됩니다. Amazon S3 시크릿 이름은 APIManager 사용자 정의 리소스에서 직접 제공됩니다.

마지막으로 APIManager 사용자 정의 리소스를 생성하여 3scale을 배포합니다.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  system:
    fileStorage:
      simpleStorageService:
        configurationSecretRef:
          name: aws-auth

참조를 위해 APIManager SystemS3Spec을 확인합니다.

2.7.9. PostgreSQL 설치

MySQL 내부 관계형 데이터베이스는 기본 배포입니다. 이 배포 구성은 대신 PostgreSQL을 사용하도록 재정의할 수 있습니다.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  system:
    database:
      postgresql: {}

추가 리소스

2.7.10. 구성 요소 수준에서 컴퓨팅 리소스 요구 사항 사용자 정의

APIManager 사용자 정의 리소스 속성을 통해 3scale 솔루션의 Kubernetes Compute 리소스 요구 사항을 사용자 정의합니다. 이 작업을 수행하여 특정 APIManager 구성 요소에 할당된 CPU 및 메모리인 컴퓨팅 리소스 요구 사항을 사용자 정의합니다.

다음 예제에서는 backend-listenerzync-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:
      providerContainerResources:
        requests:
          memory: "111Mi"
          cpu: "222m"
        limits:
          memory: "333Mi"
          cpu: "444m"
  zync:
    databaseResources:
      requests:
        memory: "111Mi"
        cpu: "222m"
      limits:
        memory: "333Mi"
        cpu: "444m"

추가 리소스

구성 요소 수준 사용자 정의 리소스 요구 사항을 지정하는 방법에 대한 자세한 내용은 APIManager CRD 참조를 확인하십시오.

2.7.10.1. 기본 APIManager 구성 요소 컴퓨팅 리소스

APIManager spec.resourceRequirementsEnabled 속성을 true 로 구성하면 기본 컴퓨팅 리소스가 APIManager 구성 요소에 대해 설정됩니다.

APIManager 구성 요소에 설정된 특정 컴퓨팅 리소스 기본값이 다음 표에 표시되어 있습니다.

2.7.10.1.1. CPU 및 메모리 단위

다음 목록에서는 컴퓨팅 리소스 기본값 표에 언급된 단위를 설명합니다. CPU 및 메모리 유닛에 대한 자세한 내용은 Managing Resources for Containers 를 참조하십시오.

리소스 단위 설명

  • m - milliCPU 또는 millicore
  • Mi - 메비 바이트
  • GI - 기비바이트
  • G - 기가바이트

표 2.2. 컴퓨팅 리소스 기본값

구성 요소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-sphinx

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

50m

150m

40Mi

80Mi

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

2.7.11. 구성 요소 수준에서 노드 유사성 및 허용 오차 사용자 정의

APIManager 사용자 정의 리소스 속성을 통해 Red Hat 3scale API Management 솔루션의 Kubernetes 유사성 및 허용 항목을 사용자 지정하여 설치의 다양한 3scale 구성 요소가 Kubernetes 노드에 예약되는 위치와 방법을 사용자 지정합니다. https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/

다음 예제에서는 백엔드에 대한 사용자 정의 노드 유사성을 설정합니다. 또한 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

추가 리소스

선호도 및 허용 오차와 관련된 전체 속성 목록은 APIManager CDR 참조 를 참조하십시오.

2.7.12. 조정

3scale Operator가 설치되면 3scale Operator에서 지정된 매개변수 세트를 사용자 정의 리소스에서 업데이트하여 시스템 구성 옵션을 수정할 수 있습니다. 시스템을 중지하거나 종료하지 않고 핫 스와핑을 통해 수정이 수행됩니다.

APIManager CRD(사용자 정의 리소스 정의)의 매개 변수가 모두 조정 가능한 것은 아닙니다.

다음은 조정 가능한 매개변수 목록입니다.

2.7.12.1. 리소스

모든 3scale 구성 요소에 대한 리소스 제한 및 요청

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  ResourceRequirementsEnabled: true/false

2.7.12.2. 백엔드 복제본

백엔드 구성 요소 pod 수입니다.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  backend:
    listenerSpec:
      replicas: X
    workerSpec:
      replicas: Y
    cronSpec:
      replicas: Z

2.7.12.3. APIcast 복제본

APIcast 스테이징 및 프로덕션 구성 요소 Pod 수입니다.

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  apicast:
    productionSpec:
      replicas: X
    stagingSpec:
      replicas: Z

2.7.12.4. 시스템 복제본

시스템 앱 및 시스템 sidekiq 구성 요소 Pod 수

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  system:
    appSpec:
      replicas: X
    sidekiqSpec:
      replicas: Z

2.7.12.5. Zync 복제본

Zync 앱 및 que 구성 요소 Pod 수

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  zync:
    appSpec:
      replicas: X
    queSpec:
      replicas: Z

2.8. Oracle을 시스템 데이터베이스로 사용하여 Operator와 함께 3scale 설치

Red Hat 3scale API Management 관리자는 Oracle Database를 사용하여 Operator와 함께 3scale을 설치할 수 있습니다. 기본적으로 3scale 2.11에는 MySQL 데이터베이스에 구성 데이터를 저장하는 system 이라는 구성 요소가 있습니다. 기본 데이터베이스를 재정의하고 정보를 외부 Oracle 데이터베이스에 저장할 수 있습니다. 아래 단계에 따라 자체 Oracle Database 클라이언트 바이너리를 사용하여 사용자 지정 시스템 컨테이너 이미지를 빌드하고 OpenShift에 3scale을 배포합니다.

참고
  • 3scale Operator 전용 설치를 수행하는 경우 Oracle Database는 OCP(OpenShift Container Platform) 버전 4.2 및 4.3에서는 지원되지 않습니다. 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.

사전 요구 사항

Oracle을 시스템 데이터베이스로 사용하여 Operator로 3scale을 설치하려면 다음 단계를 사용하십시오.

절차

  1. GitHub 리포지토리에서 3scale OpenShift 템플릿을 다운로드하고 아카이브를 추출합니다.

    tar -xzf 3scale-amp-openshift-templates-3scale-2.11.1-GA.tar.gz
  2. Oracle Database로 3scale 시스템 이미지 설정의 사전 요구 사항을 따르십시오.

    참고

    로컬로 다운로드 및 저장된 클라이언트 패키지 버전이 3scale과 일치하지 않는 경우 3scale은 다음 단계에서 적절한 버전을 자동으로 다운로드하여 사용합니다.

  3. Oracle Database Instant Client 패키지 파일을 3scale-amp-openshift-templates-3scale-2.11.1/amp/system-oracle/oracle-client-files 디렉터리에 배치합니다.
  4. 레지스트리 서비스 계정 생성 에서 생성한 인증 정보를 사용하여 registry.redhat.io 계정에 로그인합니다.

    docker login registry.redhat.io
  5. 사용자 지정 시스템 Oracle 기반 이미지를 빌드합니다. 이미지 태그는 다음 예와 같이 고정된 이미지 태그여야 합니다.

    docker build . --tag myregistry.example.com/system-oracle:2.11.0-1
  6. 시스템 Oracle 기반 이미지를 OCP 클러스터에서 액세스할 수 있는 컨테이너 레지스트리로 푸시합니다. 이 컨테이너 레지스트리는 3scale 솔루션을 설치할 위치입니다.

    docker push myregistry.example.com/system-oracle:2.11.0-1
  7. 해당 필드에 system-database 시크릿을 생성하여 Oracle Database URL 연결 문자열 및 Oracle Database 시스템 암호를 설정합니다. Oracle Database의 외부 데이터베이스 설치를 참조하십시오.
  8. APIManager 사용자 정의 리소스를 생성하여 3scale 솔루션을 설치합니다. Operator를 사용하여 3scale 배포의 지침을 따릅니다.

    • APIManager 사용자 정의 리소스는 이전에 빌드한 시스템의 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.11.0-1"
       highAvailability:
        enabled: true

2.9. 일반적인 3scale 설치 문제 해결

이 섹션에는 일반적인 설치 문제 목록이 포함되어 있으며 문제 해결에 대한 지침을 제공합니다.

2.9.1. 더티 영구 볼륨 클레임을 남기는 이전 배포

문제

이전 배포 시도에서는 더티 PVC(영구 볼륨 클레임)로 인해 MySQL 컨테이너가 시작되지 않습니다.

원인

OpenShift에서 프로젝트를 삭제해도 연결된 PVC는 정리되지 않습니다.

해결책

절차

  1. oc get pvc 명령을 사용하여 오류가 있는 MySQL 데이터가 포함된 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
  2. OpenShift UI에서 cancel deployment를 클릭하여 system-mysql pod의 배포를 중지합니다.
  3. MySQL 경로 아래의 모든 항목을 삭제하여 볼륨을 정리합니다.
  4. system-mysql 배포를 시작합니다.

2.9.2. 인증된 이미지 레지스트리의 인증 정보가 잘못되었거나 누락됨

문제

Pod가 시작되지 않습니다. 이미지 스트림에 다음 오류가 표시됩니다.

! error: Import failed (InternalError): ...unauthorized: Please login to the Red Hat Registry

원인

OpenShift 4.x에 3scale을 설치하는 동안 OpenShift는 이미지 스트림이 참조하는 이미지를 가져올 수 없기 때문에 포드를 시작하지 못합니다. 이는 Pod가 가리키는 레지스트리에 대해 인증할 수 없기 때문에 발생합니다.

해결책

절차

  1. 다음 명령을 입력하여 컨테이너 레지스트리 인증 구성을 확인합니다.

    $ oc get secret
    • 시크릿이 있는 경우 터미널에 다음 출력이 표시됩니다.

      threescale-registry-auth          kubernetes.io/dockerconfigjson        1         4m9s
    • 그러나 출력이 표시되지 않는 경우 다음을 수행해야 합니다.
  2. 이전에 레지스트리 서비스 계정을 생성하는 동안 설정한 인증 정보를 사용하여 보안을 생성합니다.
  3. 제공된 oc create secret 명령에서 < your- registry-service-account-username> 및 < your- registry-service-account-password >를 교체하여 OpenShift에서 레지스트리 인증 구성 단계를 사용합니다.
  4. APIManager 리소스와 동일한 네임스페이스에 threescale-registry-auth 시크릿을 생성합니다. < project-name> 내에서 다음을 실행해야 합니다.

    oc project <project-name>
    oc create secret docker-registry threescale-registry-auth \
      --docker-server=registry.redhat.io \
      --docker-username="<your-registry-service-account-username>" \
      --docker-password="<your-registry-service-account-password>"
      --docker-email="<email-address>"
  5. APIManager 리소스를 삭제하고 다시 생성합니다.

    $ oc delete -f apimanager.yaml
    apimanager.apps.3scale.net "example-apimanager" deleted
    
    $ oc create -f apimanager.yaml
    apimanager.apps.3scale.net/example-apimanager created

검증

  1. 다음 명령을 입력하여 배포 상태가 Starting 또는 Ready 상태인지 확인합니다. 그런 다음 Pod가 생성되기 시작합니다.

    $ oc describe apimanager
    (...)
    Status:
      Deployments:
        Ready:
          apicast-staging
          system-memcache
          system-mysql
          system-redis
          zync
          zync-database
          zync-que
        Starting:
          apicast-production
          backend-cron
          backend-worker
          system-sidekiq
          system-sphinx
        Stopped:
          backend-listener
          backend-redis
          system-app
  2. 다음 명령을 입력하여 각 Pod의 상태를 확인합니다.

    $ oc get pods
    NAME                               READY   STATUS             RESTARTS   AGE
    3scale-operator-66cc6d857b-sxhgm   1/1     Running            0          17h
    apicast-production-1-deploy        1/1     Running            0          17m
    apicast-production-1-pxkqm         0/1     Pending            0          17m
    apicast-staging-1-dbwcw            1/1     Running            0          17m
    apicast-staging-1-deploy           0/1     Completed          0          17m
    backend-cron-1-deploy              1/1     Running            0          17m

2.9.3. Docker 레지스트리에서 잘못 가져 오기

문제

설치 중에 다음 오류가 발생합니다.

svc/system-redis - 1EX.AMP.LE.IP:6379
  dc/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 컨테이너 버전 을 사용합니다.

2.9.4. 영구 볼륨이 로컬에 마운트될 때 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

원인

MySQL 프로세스는 부적절한 사용자 권한으로 시작됩니다.

해결책

절차

  1. 영구 볼륨에 사용되는 디렉터리에는 root 그룹에 대한 쓰기 권한이 있어야 합니다. MySQL 서비스가 root 그룹에서 다른 사용자로 실행되므로 root 사용자에 대한 읽기-쓰기 권한이 있는 것만으로는 충분하지 않습니다. root 사용자로 다음 명령을 실행합니다.

    chmod -R g+w /path/for/pvs
  2. SElinux가 액세스를 차단하지 못하도록 다음 명령을 실행합니다.

    chcon -Rt svirt_sandbox_file_t /path/for/pvs

2.9.5. 로고 또는 이미지를 업로드할 수 없음

문제

로고를 업로드할 수 없음 - system-app 로그에 다음과 같은 오류가 표시됩니다.

Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2

원인

영구 볼륨은 OpenShift에서 쓸 수 없습니다.

해결책

절차

OpenShift에서 영구 볼륨에 쓸 수 있는지 확인합니다. root 그룹이 소유해야 하며 쓰기 가능한 그룹이어야 합니다.

2.9.6. OpenShift에서 작동하지 않는 테스트 호출

문제

테스트 호출은 OpenShift에서 새 서비스 및 경로를 생성한 후 작동하지 않습니다. curl을 통한 직접 호출도 실패합니다. 즉, service not available.

원인

3scale에서는 기본적으로 HTTPS 경로가 필요하며 OpenShift 경로는 보안되지 않습니다.

해결책

절차

OpenShift 라우터 설정에서 보안 경로 확인란이 클릭되었는지 확인합니다.

2.9.7. 3scale과 다른 프로젝트의 APIcast 배포 실패

문제

APIcast 배포가 실패합니다(pod가 파란색으로 바뀌지 않음). 로그에 다음 오류가 표시됩니다.

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"

원인

시크릿이 제대로 설정되어 있지 않았습니다.

해결책

절차

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>

2.10. 추가 리소스

  • HighAvailabilitySpec에 대한 자세한 내용은 APIManager CRD 참조 설명서를 확인하십시오.
  • system-database 의 시크릿 및 필드에 대한 자세한 내용은 APIManager CRD 참조 설명서를 참조하십시오.

3장. APIcast 설치

APIcast는 내부 및 외부 API 서비스를 Red Hat 3scale API Management Platform과 통합하는 데 사용되는 NGINX 기반 API 게이트웨이입니다. APIcast는 라운드 로빈을 사용하여 로드 밸런싱을 수행합니다.

이 가이드에서는 배포 옵션, 환경 제공 및 시작 방법에 대해 알아봅니다.

사전 요구 사항

APIcast는 독립 실행형 API 게이트웨이가 아닙니다. 3scale API Manager에 연결해야 합니다.

APIcast를 설치하려면 다음 섹션에 설명된 단계를 수행합니다.

3.1. APIcast 배포 옵션

호스팅 또는 자체 관리 APIcast를 사용할 수 있습니다. 두 경우 모두 APIcast가 3scale API Management 플랫폼의 나머지 부분에 연결되어야 합니다.

3.2. APIcast 환경

기본적으로 3scale 계정을 생성할 때 두 가지 다른 환경에 내장 APIcast가 제공됩니다.

  • 스테이징: API 통합을 구성하고 테스트하는 경우에만 사용하도록 설계되었습니다. 설정이 예상대로 작동하는지 확인한 후 프로덕션 환경에 배포하도록 선택할 수 있습니다. OpenShift 템플릿은 구성이 각 API 호출(APIST_CONFIGURATION_APICAST_CONFIGURATION_LOADER: lazy, APICAST_CONFIGURATION_CACHE: 0)에 다시 로드되는 방식으로 Staging APIcast의 매개변수를 설정합니다. APIcast 구성의 변경 사항을 빠르게 테스트하는 것이 유용합니다.
  • 프로덕션: 이 환경은 프로덕션용입니다. 다음 매개변수는 OpenShift 템플릿의 프로덕션 APIcast에 대해 설정됩니다. APICAST_CONFIGURATION_LOADER: boot, APICAST_CONFIGURATION_CACHE: 300. 즉, APIcast가 시작될 때 구성이 완전히 로드되고 300초(5분) 동안 캐시됩니다. 5분 후에 설정이 다시 로드됩니다. 즉, 구성을 프로덕션으로 승격시킬 때 APIcast의 새 배포를 트리거하지 않는 한 최대 5분이 걸릴 수 있습니다.

3.3. 통합 설정 구성

3scale 관리자는 3scale이 실행되는 환경의 통합 설정을 구성합니다.

사전 요구 사항

관리자 권한이 있는 3scale 계정입니다.

절차

  1. [ your_API_name] > 통합 > 설정 으로 이동합니다.
  2. 배포 시 기본 옵션은 다음과 같습니다.

    • 배포 옵션: APIcast 3scale 관리
    • 인증 모드: API 키.
  3. 기본 옵션을 변경합니다.
  4. 변경 사항을 저장하려면 제품 업데이트를 클릭합니다.

3.4. 서비스 구성

API 백엔드의 엔드포인트 호스트인 Private Base URL 필드에 API 백엔드를 선언해야 합니다. APIcast는 모든 인증, 권한 부여, 속도 제한 및 통계가 처리된 후 모든 트래픽을 API 백엔드로 리디렉션합니다.

이 섹션에서는 서비스 구성을 안내합니다.

3.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"

    다음과 같은 응답을 받습니다.

    {
        "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"
      }

3.4.2. 인증 설정 구성

[ your_product_name] > Integration > SettingsAUTHENTICATION 섹션에서 API에 대한 인증 설정을 구성할 수 있습니다.

표 3.1. 선택적 인증 필드

필드설명

인증 사용자 키

인증 정보 위치와 연결된 사용자 키를 설정합니다.

인증 정보 위치

인증 정보가 HTTP 헤더로 전달되는지, 쿼리 매개변수 또는 HTTP 기본 인증으로 전달되는지 여부를 정의합니다.

호스트 헤더

사용자 지정 호스트 요청 헤더를 정의합니다. 이는 API 백엔드가 특정 호스트의 트래픽만 허용하는 경우에만 필요합니다.

시크릿 토큰

API 백엔드에 대한 직접 개발자 요청을 차단하는 데 사용됩니다. 여기에서 헤더 값을 설정하고 백엔드에서 이 시크릿 헤더를 사용하여 호출만 허용하도록 합니다.

또한 [ your_product_name] > Integration > Settings 에서 GATEWAY RESPONSE 오류 코드를 구성할 수 있습니다. 오류에 대한 응답 코드,콘텐츠 유형, 응답 본문을 정의합니다. 인증이 실패했으며 인증이 누락되었으며 일치하지 않습니다.

표 3.2. 응답 코드 및 기본 응답 본문

응답 코드응답 본문

403

인증이 실패했습니다

403

인증 매개변수가 누락됨

404

일치하는 매핑 규칙 없음

429

사용량 제한 초과

3.4.3. API 테스트 호출 구성

API를 구성하려면 제품을 사용하여 백엔드를 테스트하고 APIcast 구성을 준비 및 프로덕션 환경으로 승격하여 요청 호출을 기반으로 테스트를 수행해야 합니다.

각 제품의 경우 요청은 경로에 따라 해당 백엔드로 리디렉션됩니다. 이 경로는 제품에 백엔드를 추가할 때 구성됩니다. 예를 들어 제품에 두 개의 백엔드가 추가되면 각 백엔드에는 고유한 경로가 있습니다.

사전 요구 사항

절차

  1. [ your_product_name] > Integration > Configuration으로 이동하여 APIcast 구성을 스테이징으로 승격합니다.
  2. APIcast Configuration에서 제품에 추가된 각 백엔드의 매핑 규칙을 확인할 수 있습니다. promote v.[n] to Staging APIcast 를 클릭합니다.

    • v.[n] 은 승격할 버전 번호를 나타냅니다.
  3. 스테이징으로 승격되면 프로덕션으로 승격할 수 있습니다. Staging APIcast에서 promote v.[n] to Production APIcast를 클릭합니다.

    • v.[n] 은 승격할 버전 번호를 나타냅니다.
  4. 명령줄에서 API에 대한 요청을 테스트하려면 테스트에 대해 예제 curl에 제공된 명령을 사용합니다.

    • curl 명령 예제는 제품의 첫 번째 매핑 규칙을 기반으로 합니다.

API에 대한 요청을 테스트할 때 메서드 및 메트릭을 추가하여 매핑 규칙을 수정할 수 있습니다.

구성을 수정하고 API를 호출하기 전에 스테이징(Staging) 및 프로덕션(Production) 환경으로 승격해야 합니다. 스테이징 환경으로 승격할 보류 중인 변경 사항이 있는 경우 Integration 메뉴 항목 옆에 관리 포털에 느낌표가 표시됩니다.

3scale 호스팅 APIcast 게이트웨이는 인증 정보를 검증하고 API의 애플리케이션 계획에 대해 정의한 속도 제한을 적용합니다. 인증 정보 없이 호출하거나 잘못된 인증 정보를 사용하는 경우 Authentication failed 오류 메시지가 표시됩니다.

3.5. Docker 컨테이너 환경에 APIcast 배포

이는 Red Hat 3scale API Management API 게이트웨이로 사용할 준비가 된 Docker 컨테이너 엔진 내부에 APIcast를 배포하는 단계별 가이드입니다.

참고

Docker 컨테이너 환경에 APIcast를 배포할 때 지원되는 RHEL(Red Hat Enterprise Linux) 및 Docker 버전은 다음과 같습니다.

  • RHEL 7.7
  • Docker 1.13.1

사전 요구 사항

Docker 컨테이너화된 환경에 APIcast를 배포하려면 다음 섹션에 설명된 단계를 수행합니다.

3.5.1. Docker 컨테이너 환경 설치

이 가이드에서는 RHEL 7.x에서 Docker 컨테이너 환경을 설정하는 단계를 설명합니다.

Red Hat에서 제공하는 Docker 컨테이너 엔진은 RHEL에서 Extras 채널의 일부로 릴리스됩니다. 추가 리포지토리를 활성화하려면 Subscription Manager 또는 yum-config-manager 옵션을 사용할 수 있습니다. 자세한 내용은 RHEL 제품 설명서를 참조하십시오.

AWS(Amazon Web Services), Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 RHEL 7.x를 배포하려면 다음 단계를 따르십시오.

절차

  1. 모든 리포지토리 나열합니다: sudo yum repolist all.
  2. *-extras 리포지토리를 찾습니다.
  3. extras 리포지토리 sudo yum-config-manager --enable rhui-REGION-rhel-server-extras를 활성화합니다.
  4. Docker 컨테이너 환경 패키지 설치: sudo yum install docker.

추가 리소스

다른 운영 체제의 경우 다음 Docker 설명서를 참조하십시오.

3.5.2. Docker 컨테이너 환경 게이트웨이 실행

중요

3scale 2.11에서는 RHEL 7에서 컨테이너로 실행되는 APIcast 배포에 대한 지원이 더 이상 사용되지 않습니다. 향후 릴리스에서 3scale은 RHEL 8 및 Podman만 지원합니다. APIcast 자체 관리를 컨테이너로 실행하는 경우 지원되는 구성으로 설치를 업그레이드합니다.

Docker 컨테이너 환경 게이트웨이를 실행하려면 다음을 수행합니다.

절차

  1. Docker 데몬을 시작합니다.

    sudo systemctl start docker.service
  2. Docker 데몬이 실행 중인지 확인합니다.

    sudo systemctl status docker.service
  3. Red Hat 레지스트리에서 Docker 컨테이너 엔진 이미지를 사용할 준비가 된 것을 다운로드합니다.

    sudo docker pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.11
  4. Docker 컨테이너 엔진에서 APIcast를 실행합니다.

    sudo docker 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.11

    여기서 <access_token>은 3scale 계정 관리 API의 액세스 토큰입니다. 액세스 토큰 대신 Provider Key를 사용할 수 있습니다. <domain>-admin.3scale.net은 3scale 관리 포털의 URL입니다.

이 명령은 포트 8080에서 "apicast"라는 Docker 컨테이너 엔진을 실행하고 3scale 관리 포털에서 JSON 구성 파일을 가져옵니다. 기타 구성 옵션은 APIcast 설치를 참조하십시오.

3.5.2.1. docker 명령 옵션

docker run 명령과 함께 다음 옵션을 사용할 수 있습니다.

  • --rm: 종료되면 컨테이너를 자동으로 제거합니다.
  • -d 또는 --detach: 백그라운드에서 컨테이너를 실행하고 컨테이너 ID를 출력합니다. 지정하지 않으면 컨테이너가 전경 모드에서 실행되며 CTRL + c를 사용하여 중지할 수 있습니다. 분리된 모드에서 시작하면 docker attach 명령을 사용하여 컨테이너에 다시 연결할 수 있습니다(예: docker attach apicast).
  • -p 또는 --publish: 컨테이너의 포트를 호스트에 게시합니다. 값의 형식은 <host port="">:<container port="">이므로 -p 80:8080은 컨테이너의 포트 8080을 호스트 시스템의 포트 80에 바인딩합니다. 예를 들어 관리 API는 포트 8090을 사용하므로 -p 8090:8090docker run 명령에 추가하여 이 포트를 게시할 수 있습니다.
  • -e 또는 --env: 환경 변수를 설정합니다.
  • -V 또는 --volume: 볼륨을 마운트합니다. 값은 일반적으로 <host path="">:<container path="">[:<options>] 표시됩니다. <options>는 선택적 속성입니다. 이는 :ro로 설정하여 볼륨이 읽기 전용임을 지정할 수 있습니다 (기본적으로 읽기-쓰기 모드로 마운트됨). 예: -v /host/path:/container/path:ro.

3.5.2.2. APIcast 테스트

이전 단계에서는 Docker 컨테이너 엔진이 3scale 레지스트리의 고유한 구성 파일 및 Docker 컨테이너 이미지로 실행되고 있는지 확인합니다. 포트 8080 에서 APIcast를 통해 호출을 테스트하고 3scale 계정에서 가져올 수 있는 올바른 인증 정보를 제공할 수 있습니다.

테스트 호출은 APIcast가 올바르게 실행되고 있는지 확인할 뿐만 아니라 인증 및 보고가 성공적으로 처리되고 있는지도 확인합니다.

참고

호출에 사용하는 호스트가 Integration (통합) 페이지의 Public Base URL 필드에 구성된 호스트와 같은지 확인합니다.

추가 리소스

3.5.3. 추가 리소스

3.5.4. Podman에 APIcast 배포

이는 Red Hat 3scale API Management API 게이트웨이로 사용할 Pod Manager(Podman) 컨테이너 환경에 APIcast를 배포하는 단계별 가이드입니다.

참고

Podman 컨테이너 환경에 APIcast를 배포할 때 지원되는 RHEL(Red Hat Enterprise Linux) 및 Podman은 다음과 같습니다.

  • RHEL 8.x
  • podman 1.4.2

사전 요구 사항

Podman 컨테이너 환경에 APIcast를 배포하려면 다음 섹션에 설명된 단계를 수행합니다.

3.5.4.1. Podman 컨테이너 환경 설치

이 가이드에서는 RHEL 8.x에서 Podman 컨테이너 환경을 설정하는 단계를 설명합니다. Docker는 RHEL 8.x에 포함되어 있지 않으므로 컨테이너 작업을 위해 Podman을 사용합니다.

RHEL 8.x를 사용한 Podman에 대한 자세한 내용은 컨테이너 명령줄 참조를 확인하십시오.

절차

  • Podman 컨테이너 환경 패키지를 설치합니다.

    sudo dnf install podman

추가 리소스

다른 운영 체제의 경우 다음 Podman 설명서를 참조하십시오.

3.5.4.2. Podman 환경 실행

Podman 컨테이너 환경을 실행하려면 아래 절차를 따르십시오.

절차

  1. Red Hat 레지스트리에서 Podman 컨테이너 이미지를 사용할 준비가 된 것을 다운로드합니다.

    podman pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.11
  2. 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.11

    여기서 <access_token>은 3scale 계정 관리 API의 액세스 토큰입니다. 액세스 토큰 대신 Provider Key를 사용할 수 있습니다. <domain>-admin.3scale.net은 3scale 관리 포털의 URL입니다.

이 명령은 포트 8080에서 "apicast"라는 Podman 컨테이너 엔진을 실행하고 3scale 관리 포털에서 JSON 구성 파일을 가져옵니다. 기타 구성 옵션은 APIcast 설치를 참조하십시오.

3.5.4.2.1. Podman을 사용하여 APIcast 테스트

이전 단계에서는 3scale 레지스트리의 고유한 구성 파일 및 Podman 컨테이너 이미지를 사용하여 Podman 컨테이너 엔진이 실행되고 있는지 확인합니다. 포트 8080 에서 APIcast를 통해 호출을 테스트하고 3scale 계정에서 가져올 수 있는 올바른 인증 정보를 제공할 수 있습니다.

테스트 호출은 APIcast가 올바르게 실행되고 있는지 확인할 뿐만 아니라 인증 및 보고가 성공적으로 처리되고 있는지도 확인합니다.

참고

호출에 사용하는 호스트가 Integration (통합) 페이지의 Public Base URL 필드에 구성된 호스트와 같은지 확인합니다.

3.5.4.3. podman 명령 옵션

podman 명령에 다음 옵션 예제를 사용할 수 있습니다.

  • -d: 분리된 모드에서 컨테이너를 실행하고 컨테이너 ID를 출력합니다. 지정하지 않으면 컨테이너가 전경 모드에서 실행되며 CTRL + c를 사용하여 중지할 수 있습니다. 분리 모드에서 시작되면 podman attach 명령을 사용하여 컨테이너에 다시 연결할 수 있습니다(예: podman attach apicast ).
  • ps-a: podman ps 는 컨테이너 생성 및 실행을 나열하는 데 사용됩니다. ps 명령에 -a 를 추가하면 실행 중이고 중지된 모든 컨테이너(예: podman ps -a )가 표시됩니다.
  • inspect-l: 실행 중인 컨테이너를 검사합니다. 예를 들어, 컨테이너에 할당된 ID를 확인하려면 inspect 를 사용합니다. -l 을 사용하여 최신 컨테이너의 세부 정보를 가져옵니다(예: podman inspect -l | grep Id\": ).

3.5.4.4. 추가 리소스

3.6. OpenShift 템플릿을 사용하여 APIcast 배포

OpenShift 템플릿을 사용하여 APIcast API 게이트웨이를 배포할 수 있습니다. APIcast API 게이트웨이를 배포하면 API를 보호하는 데 도움이 되며 트래픽을 분석하고 모니터링할 수 있습니다.

사전 요구 사항

  • Red Hat 3scale API Management Admin Portal에서 APIcast 설치별로 APIcast를 구성해야 합니다.
  • 통합 설정에서 자체 관리 게이트웨이가 배포 옵션으로 선택되어 있는지 확인합니다.
  • 계속 진행하도록 스테이징 및 프로덕션 환경이 모두 구성되어 있어야 합니다.

절차

  1. 기본적으로 개발자로 로그인하여 다음 단계를 진행할 수 있습니다.

    그렇지 않으면 이전 단계에서 다운로드하여 설치한 OpenShift 클라이언트 툴에서 oc login 명령을 사용하여 OpenShift에 로그인합니다. 기본 로그인 인증 정보는 username = " developer"password = " developer" 입니다.

    oc login https://OPENSHIFT-SERVER-IP:8443

    Login successful. 출력이 표시되어야 합니다.

  2. 프로젝트를 생성합니다. 이 예에서는 표시 이름을 게이트웨이로설정

    oc new-project "3scalegateway" --display-name="gateway" --description="3scale gateway demo"

    응답은 다음과 같아야 합니다.

    Now using project "3scalegateway" on server "https://172.30.0.112:8443"

    명령 프롬프트의 텍스트 출력에서 제안된 다음 단계를 무시하고 아래의 다음 단계로 진행합니다.

  3. <access_token><domain>을 자체 인증 정보로 교체하여 프로젝트를 참조하는 새 시크릿을 생성합니다. <access_token><domain>에 대한 자세한 내용은 아래를 참조하십시오.

    oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<access_token>@<admin_portal_domain>  --type=kubernetes.io/basic-auth

    여기서 <access_token>은 3scale 계정의 액세스 토큰이며 <domain>-admin.3scale.net은 3scale 관리 포털의 URL입니다.

    응답은 다음과 같아야 합니다.

    secret/apicast-configuration-url-secret
  4. 템플릿에서 APIcast 게이트웨이 애플리케이션을 생성하고 배포를 시작합니다.

    oc new-app -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.11.0.GA/apicast-gateway/apicast.yml

    출력 하단에 다음 메시지가 표시됩니다.

        --> Creating resources with label app=3scale-gateway ...
            deploymentconfig "apicast" created
            service "apicast" created
        --> Success
            Run 'oc status' to view your app.

3.7. Operator를 사용하여 APIcast 게이트웨이 자체 관리 솔루션 배포

이 가이드에서는 Openshift Container Platform 콘솔을 통해 APIcast Operator를 사용하여 APIcast 게이트웨이 자체 관리 솔루션을 배포하는 단계를 제공합니다.

사전 요구 사항

절차

  1. 관리자 권한이 있는 계정을 사용하여 OCP 콘솔에 로그인합니다.
  2. Operators > 설치된 Operators를 클릭합니다.
  3. Installed Operators 목록에서 APIcast Operator를 클릭합니다.
  4. APIcast > Create APIcast를 클릭합니다.

3.7.1. APIcast 배포 및 구성 옵션

다음 두 가지 방법을 사용하여 APIcast 게이트웨이 자체 관리 솔루션을 배포하고 구성할 수 있습니다.

또한 다음을 참조하십시오.

3.7.1.1. 3scale 시스템 엔드 포인트 제공

절차

  1. 3scale System 관리 포털 엔드포인트 정보가 포함된 OpenShift 시크릿을 생성합니다.

    oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
    • ${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

      시크릿 콘텐츠에 대한 자세한 내용은 관리 포털 구성 시크릿 참조를 살펴보십시오.

  2. APIcast용 OpenShift 오브젝트 생성

    apiVersion: apps.3scale.net/v1alpha1
    kind: APIcast
    metadata:
      name: example-apicast
    spec:
      adminPortalCredentialsRef:
        name: SOME_SECRET_NAME

    spec.adminPortalCredentialsRef.name은 3scale 시스템 관리 포털 끝점 정보가 포함된 기존 OpenShift 시크릿의 이름이어야 합니다.

  3. APIcast 오브젝트와 연결된 OpenShift 배포의 readyReplicas 필드가 1 인지 확인하여 APIcast Pod가 실행 중이고 준비되었는지 확인합니다. 또는 다음을 사용하여 필드가 설정될 때까지 기다립니다.

    $ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}')
    1
3.7.1.1.1. APIcast 게이트웨이가 실행 중이고 사용 가능한지 확인

절차

  1. OpenShift Service APIcast가 로컬 머신에 노출되었는지 확인하고 테스트 요청을 수행합니다. 이렇게 하려면 포트-캐스트 OpenShift 서비스를 localhost:8080 으로 전달합니다.

    oc port-forward svc/apicast-example-apicast 8080
  2. 구성된 3scale 서비스에 요청하여 성공적인 HTTP 응답을 확인합니다. 서비스의 Staging Public Base URL 또는 Production Public Base URL 설정에 구성된 도메인 이름을 사용합니다. 예를 들어 다음과 같습니다.

    $ curl 127.0.0.1:8080/test -H "Host: myhost.com"
3.7.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"
  ...

이 예제에서는 HTTP를 사용하여 포트 80에 Kubernetes Ingress 오브젝트를 생성합니다. APIcast 배포가 OpenShift 환경에 있는 경우 OpenShift 기본 Ingress 컨트롤러는 APIcast 설치에 대한 외부 액세스를 허용하는 Ingress 오브젝트 APIcast를 사용하여 Route 오브젝트를 생성합니다.

exposedHost 섹션에 대해 TLS를 구성할 수도 있습니다. 다음 표에서 사용 가능한 필드에 대한 세부 정보:

표 3.3. APIcastExposedHost 참조 테이블

json/yaml 필드유형필수 항목기본값설명

host

string

있음

해당 없음

게이트웨이로 라우팅되는 도메인 이름

tls

[]extensions.IngressTLS

없음

해당 없음

ingress TLS 오브젝트의 배열입니다. TLS에서 자세한 내용을 참조하십시오.

3.7.1.2. 구성 시크릿 제공

절차

  1. 구성 파일을 사용하여 시크릿을 생성합니다.

    $ 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

    구성 파일은 config.json 이라고 합니다. 이는 APIcast CRD 참조 요구 사항입니다.

    시크릿 콘텐츠에 대한 자세한 내용은 관리 포털 구성 시크릿 참조를 살펴보십시오.

  2. 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
    1. 다음은 포함된 구성 시크릿의 예입니다.

      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"
                        }]
                      }
                    }
                  ]
                }
              }
            ]
          }
  3. APIcast 오브젝트를 생성할 때 다음 콘텐츠를 설정합니다.

    apiVersion: apps.3scale.net/v1alpha1
    kind: APIcast
    metadata:
      name: example-apicast
    spec:
      embeddedConfigurationSecretRef:
        name: SOME_SECRET_NAME

    spec.embeddedConfigurationSecretRef.name은 게이트웨이 구성이 포함된 기존 OpenShift 시크릿의 이름이어야 합니다.

  4. APIcast 오브젝트와 연결된 OpenShift 배포의 readyReplicas 필드가 1 인지 확인하여 APIcast Pod가 실행 중이고 준비되었는지 확인합니다. 또는 다음을 사용하여 필드가 설정될 때까지 기다립니다.

    $ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}')
    1
3.7.1.2.1. APIcast 게이트웨이가 실행 중이고 사용 가능한지 확인

절차

  1. OpenShift Service APIcast가 로컬 머신에 노출되었는지 확인하고 테스트 요청을 수행합니다. 이렇게 하려면 포트-캐스트 OpenShift 서비스를 localhost:8080 으로 전달합니다.

    oc port-forward svc/apicast-example-apicast 8080
  2. 구성된 3scale 서비스에 요청하여 성공적인 HTTP 응답을 확인합니다. 서비스의 Staging Public Base URL 또는 Production Public Base URL 설정에 구성된 도메인 이름을 사용합니다. 예를 들어 다음과 같습니다.

    $  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"

3.7.1.3. APIcast Operator를 사용하여 사용자 정의 환경 삽입

자체 관리 APIcast를 사용하는 3scale 설치에서는 APIcast 연산자를 사용하여 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경은 게이트웨이가 제공하는 모든 업스트림 API에 APIcast가 적용되는 동작을 정의합니다. 사용자 지정 환경을 만들려면 Lua 코드에서 글로벌 구성을 정의합니다.

APIcast 설치 후 또는 APIcast 설치 후 사용자 지정 환경을 삽입할 수 있습니다. 사용자 지정 환경을 삽입한 후 이를 제거하고 APIcast Operator가 변경 사항을 조정할 수 있습니다.

사전 요구 사항

  • APIcast Operator가 설치되어 있습니다.

절차

  1. 삽입할 사용자 지정 환경을 정의하는 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 },
    }
  2. 사용자 지정 환경을 정의하는 Lua 파일에서 시크릿을 생성합니다. 예를 들어 다음과 같습니다.

    oc create secret generic custom-env-1 --from-file=./env1.lua

    시크릿에는 여러 사용자 지정 환경이 포함될 수 있습니다. 사용자 지정 환경을 정의하는 각 파일에 대해 -from-file 옵션을 지정합니다. Operator는 각 사용자 지정 환경을 로드합니다.

  3. 방금 생성한 시크릿을 참조하는 APIcast 사용자 정의 리소스를 정의합니다. 다음 예제에서는 사용자 지정 환경을 정의하는 시크릿을 참조하는 상대적 콘텐츠만 보여줍니다.

    apiVersion: apps.3scale.net/v1alpha1
    kind: APIcast
    metadata:
      name: apicast1
    spec:
      customEnvironments:
        - secretRef:
            name: custom-env-1

    APIcast 사용자 정의 리소스는 사용자 지정 환경을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 환경을 로드합니다.

  4. 사용자 지정 환경을 추가하는 APIcast 사용자 정의 리소스를 생성합니다. 예를 들어 APIcast 사용자 정의 리소스를 apicast.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc apply -f apicast.yaml

다음 단계

사용자 지정 환경을 정의하는 보안의 콘텐츠를 업데이트할 수 없습니다. 사용자 지정 환경을 업데이트해야 하는 경우 사용자 지정 환경을 정의하는 Lua 파일을 업데이트한 다음 다음 중 하나를 수행합니다.

  • 권장되는 옵션은 다른 이름으로 보안을 생성한 다음 업데이트된 사용자 정의 환경에 대해 APIcast 사용자 정의 리소스 필드인 spec.customEnvironments[].secretRef.name 을 업데이트하는 것입니다. Operator는 롤링 업데이트를 트리거하고 업데이트된 사용자 지정 환경을 로드합니다.
  • 또는 spec.replicas 를 0으로 설정하여 기존 보안을 업데이트하고 spec.replicas 를 이전 값으로 다시 설정하여 APIcast를 다시 배포할 수 있습니다.

3.7.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 파일이 이미 생성되었습니다.

절차

  1. 하나의 사용자 지정 정책을 정의하는 파일에서 시크릿을 생성합니다. 예를 들어 다음과 같습니다.

    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

    사용자 지정 정책이 두 개 이상 있는 경우 각 사용자 지정 정책에 대한 보안을 생성합니다. 보안에는 하나의 사용자 지정 정책만 포함될 수 있습니다.

  2. 방금 생성한 시크릿을 참조하는 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

    APIcast 사용자 정의 리소스는 사용자 지정 정책을 정의하는 여러 시크릿을 참조할 수 있습니다. Operator는 각 사용자 지정 정책을 로드합니다.

  3. 사용자 지정 정책을 추가하는 APIcast 사용자 정의 리소스를 생성합니다. 예를 들어 APIcast 사용자 정의 리소스를 apicast.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc apply -f apicast.yaml

다음 단계

사용자 정의 정책을 정의하는 시크릿 콘텐츠를 업데이트할 수 없습니다. 사용자 지정 정책을 업데이트해야 하는 경우 파일을 업데이트한 다음 다음 중 하나를 수행합니다.

  • 권장되는 옵션은 다른 이름으로 시크릿을 생성한 다음 업데이트된 사용자 정의 정책에 대해 APIcast 사용자 정의 리소스 필드인 spec.customPolicies[].secretRef.name 을 업데이트하는 것입니다. Operator는 롤링 업데이트를 트리거하고 업데이트된 사용자 지정 정책을 로드합니다.
  • 또는 spec.replicas 를 0으로 설정하여 기존 보안을 업데이트하고 spec.replicas 를 이전 값으로 다시 설정하여 APIcast를 다시 배포할 수 있습니다.

3.7.1.5. APIcast Operator를 사용하여 OpenTracing 구성

자체 관리 APIcast를 사용하는 3scale 설치에서는 APIcast Operator를 사용하여 OpenTracing을 구성할 수 있습니다. OpenTracing을 활성화하면 APIcast 인스턴스에 대한 더 많은 통찰력과 가시성을 얻을 수 있습니다.

절차

  1. 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
  2. 시크릿을 생성합니다. 예를 들어 이전 시크릿 정의를 myjaeger.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc create secret generic myjaeger --from-file myjaeger.yaml
  3. 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
    ...
  4. OpenTracing을 구성하는 APIcast 사용자 정의 리소스를 만듭니다. 예를 들어 APIcast 사용자 정의 리소스를 apicast1.yaml 파일에 저장한 경우 다음 명령을 실행합니다.

    oc apply -f apicast1.yaml

다음 단계

OpenTracing이 설치된 방법에 따라 Jaeger 서비스 사용자 인터페이스에 추적이 표시되어야 합니다.

3.8. 추가 리소스

최신 릴리스 및 지원되는 APIcast 버전에 대한 자세한 내용은 문서를 참조하십시오.

4장. OpenShift에 3scale Operator 설치

참고

3scale은 OCP(OpenShift Container Platform)의 마지막 두 가지 일반 가용성(GA) 릴리스를 지원합니다. 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.

이 문서에서는 다음을 수행하는 방법을 보여줍니다.

  • 새 프로젝트를 생성합니다.
  • Red Hat 3scale API Management 인스턴스를 배포합니다.
  • OLM(Operator Lifecycle Manager)을 통해 3scale Operator를 설치합니다.
  • Operator가 배포되면 사용자 정의 리소스를 배포합니다.

사전 요구 사항

  • 관리자 권한이 있는 계정을 사용하여 지원되는 OpenShift Container Platform 4 클러스터에 액세스할 수 있습니다.

주의

새로 생성된 별도의 빈 프로젝트에 3scale Operator 및 CRD(사용자 정의 리소스 정의)를 배포합니다. 인프라가 포함된 기존 프로젝트에 배포하는 경우 기존 요소를 변경하거나 삭제할 수 있습니다.

OpenShift에 3scale Operator를 설치하려면 다음 섹션에 설명된 단계를 수행합니다.

4.1. 새 OpenShift 프로젝트 생성

다음 절차에서는 3scale-project 라는 새 OpenShift 프로젝트를 생성하는 방법을 설명합니다. 이 프로젝트 이름을 자신의 이름으로 바꿉니다.

절차

새 OpenShift 프로젝트를 생성하려면 다음을 수행합니다.

  • 영숫자 및 대시를 사용하여 유효한 이름을 지정합니다. 예를 들어 아래 명령을 실행하여 3scale-project 를 생성합니다.

    oc new-project 3scale-project

이렇게 하면 Operator, APIManager CR(사용자 정의 리소스) 및 Capabilities 사용자 정의 리소스가 설치된 새 OpenShift 프로젝트 가 생성됩니다. Operator는 해당 프로젝트의 OLM을 통해 사용자 정의 리소스를 관리합니다.

4.2. OLM을 사용하여 3scale Operator 설치 및 구성

OLM(Operator Lifecycle Manager)을 사용하여 OCP 콘솔의 OperatorHub를 통해 OCP(OpenShift Container Platform) 4.3 클러스터에 3scale Operator를 설치합니다.

참고
  • 제한된 네트워크 또는 연결이 끊긴 클러스터에서 OCP를 사용하는 경우 OLM에서 더 이상 OperatorHub를 사용할 수 없습니다. 제한된 네트워크에서 Operator Lifecycle Manager를 사용하여 이름이 지정된 가이드의 OLM을 설정하고 사용하는 방법에 대한 지침을 따릅니다.

사전 요구 사항

절차

  1. OpenShift Container Platform 콘솔에서 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. 메뉴 구조는 사용 중인 OpenShift 버전에 따라 다릅니다.

    • Operators > OperatorHub를 클릭합니다.
  3. 키워드로 필터링 상자에3scale operator를 입력하여 3scale operator 찾습니다.
  4. 3scale Operator를 클릭합니다. Operator에 대한 정보가 표시됩니다.
  5. Operator에 대한 정보를 읽고 설치를 클릭합니다. Create Operator Subscription 페이지가 열립니다.
  6. Create Operator Subscription 페이지에서 기본 선택 사항을 모두 수락하고 서브스크립션을 클릭합니다.

    참고

    Operator는 선택한 클러스터의 특정 단일 네임 스페이스에서만 사용할 수 있습니다.

    3scale-operator 세부 정보 페이지가 표시됩니다. 여기서 서브스크립션 개요가 표시됩니다.

  7. 서브스크립션 업그레이드 상태최신으로 표시되는지 확인합니다.
  8. 3scale Operator ClusterServiceVersion (CSV)이 표시되고 Operator의 상태가 궁극적으로 새 OpenShift 프로젝트 생성에 정의된 프로젝트에서 InstallSucceeded로 되었는지 확인합니다.

    • Operators > 설치된 Operators를 클릭합니다. 이 경우 설치에 성공하면 APIManager CRD와 OpenShift API 서버에서 Operator의 Capabilities 기능과 관련된 CRD를 등록합니다.
  9. 성공적으로 설치한 후 oc get를 통해 CRD에서 정의한 리소스 유형을 쿼리합니다.

    1. 예를 들어 APIManager CRD가 올바르게 등록되었는지 확인하려면 다음 명령을 실행합니다.

      oc get apimanagers
  10. 다음 출력이 표시되어야 합니다.

    No resources found.

표시된 절차 외에도 제한된 네트워크에서 OCP를 사용하는 동안 3scale 개발자 포털에서 사용하려는 허용된 도메인 목록을 생성합니다. 다음 예제를 고려하십시오.

  • 개발자 포털에 추가할 모든 링크입니다.
  • SSO는 GitHub와 같은 타사 SSO 공급자를 통해 통합됩니다.
  • 빌링.
  • 외부 URL을 트리거하는 Webhook입니다.

4.2.1. 연결이 끊긴 환경의 제한 사항

다음 목록은 3scale 2.11에 대한 연결이 끊긴 환경의 현재 제한 사항을 간략하게 설명합니다.

  • 개발자 포털에 대한 GitHub 로그인은 사용할 수 없습니다.
  • 지원 링크가 작동하지 않습니다.
  • 외부 설명서에 대한 링크가 작동하지 않습니다.
  • 개발자 포털의 OAS(OpenAPI Specification)의 유효성 검증기가 작동하지 않고 외부 서비스에 대한 링크에 영향을 미칩니다.
  • ActiveDocs 의 제품 개요 페이지에서 OAS에 대한 링크가 작동하지 않습니다.

    • 또한 새 ActiveDocs 사양을 생성할 때 Skip swagger 검증 옵션을 확인해야 합니다.

추가 리소스

5장. OpenShift에 APIcast Operator 설치

이 가이드에서는 OCP(OpenShift Container Platform) 콘솔을 통해 APIcast Operator를 설치하는 단계를 제공합니다.

절차

  1. 관리자 권한이 있는 계정을 사용하여 OCP 콘솔에 로그인합니다.
  2. Projects > Create Project에서 새 프로젝트 operator-test를 생성합니다.
  3. Operators > 설치된 Operators를 클릭합니다.
  4. Filter by keyword 상자에 apicast 를 입력하여 APIcast 연산자를 찾습니다. 커뮤니티 버전을 사용하지 마십시오.
  5. APIcast Operator를 클릭합니다. APIcast 연산자에 대한 정보를 볼 수 있습니다.
  6. 설치를 클릭합니다. Create Operator Subscription 페이지가 열립니다.
  7. Subscribe를 클릭하여 Create Operator Subscription 페이지에서 모든 기본 선택을 수락합니다.

    1. 서브스크립션 업그레이드 상태가 최신으로 표시됩니다.
  8. Operator > 설치된 Operator를 클릭하여 APIcast operator ClusterServiceVersion (CSV) 상태가 operator-test 프로젝트에 InstallSucceeded로 표시되는지 확인합니다.

6장. 3scale High Availability 및 evaluation 템플릿

이 문서에서는 Red Hat 3scale API Management 2.11 설치에서 사용하는 고가용성평가 용 템플릿에 대해 설명합니다.

사전 요구 사항

  • 고가용성 및 평가판 템플릿의 요소를 배포하려면 사용 가능한 OpenShift 클러스터가 있어야 합니다.
중요

3scale High Availability 및 evaluation 템플릿은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

고가용성 및 평가판 템플릿을 배포하려면 다음 섹션에 설명된 단계를 수행합니다.

6.1. 고가용성 템플릿

HA(고가용성) 템플릿을 사용하면 중요한 데이터베이스에 대한 HA 설정을 사용할 수 있습니다.

사전 요구 사항

  • HA 템플릿을 배포하기 전에 외부 데이터베이스를 배포 및 구성하고 부하 분산 엔드포인트를 사용하여 HA 구성으로 구성해야 합니다.

HA 템플릿 사용

HA의 경우 console -ha-tech-preview.yml 이라는 템플릿을 사용하면 OpenShift 외부에 중요한 데이터베이스를 배포할 수 있습니다. 이 예외는 다음과 같습니다.

  • Memcached
  • Sphinx
  • Zync

표준 amp.yml 템플릿과 amp-ha-tech-preview.yml 간의 차이점은 다음과 같습니다.

  • 다음 요소를 제거합니다.

    • backend-redis 및 관련 구성 요소
    • system-redis 및 관련 구성 요소
    • system-mysql 및 관련 구성 요소
    • Redis 및 MySQL 관련 ConfigMaps
    • MYSQL_IMAGE, REDIS_IMAGE, MYSQL_USER, MYSQL_ROOT_PASSWORD 매개 변수
  • 기본적으로 데이터베이스 이외의 DeploymentConfig 오브젝트 유형의 복제본 수가 1에서 2로 증가했습니다.
  • 다음 필수 매개변수를 추가하여 외부 데이터베이스의 위치를 제어할 수 있습니다.

    • BACKEND_REDIS_STORAGE_ENDPOINT
    • BACKEND_REDIS_QUEUES_ENDPOINT
    • SYSTEM_REDIS_URL
    • APICAST_STAGING_REDIS_URL
    • APICAST_PRODUCTION_REDIS_URL
    • SYSTEM_DATABASE_URL

amp-ha-tech-preview.yml을 사용하면 새로 추가된 필수 매개변수를 통해 클러스터 외부에서 데이터베이스 연결( 영구 데이터를 포함하지 않는 system-memcache,zync-databasesystem-sphinx 제외)을 구성해야 합니다. 엔드포인트에는 인증 정보를 포함하여 데이터베이스 부하 분산 연결 문자열이 필요합니다. 또한 데이터베이스 이외의 배포의 경우 애플리케이션 수준에서 중복성을 가지도록 Pod 복제본 수가 기본적으로 2로 증가합니다.

6.1.1. 고가용성을 위해 RWX_STORAGE_CLASS 설정

ReadWriteMany(RWX) PersistentVolumeClaims(PVC)는 스토리지 클래스 RWX_STORAGE_CLASS를 사용합니다.

필수: false

: null

  • 이 값을 null 로 설정하여 스토리지 클래스를 자동 검색(값 없음)하도록 OpenShift에 알립니다.
  • 이 값을 빈 문자열 또는 기본값 없음으로 설정하면 OpenShift에서 문자열 스토리지를 비워야 한다는 신호를 보냅니다. 이는 잘못된 설정입니다.

6.2. 평가 템플릿

평가를 위해 리소스 요청 또는 제한 없이 3scale 환경을 배포하는 amp-eval-tech-preview.yml 이라는 템플릿이 있습니다.

표준 amp.yml 템플릿에 비해 유일한 기능 차이점은 리소스 제한 및 요청이 제거되었다는 것입니다. 즉, 이 버전에서는 최소 하드웨어 요구 사항이 CPU 및 메모리 수준의 Pod에서 제거되었습니다. 이 템플릿은 지정된 하드웨어 리소스와 함께 최상의 방식으로 구성 요소를 배포하려고 하므로 평가, 테스트 및 개발 목적으로만 사용됩니다.

7장. 3scale에 대한 Redis HA(고가용성) 지원

중요

Red Hat은 공식적으로 제로 가동 중지 시간에 대한 Redis 설정, 3scale의 백엔드 구성 요소 구성 또는 Redis 데이터베이스 복제 및 샤딩을 지원하지 않습니다. 콘텐츠는 참조용으로만 제공됩니다. 또한 Redis cluster mode는 3scale에서 지원되지 않습니다.

HA(고가용성)는 OpenShift Container Platform(OCP)에서 대부분의 구성 요소에 대해 제공됩니다. 자세한 내용은 OpenShift Container Platform 3.11 Chapter 30. High Availability에서 참조하십시오.

Red Hat 3scale API Management의 HA에 대한 데이터베이스 구성 요소는 다음과 같습니다.

  • backend-redis: 통계 스토리지 및 임시 작업 스토리지에 사용됩니다.
  • system-redis: 3scale의 백그라운드 작업을 위한 임시 스토리지를 제공하며, system-app Pod의 Ruby 프로세스에 대한 메시지 버스로도 사용됩니다.

backend-redissystem-redis 모두 Redis Sentinel 및 Redis Enterprise에서 지원되는 Redis 고가용성 변형에서 작동합니다.

Redis Pod를 중지하거나 OpenShift Container Platform에서 중지하면 새 Pod가 자동으로 생성됩니다. 영구 스토리지는 Pod가 계속 작동하도록 데이터를 복원합니다. 이러한 시나리오에서는 새 pod가 시작되는 동안 약간의 다운타임이 발생합니다. 이는 여러 마스터 설정을 지원하지 않는 Redis의 제한 때문입니다. Redis가 배포된 모든 노드에 Redis 이미지를 사전 설치하여 다운타임을 줄일 수 있습니다. 이렇게 하면 Pod 재시작 시간이 빨라집니다.

다운 타임에 대한 Redis를 설정하고 3scale에 대한 백엔드 구성 요소를 구성합니다.

사전 요구 사항

  • 관리자 역할이 있는 3scale 계정입니다.

7.1. 제로 다운타임으로 Redis 설정

3scale 관리자로서 다운타임이 필요하지 않은 경우 OCP 외부에서 Redis를 구성하십시오. 3scale Pod의 구성 옵션을 사용하여 설정하는 방법은 여러 가지가 있습니다.

  • 자체 관리 Redis 설정
  • Redis Sentinel 사용: Redis Sentinel 참조 문서
  • Redis는 서비스로 제공됩니다.

    예를 들면 다음과 같습니다.

    • Amazon ElastiCache
    • Redis Labs
참고

Red Hat은 위에 언급된 서비스를 지원하지 않습니다. 이러한 서비스에 대한 언급은 Red Hat의 제품 또는 서비스를 보증한다는 의미는 아닙니다. 사용자는 Red Hat이 귀하의 외부 콘텐츠 사용 (또는 의존)으로 인해 발생할 수있는 손실 또는 비용을 부담하지 않는 것에 동의합니다.

7.2. 3scale의 백엔드 구성 요소 구성

3scale 관리자로 backend-cron, backend-listener, backend-worker 구성 요소 환경 변수에 대한 back-end의 Redis HA(failover)를 구성합니다. 이러한 구성은 3scale의 Redis HA에 필요합니다.

참고

sentinels와 함께 Redis를 사용하려면 3scale을 배포하기 전에 원하는 Redis를 구성하려면 모든 필드가 있는 system-redis 시크릿을 생성해야 합니다. 필드는 3scale 현재 백엔드에서 매개변수로 제공되지 않습니다.

7.2.1. backend-redissystem-redis 시크릿 생성

다음 단계에 따라 backend-redissystem-redis 시크릿을 생성합니다.

7.2.2. HA용 3scale 신규 설치 배포

단일 데이터베이스 Redis 인스턴스를 사용하여 배포할 때 키 충돌을 방지하려면 sidekiqmessage_bus Redis 키에 대해 다른 네임스페이스를 설정합니다. 이는 Redis Enterprise 및 Redis 클러스터에 모두 적용됩니다.

sidekiqmessage_bus가 다른 Redis 데이터베이스에 읽고 쓰는 기타 배포의 경우 네임스페이스는 필요하지 않습니다.

다음 매개 변수는 Redis 키 네임스페이스를 설정하는 데 사용됩니다.

  • NAMESPACE: Redis 데이터베이스에 system-appsystem-sidekiq 에 저장된 작업 대기열과 관련된 항목의 경우
  • MESSAGE_BUS_NAMESPACE: Redis 데이터베이스의 system-app 에 의해 저장된 프로세스 간 message_bus 통신과 관련된 항목의 경우

절차

  1. 아래 필드를 사용하여 backend-redissystem-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

    system-redis

    MESSAGE_BUS_NAMESPACE
    MESSAGE_BUS_SENTINEL_HOSTS
    MESSAGE_BUS_SENTINEL_ROLE
    MESSAGE_BUS_URL
    NAMESPACE
    SENTINEL_HOSTS
    SENTINEL_ROLE
    URL

    • sentinels를 사용하여 Redis에 대해 구성할 때 backend-redissystem-redis 의 해당 URL 필드는 redis://[:redis-password@]redis-group[/db]` 형식의 Redis 그룹을 나타냅니다. 여기서 [x]는 선택적 요소 x이며, redis-password, redis-group, db 변수를 적절하게 대체합니다.

      예제

      redis://:redispwd@mymaster/5

    • SENTINEL_HOSTS 필드는 다음 형식의 sentinel 연결 문자열을 쉼표로 구분한 목록입니다.

      redis://:sentinel-password@sentinel-hostname-or-ip:port
      • 목록의 각 요소에 대해 [x]는 선택적 요소 xsentinel-password,sentinel-hostname-or-ip 를 나타내며, port 는 그에 따라 교체할 변수입니다.

        예제

        :sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722

    • SENTINEL_ROLE 필드는 master 또는 slave 입니다.
  2. 최신 버전의 템플릿을 사용하여 템플릿을 사용하여 OpenShift에 3scale 배포에 표시된 대로 3scale을 배포합니다.

    1. 이미 존재하는 backend-redissystem-redis로 인한 오류를 무시합니다.

7.2.3. 3scale이 아닌 HA 배포를 HA로 마이그레이션

  1. HA 용 3scale의 새로운 설치 배포에 표시된 대로 모든 필드를 사용하여 backend-redissystem-redis 시크릿을 편집합니다.
  2. 백엔드 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
  3. 다음 system-redis 환경 변수가 system-(app|sidekiq|sphinx) 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: MESSAGE_BUS_REDIS_SENTINEL_HOSTS
      valueFrom:
        secretKeyRef:
          key: MESSAGE_BUS_SENTINEL_HOSTS
          name: system-redis
    name: MESSAGE_BUS_REDIS_SENTINEL_ROLE
      valueFrom:
        secretKeyRef:
          key: MESSAGE_BUS_SENTINEL_ROLE
          name: system-redis
  4. 템플릿을 사용하여 3scale을 계속 업그레이드 하려면 지침을 따르십시오.

7.2.3.1. Redis Enterprise 사용

  1. OpenShift에 배포된 Redis Enterprise를 사용하여 다음과 같은 세 가지 redis-enterprise 인스턴스를 사용하십시오.

    1. system-redis 시크릿을 편집합니다.

      1. 고유한 값을 MESSAGE_BUS_NAMESPACENAMESPACE 로 설정합니다.
      2. URLMESSAGE_BUS_URL 을 동일한 데이터베이스로 설정합니다.
    2. backend-redis의 백엔드 데이터베이스를 REDIS_QUES_URL로 설정합니다.
    3. backend-redis 의 세 번째 데이터베이스를 REDIS_STORAGE_URL 로 설정합니다.

7.2.3.2. Redis Sentinel 사용

  1. 3개 또는 4개의 다른 Redis 데이터베이스와 함께 Redis Sentinel을 사용하십시오.

    1. system-redis 시크릿을 편집합니다.

      1. 고유한 값을 MESSAGE_BUS_NAMESPACENAMESPACE 로 설정합니다.
      2. URLMESSAGE_BUS_URL 을 적절한 Redis 그룹으로 설정합니다 (예: redis://:redispwd@mymaster/5)
      3. SENTINEL_HOSTSMESSAGE_BUS_SENTINEL_HOSTS 를 sentinels 호스트 및 포트의 쉼표로 구분된 목록으로 설정합니다(예: :sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722).
      4. SENTINEL_ROLEMESSAGE_BUS_SENTINEL_ROLEmaster로 설정합니다.
  2. 백엔드의 backend-redis 시크릿을 다음 값으로 설정합니다.

    • REDIS_QUEUES_URL
    • REDIS_QUEUES_SENTINEL_ROLE
    • REDIS_QUEUES_SENTINEL_HOSTS
  3. 세 번째 데이터베이스의 변수를 다음과 같이 설정합니다.

    • REDIS_STORAGE_URL
    • REDIS_STORAGE_SENTINEL_ROLE
    • REDIS_STORAGE_SENTINEL_HOSTS

참고

  • system-appsystem-sidekiq 구성 요소는 통계를 검색하기 위해 back-end Redis에 직접 연결합니다.

    • 3scale 2.7부터 이러한 시스템 구성 요소는 sentinels를 사용할 때 back-end Redis(스토리지)에도 연결할 수 있습니다.
  • system-appsystem-sidekiq 구성 요소는 backend-redis 대기열이 아닌 backend-redis 스토리지 사용합니다.

    • 시스템 구성 요소를 변경하면 sentinels가 있는 backend-redis 스토리지를 지원합니다.

7.3. Redis 데이터베이스 분할 및 복제

분할이라고 하는 샤딩(Sharding)은 대규모 데이터베이스를 샤드 (shard)라는 작은 데이터베이스로 분리합니다. 복제를 사용하면 별도의 시스템에서 호스팅되는 동일한 데이터 집합의 사본으로 데이터베이스가 설정됩니다.

샤딩(Sharding)

샤딩을 사용하면 리더 인스턴스를 더 쉽게 추가할 수 있으므로 단일 데이터베이스에 적합하지 않거나 CPU 로드가 100%에 가까운 경우 유용합니다.

3scale용 Redis HA를 사용하면 샤딩이 중요한 두 가지 이유가 있습니다.

  • 많은 양의 데이터를 분할하고 스케일링하고 특정 인덱스의 shard 수를 조정하여 병목 현상을 방지합니다.
  • 다른 노드에 작업을 분산하므로 여러 머신이 동일한 쿼리에서 작업하는 경우와 같이 성능이 향상됩니다.

클러스터 모드가 비활성화된 Redis 데이터베이스 샤딩의 세 가지 주요 솔루션은 다음과 같습니다.

  • Amazon ElastiCache
  • Redis sentinels를 통한 표준 Redis
  • Redis Enterprise

복제

Redis 데이터베이스 복제를 통해 데이터 세트를 다른 시스템에 복제하여 중복성을 확보할 수 있습니다. 복제를 사용하면 리더가 중단될 때 Redis를 계속 작업할 수 있습니다. 그런 다음 단일 인스턴스인 리더에서 데이터를 가져와 고가용성을 보장합니다.

3scale용 Redis HA를 사용하면 데이터베이스 복제가 기본 샤드의 고가용성 복제본을 보장합니다. 운영 원칙에는 다음이 포함됩니다.

  • 기본 shard가 실패하면 복제본 shard가 자동으로 새 기본 shard로 승격됩니다.
  • 원래 기본 shard를 복구하면 자동으로 새 기본 shard의 복제본 shard가 됩니다.

Redis 데이터베이스 복제의 세 가지 주요 솔루션은 다음과 같습니다.

  • Redis Enterprise
  • Amazon ElastiCache
  • Redis sentinels를 통한 표준 Redis

twemproxy로 분할

Amazon ElastiCache 및 Standard Redis의 경우 sharding은 키를 기반으로 데이터를 분할해야 합니다. 특정 키에 대해 찾을 shard(예: Tw emproxy )를 알고 있는 프록시 구성 요소가 필요합니다. nutcracker라고도 하는 twemproxy 는 특정 키 또는 해당 키에 할당된 서버 맵을 기반으로 shard를 찾는 Redis 프로토콜의 경량 프록시 솔루션입니다. twemproxy 를 사용하여 Amazon ElastiCache 또는 Standard Redis 인스턴스에 분할 기능을 추가하면 다음과 같은 이점이 있습니다.

  • 여러 서버에서 자동으로 데이터 분할 기능
  • 여러 해시 모드 지원 및 일관된 해시 및 배포
  • 클라이언트가 사용 가능한 첫 번째 프록시 서버에 연결할 수 있는 여러 인스턴스에서 실행할 수 있는 기능
  • 백엔드의 캐싱 서버에 대한 연결 수 감소
참고

Redis Enterprise는 자체 프록시를 사용하므로 twemproxy 가 필요하지 않습니다.

추가 리소스

7.4. 추가 정보

8장. 외부 MySQL 데이터베이스 구성

이 가이드에서는 6장. 3scale High Availability 및 evaluation 템플릿 에 대한 MySQL 데이터베이스를 외부화하는 데 필요한 정보를 제공합니다. 이 작업은 default amp.yml 파일을 사용하여 수행할 수 있습니다. 이는 기본 system-mysql pod를 사용하여 네트워크 또는 파일 시스템과 같은 여러 인프라 문제가 있는 경우 유용합니다.

이 접근 방식과 6장. 3scale High Availability 및 evaluation 템플릿 의 차이점은 Red Hat 3scale API Management가 처음에 default amp.yml 템플릿을 사용하는 경우 MySQL 데이터베이스를 외부화하는 방법을 제공한다는 것입니다.

참고

Red Hat은 외부 MySQL 데이터베이스를 사용하는 3scale 구성을 지원합니다. 그러나 데이터베이스 자체는 지원 범위에 포함되지 않습니다.

사전 요구 사항

  • 관리자 권한이 있는 계정을 사용하여 OpenShift Container Platform 3.11 클러스터에 액세스할 수 있습니다.
  • OpenShift 클러스터에 3scale 인스턴스 설치 2장. OpenShift에 3scale 설치을 참조하십시오.

HA(고가용성)에 대한 외부 MySQL 데이터베이스를 구성하려면 다음 섹션에 설명된 단계를 수행합니다.

8.1. 외부 MySQL 데이터베이스 제한 사항

MySQL 데이터베이스를 외부화하는 프로세스에는 제한이 있습니다.

3scale 온-프레미스 버전

3scale의 2.5 온-프레미스 및 2.6 온-프레미스 버전에서 테스트 및 검증되었습니다.

MySQL 데이터베이스 사용자

URL은 다음 형식이어야 합니다.

<database_scheme>://<admin_user>:<admin_password>@<database_host>/<database_name>

<admin_user><database_name> 논리 데이터베이스에 대한 전체 권한이 있는 외부 데이터베이스의 기존 사용자여야 합니다. <database_name> 은 외부 데이터베이스의 기존 논리적 데이터베이스여야 합니다.

MySQL 호스트

호스트 이름 대신 외부 MySQL 데이터베이스의 IP 주소를 사용하거나 확인하지 않습니다. 예를 들어 mysql.mydomain.com 대신 1.1.1.1 을 사용합니다.

8.2. MySQL 데이터베이스 외부 지정

다음 단계를 사용하여 MySQL 데이터베이스를 완전히 외부화합니다.

주의

그러면 프로세스가 진행되는 동안 환경에서 다운타임이 발생합니다.

절차

  1. 3scale 온-프레미스 인스턴스가 호스팅되는 OpenShift 노드에 로그인하고 해당 프로젝트로 변경합니다.

    oc login -u <user> <url>
    oc project <3scale-project>

    <user>, <url>, <3scale-project> 를 사용자 고유의 자격 증명 및 프로젝트 이름으로 바꿉니다.

  2. 표시된 순서에 따라 모든 pod를 축소합니다. 이는 데이터 손실을 방지 할 것입니다.

    3scale 온-프레미스 중지

    OpenShift 웹 콘솔 또는 CLI(명령줄 인터페이스)에서 모든 배포 구성을 다음 순서로 0개의 복제본으로 축소합니다.

    • 3scale 2.6 이전 버전의 경우 apicast-wildcard-routerzync 3scale 2.6 이상 버전의 경우 zync-quezync
    • apicast-stagingapicast-production.
    • system-sidekiq, backend-cron, system-sphinx.

      • 3scale 2.3에는 system-resque가 포함되어 있습니다.
    • system-app.
    • backend-listenerbackend-worker.
    • backend-redis,system-memcache,system-mysql,system-redis, zync-database.

      다음 예제에서는 apicast-wildcard-routerzync 에 대해 CLI에서 이 작업을 수행하는 방법을 보여줍니다.

      oc scale dc/apicast-wildcard-router --replicas=0
      oc scale dc/zync --replicas=0
      참고

      각 단계에 대한 배포 구성은 동시에 축소할 수 있습니다. 예를 들어 apicast-wildcard-routerzync를 함께 축소할 수 있습니다. 그러나 다음 항목을 축소하기 전에 각 단계의 Pod가 종료될 때까지 기다리는 것이 좋습니다. 3scale 인스턴스는 완전히 다시 시작될 때까지 완전히 액세스할 수 없습니다.

  3. 3scale 프로젝트에서 실행 중인 Pod가 없는지 확인하려면 다음 명령을 사용합니다.

    oc get pod

    명령에서 리소스를 찾을 수 없음을 반환해야 합니다.

  4. 다음 명령을 사용하여 데이터베이스 수준 Pod를 다시 확장합니다.

    oc scale dc/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1
  5. 다음 단계를 진행하기 전에 system-mysql pod를 통해 외부 MySQL 데이터베이스에 로그인할 수 있는지 확인합니다.

    oc rsh system-mysql-<system_mysql_pod_id>
    mysql -u root -p -h <host>
    • <system_mysql_pod_id>: system-mysql pod의 식별자입니다.
    • 사용자는 항상 root여야 합니다. 자세한 내용은 External MySQL 데이터베이스 제한 사항을 참조하십시오.

      1. CLI에 mysql>이 표시됩니다. exit을 입력한 다음 return을 누릅니다. 다음 프롬프트에서 exit을 다시 입력하여 OpenShift 노드 콘솔로 돌아갑니다.
  6. 다음 명령을 사용하여 전체 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
    • <system_mysql_pod_id>를 고유한 system-mysql Pod ID 로 바꿉니다.
    • 다음 예제와 같이 system-mysql-dump.sql 파일에 유효한 MySQL 수준 덤프가 포함되어 있는지 확인합니다.

      $ head -n 10 system-mysql-dump.sql
      -- MySQL dump 10.13  Distrib 5.7.24, for Linux (x86_64)
      --
      -- Host: localhost    Database:
      -- ------------------------------------------------------
      -- Server version   5.7.24
      
      /*!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 */;
  7. system-mysql pod를 축소하고 0(영) 복제본으로 둡니다.

    oc scale dc/system-mysql --replicas=0
  8. 은 URL mysql2://root:<password>@<host>/system 와 동등한 base64 를 찾아 <password><host> 를 적절하게 바꿉니다.

    echo "mysql2://root:<password>@<host>/system" | base64
  9. 원격 MySQL 데이터베이스에 기본 'user'@'%' 를 생성합니다. SELECT 권한만 있으면 됩니다. 또한 동등한 base64를 찾을 수 있습니다.

    echo "user" | base64
    echo "<password>" | base64
    • <password>를 'user'@'%'의 암호로 바꿉니다.
  10. 백업을 수행하고 OpenShift 시크릿 system-database를 편집합니다.

    oc get secret system-database -o yaml > system-database-orig.bkp.yml
    oc edit secret system-database
    • URL: [step-8]의 값으로 바꿉니다.
    • DB_USERDB_PASSWORD: 둘 다 이전 단계의 값을 사용합니다.
  11. system-mysql-dump.sql을 원격 데이터베이스 서버로 전송하고 덤프를 가져옵니다. 명령을 사용하여 가져옵니다.
  12. 아래 명령을 사용하여 system-mysql-dump.sql 을 원격 데이터베이스 서버에 전송하고 덤프를 서버로 가져옵니다.

    mysql -u root -p < system-mysql-dump.sql
  13. system 이라는 새 데이터베이스가 생성되었는지 확인합니다.

    mysql -u root -p -se "SHOW DATABASES"
  14. 모든 Pod를 올바른 순서로 확장하는 Start 3scale 온-프레미스 에 대한 다음 지침을 사용합니다.

    3scale 온-프레미스 시작

    • backend-redis,system-memcache,system-mysql,system-redis, zync-database.
    • backend-listenerbackend-worker.
    • system-app.
    • system-sidekiq, backend-cron, system-sphinx

      • 3scale 2.3에는 system-resque가 포함되어 있습니다.
    • apicast-stagingapicast-production.
    • 3scale 2.6 이전 버전의 경우 apicast-wildcard-routerzync 3scale 2.6 이상 버전의 경우 zync-quezync

      다음 예제에서는 backend-redis,system-memcache,system-mysql,system-redis, zync-database 에 대해 CLI에서 이 작업을 수행하는 방법을 보여줍니다.

      oc scale dc/backend-redis --replicas=1
      oc scale dc/system-memcache --replicas=1
      oc scale dc/system-mysql --replicas=1
      oc scale dc/system-redis --replicas=1
      oc scale dc/zync-database --replicas=1

      이제 system-app pod가 문제 없이 가동 및 실행되어야 합니다.

  15. 검증 후 표시된 순서대로 다른 포드를 확장합니다.
  16. system-mysql DeploymentConfig 오브젝트를 백업합니다. 모든 것이 제대로 실행되고 있는지 확인한 후 며칠 후에 삭제할 수 있습니다. system-mysql DeploymentConfig를 삭제하면 향후 이 절차가 다시 수행되는 경우 향후 혼동이 발생하지 않습니다.

8.3. 롤백

system-app pod가 완전히 온라인 상태가 아니며 14단계 후에 확인 또는 처리할 수 없는 근본 원인이 있는 경우 롤백 절차를 수행합니다.

  1. system-database-orig.bkp.yml의 원래 값을 사용하여 시크릿 system-database를 편집합니다. [단계-10] 을 참조하십시오.

    oc edit secret system-database

    URL, DB_USER, DB_PASSWORD를 원래 값으로 바꿉니다.

  2. 모든 pod를 축소한 다음 system-mysql을 포함하여 다시 확장합니다. system-app pod 및 기타 pod를 시작한 후 다시 실행해야 합니다. 다음 명령을 실행하여 모든 Pod가 백업되어 실행 중인지 확인합니다.

    oc get pods -n <3scale-project>

8.4. 추가 정보

9장. Oracle Database로 3scale 시스템 이미지 설정

참고
  • Oracle Database는 3scale의 템플릿 기반 설치를 수행할 때 OCP(OpenShift Container Platform) 3.11에서만 지원됩니다.
  • Oracle Database를 사용하여 Operator를 사용하여 3scale 배포를 수행하는 경우 Oracle Database를 사용하여 3scale Operator 설치를 참조하십시오.
  • 3scale 2.10부터 Oracle Database 12c는 더 이상 지원되지 않습니다.
  • 지원되는 구성에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.

이 섹션에서는 Red Hat 3scale API Management 관리자가 Oracle 데이터베이스를 사용하여 3scale 시스템 이미지를 설정하는 방법에 대해 설명합니다. 기본적으로 3scale 2.11에는 MySQL 데이터베이스에 구성 데이터를 저장하는 system이라는 구성 요소가 있습니다. 기본 데이터베이스를 재정의하고 정보를 외부 Oracle 데이터베이스에 저장할 수 있습니다. 이 장의 단계에 따라 자체 Oracle Database 클라이언트 바이너리를 사용하여 사용자 지정 시스템 컨테이너 이미지를 빌드하고 OpenShift에 3scale을 배포합니다.

사전 요구 사항

  1. Instant Client 다운로드 페이지에서 다음을 다운로드합니다.

  2. 다음 Oracle 소프트웨어 구성 요소에 대해 Red Hat 3scale API Management 지원 구성을 확인하십시오.

    • Oracle Instant Client 패키지: Basic 또는 Basic Light
    • Oracle Instant Client 패키지: SDK
    • Oracle Instant Client 패키지: ODBC

표 9.1. Oracle 19c 예제 3scale 패키지

Oracle 19c 패키지 이름압축 파일 이름

Basic

instantclient-basic-linux.x64-19.8.0.0.0dbru.zip

Basic Light

instantclient-basiclite-linux.x64-19.8.0.0.0dbru.zip

SDK

instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip

ODBC

instantclient-odbc-linux.x64-19.8.0.0.0dbru.zip

표 9.2. ppc64le 및 3scale의 Oracle 19c 예제 패키지

Oracle 19c 패키지 이름압축 파일 이름

Basic

instantclient-basic-linux.leppc64.c64-19.3.0.0.0dbru.zip

Basic Light

instantclient-basiclite-linux.leppc64.c64-19.3.0.0.0dbru.zip

SDK

instantclient-sdk-linux.leppc64.c64-19.3.0.0.0dbru.zip

ODBC

instantclient-odbc-linux.leppc64.c64-19.3.0.0.0dbru.zip

Oracle Database를 사용하여 3scale 시스템 이미지를 설정하려면 다음 섹션에 설명된 단계를 수행합니다.

9.1. Oracle 데이터베이스 준비

이 섹션에서는 Oracle 데이터베이스 준비를 위한 단계를 제공합니다.

사전 요구 사항

  • OpenShift 클러스터에서 액세스할 수 있는 Oracle 데이터베이스의 지원되는 버전입니다.
  • 설치 절차를 위해 Oracle Database System 사용자에 대한 액세스 권한

절차

  1. 새 데이터베이스를 만듭니다.

    Oracle Database로 3scale을 구성하려면 다음 설정을 사용합니다.

    ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;
  2. 데이터베이스 세부 정보를 수집합니다.

    3scale 구성에 대한 다음 정보가 필요합니다.

    • Oracle Database URL 주소입니다.
    • Oracle Database. 서비스 이름
    • Oracle Database 시스템 암호입니다.

      DATABASE_URL 매개변수는 oracle-enhanced://${user}:${password}@${host}:${port}/${database} 형식을 따라야 합니다.

예제

DATABASE_URL="oracle-enhanced://user:password@my-oracle-database.com:1521/threescalepdb"

추가 리소스

  • Oracle Database에서 새 데이터베이스를 만드는 방법에 대한 자세한 내용은 Oracle 설명서를 참조하십시오.

9.2. 시스템 이미지 빌드

이 섹션에서는 시스템 이미지를 빌드하는 단계를 제공합니다.

사전 요구 사항

절차

  1. GitHub 리포지토리에서 3scale OpenShift 템플릿을 다운로드하고 아카이브를 추출합니다.

    tar -xzf 3scale-amp-openshift-templates-3scale-2.11.1-GA.tar.gz
  2. Oracle Database Instant Client 패키지 파일을 3scale-amp-openshift-templates-3scale-2.11.1/amp/system-oracle/oracle-client-files 디렉터리에 배치합니다.
  3. 3scale 2.11 amp.yml 템플릿을 다운로드합니다.
  4. -f 옵션을 사용하여 oc new-app 명령을 실행하고 build.yml OpenShift 템플릿을 지정합니다.

    $ oc new-app -f build.yml
  5. oc new-app 명령을 -f 옵션과 함께 실행하여 amp.yml OpenShift 템플릿을 표시하고 -p 옵션을 사용하여 OpenShift 클러스터 도메인으로 WILDCARD_DOMAIN 매개변수를 지정합니다.

    $ oc new-app -f amp.yml -p WILDCARD_DOMAIN=mydomain.com
  6. 다음 oc patch 명령을 입력하고 SYSTEM_PASSWORDOracle 데이터베이스 준비에 설정한 Oracle Database system 암호로 바꿉니다.

    $ oc patch dc/system-app -p '[{"op": "add", "path": "/spec/strategy/rollingParams/pre/execNewPod/env/-", "value": {"name": "ORACLE_SYSTEM_PASSWORD", "value": "SYSTEM_PASSWORD"}}]' --type=json
    
    $ oc patch dc/system-app -p '{"spec": {"strategy": {"rollingParams": {"post":{"execNewPod": {"env": [{"name": "ORACLE_SYSTEM_PASSWORD", "value": "SYSTEM_PASSWORD"}]}}}}}}'
  7. Oracle 데이터베이스 준비에 지정된 DATABASE_URL을 입력하여 Oracle 데이터베이스를 가리키도록 다음 명령을 입력합니다.

    $ oc patch secret/system-database -p '{"stringData": {"URL": "DATABASE_URL"}}'
  8. oc start-build 명령을 입력하여 새 시스템 이미지를 빌드합니다.

    $ oc start-build 3scale-amp-system-oracle --from-dir=.
  9. 빌드가 완료될 때까지 기다립니다. 빌드 상태를 확인하려면 다음 명령을 실행합니다.

    $ oc get build <build-name> -o jsonpath="{.status.phase}"
    1. 빌드가 완료 상태가 될 때까지 기다립니다.

9.2.1. ImageChange 트리거 업데이트

새로운 Oracle 기반 시스템 이미지를 사용하도록 System 이미지를 사용하는 DeploymentConfig의 ImageChange 트리거를 업데이트합니다.

사전 요구 사항

절차

  1. 현재 3scale 릴리스를 환경 변수에 저장합니다.

    $ export THREESCALE_RELEASE=2.11
  2. system-app ImageChange 트리거를 업데이트합니다.

    $ oc set triggers dc/system-app --from-image=amp-system:${THREESCALE_RELEASE} --containers=system-master,system-developer,system-provider --remove
    
    $ oc set triggers dc/system-app --from-image=amp-system:${THREESCALE_RELEASE}-oracle --containers=system-master,system-developer,system-provider

    이렇게 하면 system-app DeploymentConfig가 다시 배포됩니다. 재배포될 때까지 기다린 후 해당 새 Pod가 준비되고 이전 Pod가 중지되었을 때까지 기다립니다.

  3. system-sidekiq ImageChange 트리거를 업데이트합니다.

    $ oc set triggers dc/system-sidekiq --from-image=amp-system:${THREESCALE_RELEASE} --containers=system-sidekiq,check-svc --remove
    
    $ oc set triggers dc/system-sidekiq --from-image=amp-system:${THREESCALE_RELEASE}-oracle --containers=system-sidekiq,check-svc

    이렇게 하면 system-sidekiq DeploymentConfig가 다시 배포됩니다. 재배포될 때까지 기다린 후 해당 새 Pod가 준비되고 이전 Pod가 중지되었을 때까지 기다립니다.

  4. system-sphinx ImageChange 트리거를 업데이트합니다.

    $ oc set triggers dc/system-sphinx --from-image=amp-system:${THREESCALE_RELEASE} --containers=system-sphinx,system-master-svc --remove
    
    $ oc set triggers dc/system-sphinx --from-image=amp-system:${THREESCALE_RELEASE}-oracle --containers=system-sphinx,system-master-svc

    이렇게 하면 system-sphinx DeploymentConfig가 다시 배포됩니다. 재배포될 때까지 기다린 후 해당 새 Pod가 준비되고 이전 Pod가 중지되었을 때까지 기다립니다.

    참고

    다음 단계는 선택 사항입니다. 3scale 설치 후 이를 사용하여 ORACLE_SYSTEM_PASSWORD 를 제거합니다.

  5. Oracle Database로 3scale 시스템 이미지를 설정한 경우 system-app DeploymentConfig에서 ORACLE_SYSTEM_PASSWORD 를 제거합니다. 3scale의 새 버전으로 업그레이드할 때까지 다시 필요하지 않습니다.

    $ oc set env dc/system-app ORACLE_SYSTEM_PASSWORD-

추가 리소스

3scale 및 Oracle Database 지원에 대한 자세한 내용은 Red Hat 3scale API Management 지원 구성을 참조하십시오.

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.