3scale 설치

Red Hat 3scale API Management 2.8

3scale API Management 설치 및 구성.

초록

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

머리말

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

1장. OpenShift에 3scale 설치

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

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

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

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

참고

운영자 또는 템플릿을 통해 3scale을 배포하는지 여부에 관계없이 먼저 Red Hat 컨테이너 레지스트리에 대한 레지스트리 인증을 구성해야 합니다. 컨테이너 이미지의 경우 registry.redhat.io로 인증 에서 참조하십시오.

사전 요구 사항

  • UTC(Coordinated Universal Time)에 대해 3scale 서버를 구성해야 합니다.

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

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

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

1.1.1. 환경 요구사항

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

1.1.1.1. 로컬 파일 시스템 스토리지 사용

영구 볼륨:

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

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

1.1.1.2. Amazon Simple Storage Service(Amazon S3) 스토리지 사용

영구 볼륨:

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

스토리지:

  • Amazon S3 버킷 1개

1.1.2. 하드웨어 요구 사항

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

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

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

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

절차

  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

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

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

참고

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

사전 요구 사항

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

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

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

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

1.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 myproject
  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으로 인증하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

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

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

참고

두 옵션 모두 레지스트리 인증을 사용하므로 OpenShift에 템플릿 또는 운영자를 통해 배포하기 전에 아래에 설명된 단계를 따라야 하는 3scale 2.8의 요구 사항입니다.

절차

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

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

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

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

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

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

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

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

주의

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

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

  • 토큰 재생성: 권한이 부여된 사용자가 서비스 계정 과 연결된 암호를 재설정할 수 있습니다.

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

  • 업데이트 설명: 권한이 부여된 사용자가 서비스 계정 의 설명을 업데이트할 수 있습니다.
  • 계정 삭제: 승인된 사용자가 서비스 계정을 제거할 수 있습니다.

1.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 배포가 성공하면 로그인 인증 정보가 작동합니다.

1.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 포털 URL 에서 새 테넌트를 만들 수 있습니다 : 'master.${wildcardDomain}

1.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: Default: HTTPS - AWS S3 호환 공급자 끝점 프로토콜.
    • AWS_PATH_STYLE: Default: 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 배포가 성공하면 로그인 인증 정보가 작동합니다.

1.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 배포가 성공하면 로그인 및 인증 정보가 작동합니다.

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

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

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

이름설명기본값필수 여부

APP_LABEL

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

3scale-api-management

제공됨

ZYNC_DATABASE_PASSWORD

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

해당 없음

제공됨

ZYNC_SECRET_KEY_BASE

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

해당 없음

제공됨

ZYNC_AUTHENTICATION_TOKEN

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

해당 없음

제공됨

AMP_RELEASE

3scale 릴리스 태그입니다.

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

제공됨

MEMCACHED_IMAGE

사용할 Memcached 이미지

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

제공됨

POSTGRESQL_IMAGE

사용할 Postgresql 이미지

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

제공됨

AMP_SYSTEM_IMAGE

사용할 3scale 시스템 이미지

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

제공됨

AMP_BACKEND_IMAGE

사용할 3scale 백엔드 이미지

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

제공됨

AMP_APICAST_IMAGE

사용할 3scale APIcast 이미지

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

제공됨

AMP_ZYNC_IMAGE

사용할 3scale Zync 이미지

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

제공됨

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

제공됨

1.6. OpenShift에서 3scale로 APIcast 사용

APIcast는 3scale 호스팅용 API Manager와 OpenShift Container Platform의 온-프레미스 설치를 통해 사용할 수 있습니다. 구성 절차는 둘 다 다릅니다.

이 섹션에서는 OpenShift에 API Manager를 사용하여 APIcast를 배포하는 방법을 설명합니다.

1.6.1. 3scale이 포함된 기존 OpenShift 클러스터에 APIcast 템플릿 배포

3scale OpenShift 템플릿에는 기본적으로 두 개의 임베디드 APIcast가 포함되어 있습니다. 더 많은 API 게이트웨이가 필요하거나 별도의 APIcast 배포가 필요한 경우 OpenShift 클러스터에 추가 APIcast 템플릿을 배포할 수 있습니다.

OpenShift 클러스터에 추가 API 게이트웨이를 배포하려면 다음 단계를 수행합니다.

절차

  1. 다음 구성을 사용하여 액세스 토큰을 생성합니다.

    • 계정 관리 API로 범위
    • 읽기 전용 액세스 권한
  2. APIcast 클러스터에 로그인합니다.

    oc login
  3. APIcast가 3scale과 통신할 수 있는 시크릿을 생성합니다. 3scale 배포의 액세스 토큰, 테넌트 이름, 와일드카드 도메인을 사용하여 create secretapicast-configuration-url-secret 매개변수를 지정합니다.

    oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>
    참고

    TENANT_NAME 은 에서 관리 포털을 사용할 수 있는 루트의 이름입니다. TENANT_NAME의 기본값은 3scale입니다. 3scale 배포에서 사용자 지정 값을 사용한 경우 여기에서 해당 값을 사용해야 합니다.

  4. oc new-app 명령을 사용하여 APIcast 템플릿을 가져와 apicast.yml 파일로 --file 옵션을 지정합니다.

    oc new-app --file /opt/amp/templates/apicast.yml
    참고

    먼저 노드 및 인타이틀먼트 구성에 설명된 대로 APIcast 템플릿을 설치합니다.

1.6.2. 다른 OpenShift 클러스터에서 APIcast 연결

3scale 클러스터 외부에서 다른 OpenShift 클러스터에 APIcast를 배포하는 경우 공용 경로를 통해 연결해야 합니다.

절차

  1. 다음 구성을 사용하여 액세스 토큰을 생성합니다.

    • 계정 관리 API로 범위
    • 읽기 전용 액세스 권한
  2. APIcast 클러스터에 로그인합니다.

    oc login
  3. APIcast가 3scale과 통신할 수 있는 시크릿을 생성합니다. 3scale 배포의 액세스 토큰, 테넌트 이름, 와일드카드 도메인을 사용하여 create secretapicast-configuration-url-secret 매개변수를 지정합니다.

    oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>
    참고

    TENANT_NAME 은 에서 관리 포털을 사용할 수 있는 루트의 이름입니다. TENANT_NAME의 기본값은 3scale입니다. 3scale 배포에서 사용자 지정 값을 사용한 경우 해당 값을 사용해야 합니다.

  4. oc new-app 명령을 사용하여 다른 OpenShift 클러스터에 APIcast를 배포합니다. --file 옵션과 apicast.yml 파일의 경로를 지정합니다.

    oc new-app --file /path/to/file/apicast.yml

1.6.3. 포함된 APIcast의 기본 동작 변경

외부 APIcast 배포에서는 APIcast OpenShift 템플릿에서 템플릿 매개 변수를 변경하여 기본 동작을 수정할 수 있습니다.

임베디드 APIcast 배포에서 3scale 및 APIcast는 단일 템플릿에서 배포됩니다. 포함된 APIcast 배포의 기본 동작을 변경하려면 배포 후 환경 변수를 수정해야 합니다.

1.6.4. 내부 서비스 경로를 통해 단일 OpenShift 클러스터에 여러 APIcast 배포 연결

동일한 OpenShift 클러스터에 여러 APIcast 게이트웨이를 배포하는 경우 기본 외부 경로 구성 대신 백엔드 리스너 서비스를 통해 내부 경로를 사용하여 연결하도록 구성할 수 있습니다.

내부 서비스 경로를 통해 연결하려면 OpenShift 소프트웨어 정의 네트워킹(SDN) 플러그인이 설치되어 있어야 합니다. 연결하는 방법은 설치된 SDN에 따라 다릅니다.

ovs-subnet

ovs-subnet OpenShift SDN 플러그인을 사용하는 경우 다음 단계를 수행하여 내부 경로를 통해 연결합니다.

절차

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

    oc login
  2. 다음 명령을 입력하여 backend-listener 경로 URL을 표시합니다.

    oc get route backend
  3. oc new-app 명령을 apicast.yml:로 입력합니다.

    oc new-app -f apicast.yml

ovs-multitenant

ovs-multitenant OpenShift SDN 플러그인을 사용하는 경우 다음 단계를 수행하여 내부 경로를 통해 연결합니다.

절차

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

    oc login
  2. 관리자로 pod-networkjoin-projects 옵션을 사용하여 oadm 명령을 지정하여 두 프로젝트 간 통신을 설정합니다.

    oadm pod-network join-projects --to=<3SCALE_PROJECT> <APICAST_PROJECT>
  3. 다음 명령을 입력하여 backend-listener 경로 URL을 표시합니다.

    oc get route backend
  4. oc new-app 명령을 apicast.yml:로 입력합니다.

    oc new-app -f apicast.yml

추가 리소스

OpenShift SDN 및 프로젝트 네트워크 격리에 대한 자세한 내용은 Openshift SDN을 참조하십시오.

1.6.5. 다른 배포에서 APIcast 연결

Docker에 APIcast를 배포하는 경우 THREESCALE_PORTAL_ENDPOINT 매개변수를 URL로 설정하고 OpenShift에 배포된 3scale 관리 포털의 토큰을 액세스하여 OpenShift에 배포된 3scale에 APIcast를 연결할 수 있습니다. 이 경우 BACKEND_ENDPOINT_OVERRIDE 매개변수를 설정할 필요가 없습니다.

추가 리소스

자세한 내용은 Docker 컨테이너 환경에 APIcast 배포를 참조하십시오.

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

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

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

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

사전 요구 사항

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

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

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

절차

  1. 카탈로그 > 설치된 Operator를 클릭합니다.

    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:
        wildcardDomain: apimanager-sample
        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

1.7.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 필드에 대한 자세한 내용은 참조 설명서를 참조하십시오.

1.7.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}에서 새 테넌트를 만들 수 있습니다.

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

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

참고

.spec.highAvailability.enabled 는 외부 데이터베이스에만 사용됩니다.

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 데이터베이스에 대한 연결 끝점을 지정합니다.

    • 자세한 내용은 Zync 데이터베이스 시크릿 을 참조하십시오.
    • spec.highAvailability.externalZyncDatabaseEnabled 속성을 true로 설정하여 zync 데이터베이스를 외부 데이터베이스로 지정합니다.

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

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

사전 요구 사항

1.8.1. 기본 배포 구성

기본적으로 다음 배포 구성 옵션이 적용됩니다.

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

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

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

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

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

1.8.2. 평가 설치

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

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

참조를 위해 APIManager 사용자 정의 리소스를 확인합니다.

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

외부 데이터베이스 설치는 고가용성(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 시크릿을 사용하여 외부 데이터베이스에 대해 다음 연결 설정을 제공해야 합니다.

1.8.3.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 여야 합니다.

1.8.3.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 여야 합니다.

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

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

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

1.8.4. Amazon Simple Storage Service 3scale Filestorage 설치

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

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

1.8.4.1. Amazon 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

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

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

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

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

1.8.5. PostgreSQL 설치

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

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

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

1.8.6. 조정

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

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

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

1.8.6.1. 리소스

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

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

1.8.6.2. 백엔드 복제본

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

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

1.8.6.3. APIcast 복제본

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

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

1.8.6.4. 시스템 복제본

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

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

1.8.6.5. Zync 복제본

Zync 앱 및 que 구성 요소 Pod 수

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

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

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

1.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 배포를 시작합니다.

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

1.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 컨테이너 레지스트리 대신 docker.io Docker 레지스트리를 참조합니다.

이는 시스템에 예기치 않은 버전의 Docker 컨테이너 환경이 포함된 경우 발생합니다.

해결책

절차

적절한 Docker 컨테이너 버전 을 사용합니다.

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

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

문제

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

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

원인

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

해결책

절차

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

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

문제

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

원인

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

해결책

절차

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

1.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장. APIcast 설치

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

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

사전 요구 사항

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

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

2.1. APIcast 배포 옵션

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

2.2. APIcast 환경

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

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

2.3. 통합 설정 구성

[your_API_name] > Integration > Configuration 으로 이동합니다.

구성 페이지에서 통합 설정을 볼 수 있습니다.

기본적으로 다음 값을 찾습니다.By default, you find these values:

  • 배포 옵션: 내장 APIcast.
  • 인증 모드: API 키.

오른쪽 상단에 있는 통합 설정 편집을 클릭하여 이러한 설정을 변경할 수 있습니다.

2.4. 서비스 구성

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

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

2.4.1. API 백엔드 선언

일반적으로 API의 프라이빗 기본 URL은 관리하는 도메인의 https://api-backend.yourdomain.com:443 (yourdomain.com)과 같습니다. 예를 들어, Twitter API와 통합하려는 경우 개인 기본 URL은 https://api.twitter.com/ 입니다.

이 예제에서는 3scale에서 호스팅하는 Echo API 를 사용하여 경로를 수락하고 요청에 대한 정보를 반환합니다(path, request parameters, headers 등). 프라이빗 기본 URL은 https://echo-api.3scale.net:443입니다.

절차

  • 프라이빗(관리되지 않음) API가 작동하는지 테스트합니다. 예를 들어, Echo API의 경우 curl 명령을 사용하여 다음 호출을 수행할 수 있습니다.

    curl "https://echo-api.3scale.net:443"

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

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

2.4.2. 인증 설정 구성

AUTHENTICATION SETTINGS 섹션에서 API에 대한 인증 설정을 구성할 수 있습니다.

다음 필드는 모두 선택 사항입니다.

필드설명

호스트 헤더

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

시크릿 토큰

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

인증 정보 위치

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

인증 사용자 키

자격 증명 위치와 연결된 사용자 키 설정

오류

다음 오류에 대한 응답 코드, 콘텐츠 유형 및 응답 본문을 정의합니다. 인증에 실패, 인증이 누락됨, 일치하지 않음.

2.4.3. API 테스트 호출 구성

절차

  1. 호스팅된 스테이징 환경에 대한 테스트 호출을 구성합니다.
  2. API test GET 요청 필드에 기존 경로를 입력합니다(예: /v1/word/good.json).
  3. 페이지의 오른쪽 하단에서 제품 업데이트 버튼을 클릭하여 설정을 저장합니다.

    1. 그러면 3scale 호스팅 스테이징 환경에 APIcast 구성이 배포됩니다. 모든 항목이 올바르게 구성된 경우 왼쪽의 수직선이 녹색으로 표시되도록 해야 합니다.

      참고

      셀프 관리 배포 옵션 중 하나를 사용하는 경우 GUI에서 구성을 저장하고 스테이징 또는 프로덕션 공용 기본 URL 필드에 올바른 호스트를 추가하여 배포된 API 게이트웨이를 가리키는지 확인합니다. 프로덕션 게이트웨이에 대한 호출을 만들기 전에승격 v.x to Production 버튼을 클릭해야 합니다.

  4. staging 섹션의 하단에서 샘플 curl 을 찾아 콘솔에서 실행합니다.

    curl "https://XXX.staging.apicast.io:443/v1/word/good.json?user_key=YOUR_USER_KEY"
    참고

    위의 내용과 동일한 응답을 받아야 하지만 이번에는 요청이 3scale 호스팅 APIcast 인스턴스를 통과합니다. 참고: 서비스에 유효한 자격 증명이 있는 애플리케이션이 있는지 확인해야 합니다. 에서 생성된 기본 API 서비스를 3scale로 사용하는 경우 이미 애플리케이션이 있어야 합니다. 그렇지 않으면 test curl에서 USER_KEY 또는 APP_IDAPP_KEY 값이 표시되면 이 서비스에 대한 애플리케이션을 먼저 만들어야 합니다.

    이제 API를 3scale과 통합했습니다.

3scale 호스팅 APIcast 게이트웨이는 자격 증명 유효성 검사를 수행하고 애플리케이션 애플리케이션 계획에 대해 정의한 속도 제한을 적용합니다. 인증 정보 없이 호출하거나 잘못된 인증 정보를 사용하려 하면 오류 메시지가 표시됩니다.

2.5. 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로 표시되는지 확인합니다.

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

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

사전 요구 사항

  • 관리자 권한이 있는 OCP(OpenShift Container Platform) 4.x 이상.
  • 먼저 APIcast Operator 설치 단계를 수행해야 합니다.

절차

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

2.6.1. APIcast 배포 및 구성 옵션

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

2.6.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
2.6.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"
2.6.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를 구성할 수도 있습니다. 다음 표에서 사용 가능한 필드에 대한 세부 정보:

표 2.1. APIcastExposedHost 참조 테이블

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

host

string

있음

해당 없음

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

tls

[]extensions.IngressTLS

없음

해당 없음

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

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

2.7. APIcast에 대한 WebSocket 프로토콜 지원

Red Hat 3scale API Management는 백엔드 API에 대한 WebSocket 프로토콜 연결에 대한 APIcast 게이트웨이를 지원합니다.

다음 목록은 WebSocket 프로토콜을 구현하려는 경우 고려해야 할 사항입니다.

  • WebSocket 프로토콜은 JSON 웹 토큰(JWT)을 지원하지 않습니다.
  • WebSocket 표준에서는 추가 헤더를 허용하지 않습니다.
  • WebSocket 프로토콜은 HTTP/2 표준의 일부가 아닙니다.

2.7.1. WebSocket 프로토콜 지원

APIcast 구성 정책 체인은 다음과 같습니다.

"policy_chain": [
  { "name": "apicast.policy.websocket" },
  { "name": "apicast.policy.apicast" }
],

API 백엔드는 http[s]' 또는 ws[s]로 정의할 수 있습니다.

2.8. APIcast 게이트웨이의 HTTP/2

Red Hat 3scale API Management는 HTTP/2 및 원격 프로시저 호출(gRPC) 연결에 대한 APIcast 게이트웨이 지원을 제공합니다. HTTP/2 프로토콜을 제어하면 APIcast와 API 백엔드 간의 데이터 통신이 가능합니다.

참고
  • api_key 권한 부여는 사용할 수 없습니다. 대신 JSON Web Token (JWT) 또는 헤더를 사용합니다.
  • gRPC 끝점은 TLS(Transport Layer Security)를 종료합니다.
  • gRPC 정책(HTTP/2)은 정책 체인의 APIcast 정책보다 커야 합니다.

2.8.1. HTTP/2 프로토콜 지원

HTTP/2 종료를 사용하면 APIRuntime이 활성화된 HTTP/2 및 백엔드가 HTTP/1.1 일반 텍스트 또는 TLS가 될 수 있습니다.

정책이 사용되는 HTTP/2 끝점에는 몇 가지 제약 조건이 있습니다.

  • 이 정책이 예상대로 작동하지 않는 경우 끝점은 TLS에서 수신 대기해야 합니다.
  • gRPC 전체 흐름은 TLS 정책이 활성화된 경우에만 작동합니다.

APIcast 구성 정책 체인은 다음과 같습니다.

"policy_chain": [
  { "name": "apicast.policy.grpc" },
  { "name": "apicast.policy.apicast" }
],

2.9. 추가 리소스

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

3장. Red Hat OpenShift에서 APIcast 실행

이 튜토리얼에서는 Red Hat OpenShift에 APIcast API 게이트웨이를 배포하는 방법을 설명합니다.

사전 요구 사항

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

Red Hat OpenShift에서 APIcast를 실행하려면 다음 섹션에 설명된 단계를 수행하십시오.

3.1. Red Hat OpenShift 설정

실행 중인 OpenShift 클러스터가 이미 있는 경우 이 섹션을 생략할 수 있습니다. 그렇지 않은 경우 계속 읽으십시오.

프로덕션 배포의 경우 OpenShift 설치에 대한 지침을 따를 수 있습니다.

이 튜토리얼에서는 다음을 사용하여 OpenShift 클러스터를 설치합니다.

  • Red Hat Enterprise Linux (RHEL) 7
  • Docker 컨테이너 환경 v1.10.3
  • OpenShift Origin CLI(명령줄 인터페이스) - v1.3.1

Red Hat OpenShift를 설정하려면 다음 섹션을 사용하십시오.

3.1.1. Docker 컨테이너 환경 설치

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

AWS EC2 인스턴스에 배포된 RHEL 7의 경우 다음 지침을 사용합니다.

절차

  1. 모든 리포지토리를 나열합니다.

    sudo yum repolist all
  2. *-extras 리포지토리를 찾아 활성화합니다.

    sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
  3. Docker 형식의 컨테이너 이미지를 설치합니다.

    sudo yum install docker docker-registry
  4. /etc/sysconfig/docker 파일에 다음 행을 추가하거나 제거하여 172.30.0.0/16 의 비보안 레지스트리를 추가합니다.

    INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
  5. Docker 서비스를 시작합니다.

    sudo systemctl start docker
  6. 다음 명령을 사용하여 컨테이너 서비스가 실행 중인지 확인합니다.

    sudo systemctl status docker

3.1.2. OpenShift 클러스터 시작

OpenShift 클러스터를 시작하려면 다음을 수행합니다.

절차

  1. OpenShift 릴리스 페이지에서 클라이언트 툴의 안정적인 최신 릴리스 (openshift-origin-client-tools-VERSION-linux-64bit.tar.gz)를 다운로드하여 PATH 에 있는 아카이브에서 추출된 Linux oc 바이너리를 배치합니다.

    참고

    docker 명령은 root 사용자로 실행되므로 root 권한으로 oc 또는 docker 명령을 실행해야 합니다.

  2. docker 명령을 실행하고 다음을 실행할 수 있는 권한이 있는 사용자로 터미널을 엽니다.

    oc cluster up

    출력 하단에서 배포된 클러스터에 대한 정보를 확인할 수 있습니다.

        -- Server Information ...
          OpenShift server started.
          The server is accessible via web console at:
          https://172.30.0.112:8443
    
          You are logged in as:
            User:     developer
            Password: developer
    
          To login as administrator:
            oc login -u system:admin
  3. OpenShift 서버에 할당된 IP 주소를 확인합니다. 이 튜토리얼에서 OPENSHIFT-SERVER-IP 를 참조합니다.

3.1.3. 원격 서버에서 OpenShift 클러스터 설정(선택 사항)

원격 서버에 OpenShift 클러스터를 배포하는 경우 클러스터 시작 시 공용 호스트 이름과 라우팅 접미사를 명시적으로 지정해야 OpenShift 웹 콘솔에 원격으로 액세스할 수 있습니다.

예를 들어 AWS EC2 인스턴스에 배포하는 경우 다음 옵션을 지정해야 합니다.

oc cluster up --public-hostname=ec2-54-321-67-89.compute-1.amazonaws.com --routing-suffix=54.321.67.89.xip.io

여기서 ec2-54-321-67-89.amazonaws.com 은 공용 도메인이며 54.321.67.89 는 인스턴스의 IP입니다. 그러면 https://ec2-54-321-67-89.compute-1.amazonaws.com:8443 에서 OpenShift 웹 콘솔에 액세스할 수 있습니다.

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

참고
  • 템플릿을 사용하는 경우 OCP(OpenShift Container Platform) 3.11에서만 APIcast를 배포할 수 있습니다.
  • Operator 기반 설치는 OCP 버전 4.1 및 4.2에서만 지원됩니다.
  • 지원되는 구성에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.

다음을 사용하여 OpenShift 템플릿을 해제하는 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.8.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.3. OpenShift 콘솔을 통해 경로 생성

OpenShift 콘솔을 통해 경로를 생성하려면 다음을 수행합니다.

절차

  1. 브라우저에서 OpenShift 클러스터의 웹 콘솔을 엽니다.

    https://OPENSHIFT-SERVER-IP:8443/console/

    원격 서버에서 OpenShift 클러스터를 시작한 경우 OPENSHIFT-SERVER-IP 대신 --public-hostname에 지정된 값을 사용합니다.

    OpenShift의 로그인 화면이 표시됩니다.

    참고

    신뢰할 수 없는 웹 사이트에 대한 경고가 표시될 수 있습니다. 이는 유효한 인증서를 구성하지 않고도 보안 프로토콜을 통해 웹 콘솔에 액세스하려고 하기 때문에 이는 예상된 결과입니다. 프로덕션 환경에서 이 문제를 방지해야 하지만 이 테스트 설정에서는 계속 진행하여 이 주소에 대한 예외를 생성할 수 있습니다.

  2. 개발자 인증 정보를 사용하여 로그인하거나 Red Hat OpenShift 설정 섹션에서 가져옵니다.

    위의 명령줄에서 생성한 게이트웨이 프로젝트를 포함하여 프로젝트 목록이 표시됩니다.

    OpenShift 프로젝트

    게이트웨이 프로젝트가 표시되지 않으면 다른 사용자로 만들었을 수 있으며 이 사용자에게 정책 역할을 할당해야 합니다.

  3. 게이트웨이 링크를 클릭하면 개요 탭이 표시됩니다.

    OpenShift는 APIcast용 코드를 다운로드하고 배포를 시작했습니다. 배포가 진행 중일 때 실행 중인 Deployment #1 메시지가 표시될 수 있습니다.

    빌드가 완료되면 UI(사용자 인터페이스)가 새로 고쳐지며 템플릿에 정의된 대로 OpenShift에서 시작한 두 개의 APIcast ( 2 pods )인스턴스를 표시합니다.

    게이트웨이 빌드

    각 APIcast 인스턴스는 시작 시 3scale 관리 포털의 통합 페이지에서 제공한 설정을 사용하여 3scale에서 필요한 구성을 다운로드합니다.

    OpenShift는 두 개의 APIcast 인스턴스를 유지 관리하고 두가지 모두의 상태를 모니터링합니다. 비정상 APIcast 인스턴스는 자동으로 새 APIcast 인스턴스로 교체됩니다.

  4. APIcast 인스턴스가 트래픽을 수신하도록 허용하려면 경로를 생성해야 합니다. 경로 생성을 클릭하여 시작합니다.

    경로 생성

    위의 3scale에 설정한 것과 동일한 호스트를 Public Base URL 섹션에 (http:// 및 포트 없이) gateway.openshift.demo와 같이 입력한 다음 만들기 버튼을 클릭합니다.

    경로 구성

    사용자가 정의한 모든 3scale 제품에 대해 새 경로를 생성해야 합니다.

4장. 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를 배포하려면 다음 섹션에 설명된 단계를 수행합니다.

4.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 설명서를 참조하십시오.

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

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

절차

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

    sudo systemctl start docker.service.

  2. Docker 데몬이 실행 중인지 확인합니다.

    sudo systemctl status docker.service.

    Red Hat 레지스트리에서 바로 사용할 수 있는 Docker 컨테이너 엔진 이미지를 다운로드할 수 있습니다.

    sudo docker pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.8

  3. 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-gateway-rhel8:3scale2.8

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

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

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

4.2.2. APIcast 테스트

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

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

참고

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

추가 리소스

4.3. 추가 리소스

5장. 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를 배포하려면 다음 섹션에 설명된 단계를 수행합니다.

5.1. Podman 컨테이너 환경 설치

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

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

절차

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

    sudo dnf install podman

추가 리소스

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

5.2. Podman 환경 실행

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

절차

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

    podman pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.8

  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-gateway-rhel8:3scale2.8-rhel8:3scale2.8

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

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

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

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

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

참고

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

5.3. podman 명령 옵션

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

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

5.4. 추가 리소스

6장. OpenShift에 3scale Operator 설치

참고

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

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

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

사전 요구 사항

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

주의

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

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

6.1. 새 OpenShift 프로젝트 생성

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

절차

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

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

    oc new-project 3scale-project

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

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

OLM을 사용하여 OpenShift Container Platform 콘솔에서 OperatorHub를 사용하여 OpenShift Container Platform 4.1 클러스터에 3scale Operator를 설치합니다.

참고

새 OpenShift 프로젝트 생성에 정의된 프로젝트에 3scale Operator를 설치하고 배포해야 합니다.

절차

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

    • OCP 4.1의 경우 카탈로그 > OperatorHub를 클릭합니다.
    • OCP 4.2의 경우 Operator > 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로 되었는지 확인합니다.

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

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

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

    No resources found.

추가 리소스

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

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

사전 요구 사항

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

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

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

7.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로 증가합니다.

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

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

필수: false

: null

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

7.2. 평가 템플릿

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

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

8장. 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 계정입니다.

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

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

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

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

    • Amazon ElastiCache
    • Redis Labs
참고

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

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

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

참고

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

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

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

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

  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로 인한 오류를 무시합니다.

8.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 2.7을 2.8로 계속 업그레이드하려면 지침을 진행합니다.

8.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 로 설정합니다.

8.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 스토리지를 지원합니다.

8.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 가 필요하지 않습니다.

추가 리소스

8.4. 추가 정보

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

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

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

참고

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

사전 요구 사항

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

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

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

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

3scale 온-프레미스 버전

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

MySQL 데이터베이스 사용자

mysql2:// 포맷된 URL을 사용하면 'root'@'%' 또는 데이터베이스 연결이 실패하게 됩니다. 3scale에서 'root'@'%' 를 사용하므로 사용자 이름과 암호 조합을 사용하는 것은 지원되지 않습니다.

MySQL 호스트

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

9.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 포드의 식별자입니다.
    • 사용자는 항상 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를 삭제하면 향후 이 절차가 다시 수행되는 경우 향후 혼동이 발생하지 않습니다.

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

9.4. 추가 정보

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

참고
  • Oracle Database는 3scale의 템플릿 기반 설치를 수행할 때 OCP(OpenShift Container Platform) 3.11에서만 지원됩니다.
  • 3scale의 운영자 전용 설치를 수행할 때 Oracle Database는 OCP 버전 4.2 및 4.3에서 지원되지 않습니다.
  • 지원되는 구성에 대한 자세한 내용은 Red Hat 3scale API Management Supported Configurations 페이지를 참조하십시오.

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

사전 요구 사항

다음 Oracle 소프트웨어 구성 요소의 지원되는 버전:

  • Oracle Instant Client Package: Basic 또는 Basic Light
  • Oracle Instant Client Package: SDK
  • Oracle Instant Client Package: ODBC

패키지 예

  • instantclient-basiclite-linux.x64-12.2.0.1.0.zip 또는 instantclient-basic-linux.x64-12.2.0.1.0.zip
  • instantclient-sdk-linux.x64-12.2.0.1.0.zip
  • instantclient-odbc-linux.x64-12.2.0.1.0-2.zip

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

10.1. Oracle 데이터베이스 준비

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

사전 요구 사항

  • OpenShift 클러스터에서 액세스할 수 있는 지원되는 Oracle Database 버전
  • 설치 절차를 위해 Oracle Database 시스템 사용자 액세스
  • 3scale 2.8 amp.yml 템플릿

절차

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

    Oracle Database가 3scale에서 작동하려면 다음 설정이 필요합니다.

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

    3scale 구성에 필요한 다음 정보를 가져옵니다.

    • Oracle 데이터베이스 URL
    • Oracle 데이터베이스 서비스 이름
    • 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 설명서를 참조하십시오.

10.2. 시스템 이미지 빌드

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

사전 요구 사항

절차

  1. 3scale API Management OpenShift Templates GitHub 리포지토리를 복제합니다. 다음 명령을 사용합니다.

    $ git clone --branch 2.8.0.GA https://github.com/3scale/3scale-amp-openshift-templates.git
  2. Oracle Database Instant Client Package 파일을 3scale-amp-openshift-templates/amp/system-oracle/oracle-client-files 디렉터리에 배치합니다.
  3. 3scale 2.8 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 secrets link builder threescale-registry-auth
  9. oc start-build 명령을 입력하여 새 시스템 이미지를 빌드합니다.

    $ oc start-build 3scale-amp-system-oracle --from-dir=.