2.11. 3scale Istio 어댑터 사용
더 이상 지원되지 않는 Red Hat OpenShift Service Mesh 릴리스에 대한 문서를 보고 있습니다.
서비스 메시 버전 1.0 및 1.1 컨트롤 플레인은 더 이상 지원되지 않습니다. 서비스 메시 컨트롤 플레인 업그레이드에 대한 자세한 내용은 서비스 메시 업그레이드를 참조하십시오.
특정 Red Hat OpenShift Service Mesh 릴리스의 지원 상태에 대한 자세한 내용은 제품 라이프사이클 페이지를 참조하십시오.
3scale Istio Adapter는 Red Hat OpenShift Service Mesh 내에서 실행되는 서비스에 레이블을 지정하고 해당 서비스를 3scale API 관리 솔루션과 통합할 수 있는 선택적 어댑터입니다. Red Hat OpenShift Service Mesh에는 필요하지 않습니다.
2.11.1. Red Hat OpenShift Service Mesh와 3scale 어댑터 통합
이러한 예제를 사용하여 3scale Istio 어댑터로 서비스에 대한 요청을 구성할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift Service Mesh 버전 1.x
- 작업 중인 3scale 계정(SaaS 또는 3scale 2.5 on-Premises)
- 백엔드 캐시를 활성화하려면 3scale 2.9 이상 필요
- Red Hat OpenShift Service Mesh 사전 요구 사항
3scale Istio Adapter를 구성하려면 사용자 정의 리소스 파일에 어댑터 매개변수를 추가하는 방법에 대한 Red Hat OpenShift Service Mesh 사용자 정의 리소스를 참조하십시오.
특히 kind: handler
리소스에 주의하십시오. 3scale 계정 인증 정보로 업데이트해야 합니다. 선택적으로 service_id
를 처리기에 추가할 수 있지만 3scale 계정의 하나의 서비스에만 처리기를 렌더링하므로 이전 버전과의 호환성을 위해서만 유지됩니다. service_id
를 처리기에 추가하는 경우 다른 서비스에 3scale을 활성화하려면 다른 service_ids
로 더 많은 처리기를 생성해야 합니다.
아래 단계에 따라 3scale 계정당 단일 처리기를 사용합니다.
절차
3scale 계정에 대한 처리기를 생성하고 계정 인증 정보를 지정합니다. 서비스 식별자를 생략합니다.
apiVersion: "config.istio.io/v1alpha2" kind: handler metadata: name: threescale spec: adapter: threescale params: system_url: "https://<organization>-admin.3scale.net/" access_token: "<ACCESS_TOKEN>" connection: address: "threescale-istio-adapter:3333"
필요한 경우, 3scale 구성에서 제공하는 URL을 재정의하기 위해 params 섹션에
backend_url
필드를 제공할 수 있습니다. 어댑터가 3scale 온프레미스 인스턴스와 동일한 클러스터에서 실행되고 내부 클러스터 DNS를 사용하려는 경우 유용할 수 있습니다.다음과 같이 3scale 계정에 속하는 서비스의 배포 리소스를 편집하거나 패치합니다.
-
유효한
service_id
에 해당하는 값을 사용하여"service-mesh.3scale.net/service-id"
레이블을 추가합니다. -
1단계에서 처리기 리소스의 이름이 값이 되도록
"service-mesh.3scale.net/credentials"
레이블을 추가합니다.
-
유효한
- 더 많은 서비스를 추가하려는 경우 2단계를 수행하여 3scale 계정 인증 정보 및 서비스 식별자에 연결합니다.
3scale 구성으로 규칙 구성을 수정하여 3scale 처리기에 규칙을 전송합니다.
규칙 구성 예
apiVersion: "config.istio.io/v1alpha2" kind: rule metadata: name: threescale spec: match: destination.labels["service-mesh.3scale.net"] == "true" actions: - handler: threescale.handler instances: - threescale-authorization.instance
2.11.1.1. 3scale 사용자 정의 리소스 생성
어댑터에는 handler
, instance
, rule
사용자 정의 리소스를 생성할 수 있는 도구가 포함되어 있습니다.
옵션 | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
| 사용 가능한 옵션에 대한 도움말 출력 생성 | 아니요 | |
| 이 URL의 고유 이름, 토큰 쌍 | 예 | |
| 템플릿을 생성할 네임스페이스 | 아니요 | istio-system |
| 3scale 액세스 토큰 | 예 | |
| 3scale 관리자 포털 URL | 예 | |
| 3scale 백엔드 URL. 설정하면 시스템 설정에서 읽은 값을 재정의합니다. | 아니요 | |
| 3scale API/서비스 ID | 아니요 | |
| 지정을 위한 3scale 인증 패턴(1=API Key, 2=App Id/App Key, 3=OIDC) | 아니요 | 하이브리드 |
| 생성된 매니페스트를 저장할 파일 | 아니요 | 표준 출력 |
| CLI 버전을 출력하고 즉시 종료합니다. | 아니요 |
2.11.1.1.1. URL 예제에서 템플릿 생성
-
배포된 어댑터에서 매니페스트 생성에 있는 3scale 어댑터 컨테이너 이미지에서
oc exec
를 통해 다음 명령을 실행합니다. -
3scale-config-gen
명령을 사용하여 YAML 구문 및 들여쓰기 오류를 방지할 수 있습니다. -
주석을 사용하는 경우
--service
를 생략할 수 있습니다. -
이 명령은
oc exec
를 통해 컨테이너 이미지 내에서 호출해야 합니다.
절차
3scale-config-gen
명령을 사용하여 토큰, URL 쌍을 단일 처리기로 여러 서비스에서 공유할 수 있도록 템플릿 파일을 자동 생성합니다.$ 3scale-config-gen --name=admin-credentials --url="https://<organization>-admin.3scale.net:443" --token="[redacted]"
다음 예제에서는 처리기에 포함된 서비스 ID로 템플릿을 생성합니다.
$ 3scale-config-gen --url="https://<organization>-admin.3scale.net" --name="my-unique-id" --service="123456789" --token="[redacted]"
추가 리소스
- 토큰.
2.11.1.2. 배포된 어댑터에서 매니페스트 생성
-
NAME
은 3scale로 관리 중인 서비스와 식별하는 데 사용하는 식별자입니다. -
CREDENTIALS_NAME
참조는 규칙 구성의match
섹션에 해당하는 식별자입니다. CLI 툴을 사용하는 경우NAME
식별자로 자동 설정됩니다. - 해당 값은 특정할 필요가 없습니다. 레이블 값은 규칙의 내용과 일치해야 합니다. 자세한 정보는 어댑터를 통한 서비스 트래픽 라우팅을 참조하십시오.
이 명령을 실행하여
istio-system
네임스페이스의 배포된 어댑터에서 매니페스트를 생성합니다.$ export NS="istio-system" URL="https://replaceme-admin.3scale.net:443" NAME="name" TOKEN="token" oc exec -n ${NS} $(oc get po -n ${NS} -o jsonpath='{.items[?(@.metadata.labels.app=="3scale-istio-adapter")].metadata.name}') \ -it -- ./3scale-config-gen \ --url ${URL} --name ${NAME} --token ${TOKEN} -n ${NS}
-
터미널에 샘플 출력이 생성됩니다. 필요한 경우 이러한 샘플을 편집하고
oc create
명령을 사용하여 오브젝트를 생성합니다. 요청이 어댑터에 도달하면 어댑터는 서비스가 3scale의 API에 매핑되는 방식을 알아야 합니다. 다음 두 가지 방법으로 이러한 정보를 제공할 수 있습니다.
- 워크로드에 레이블 지장(권장)
-
처리기를
service_id
로 하드 코딩
필요한 주석으로 워크로드를 업데이트합니다.
참고처리기에 아직 포함되지 않은 경우, 이 예제에 제공된 서비스 ID만 업데이트해야 합니다. 처리기의 설정이 우선합니다.
$ export CREDENTIALS_NAME="replace-me" export SERVICE_ID="replace-me" export DEPLOYMENT="replace-me" patch="$(oc get deployment "${DEPLOYMENT}" patch="$(oc get deployment "${DEPLOYMENT}" --template='{"spec":{"template":{"metadata":{"labels":{ {{ range $k,$v := .spec.template.metadata.labels }}"{{ $k }}":"{{ $v }}",{{ end }}"service-mesh.3scale.net/service-id":"'"${SERVICE_ID}"'","service-mesh.3scale.net/credentials":"'"${CREDENTIALS_NAME}"'"}}}}}' )" oc patch deployment "${DEPLOYMENT}" --patch ''"${patch}"''
2.11.1.3. 어댑터를 통한 서비스 트래픽 라우팅
3scale 어댑터를 통해 서비스 트래픽을 유도하려면 다음 단계를 따르십시오.
사전 요구 사항
- 3scale 관리자의 인증 정보 및 서비스 ID
절차
-
kind: rule
리소스의 구성에서 이전에 생성한destination.labels["service-mesh.3scale.net/credentials"] == "threescale"
규칙과 일치합니다. -
서비스를 통합하기 위해 대상 워크로드 배포에서 위의 레이블을
PodTemplateSpec
에 추가합니다.threescale
값은 생성된 처리기의 이름을 나타냅니다. 이 처리기에서는 3scale를 호출하는 데 필요한 액세스 토큰을 저장합니다. -
destination.labels["service-mesh.3scale.net/service-id"] == "replace-me"
레이블을 워크로드에 추가하여 요청 시 인스턴스를 통해 서비스 ID를 어댑터에 전달합니다.