서비스 메시

OpenShift Container Platform 4.8

서비스 메시 설치, 사용법, 릴리스 정보

Red Hat OpenShift Documentation Team

초록

이 문서에서는 OpenShift Container Platform에서 서비스 메시를 사용하는 방법에 대한 정보를 제공합니다.

1장. 서비스 메시 2.x

1.1. About OpenShift Service Mesh

1.1.1. Red Hat OpenShift Service Mesh 소개

Red Hat OpenShift Service Mesh는 애플리케이션에서 중앙 집중식 제어 지점을 생성하여 마이크로 서비스 아키텍처에서 다양한 문제를 해결합니다. 애플리케이션 코드를 변경하지 않고도 기존 분산 애플리케이션에 투명한 계층을 추가합니다.

마이크로 서비스 아키텍처는 엔터프라이즈 애플리케이션의 작업을 모듈식 서비스로 분할하므로 확장 및 유지 관리를 더 쉽게 수행할 수 있습니다. 그러나 마이크로 서비스 아키텍처에 구축된 엔터프라이즈 애플리케이션이 크기와 복잡성이 증가함에 따라 이해 및 관리하기가 어려워집니다. 서비스 메시는 서비스 간 트래픽을 캡처하거나 가로채어 이러한 아키텍처 문제를 해결할 수 있으며 다른 서비스에 대한 새 요청을 수정, 리디렉션 또는 생성할 수 있습니다.

오픈 소스 Istio 프로젝트를 기반으로 하는 서비스 메시는 검색, 부하 분산, 서비스 간 인증, 오류 복구, 지표 및 모니터링을 제공하는 배포된 서비스의 네트워크를 쉽게 생성할 수 있는 방법을 제공합니다. 또한 서비스 메시는 A/B 테스트, 카나리 릴리스, 속도 제한, 액세스 제어, 엔드 투 엔드 인증을 포함한 복잡한 운영 기능을 제공합니다.

1.1.1.1. 보다 포괄적인 오픈 소스 구현

Red Hat은 코드, 문서 및 웹 속성에서 문제를 야기할 수 있는 언어를 변경하기 위해 최선을 다하고 있습니다. 이는 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist)의 네 가지 용어의 변경 작업에서부터 시작합니다. 이러한 변경 작업은 향후 여러 릴리스에 대해 단계적으로 구현될 예정입니다. 자세한 내용은 Red Hat CTO Chris Wright의 메시지에서 참조하십시오.

1.2. 서비스 메시 릴리스 노트

1.2.1. 새로운 기능

Red Hat OpenShift Service Mesh는 서비스 네트워크 전반에서 여러 주요 기능을 균일하게 제공합니다.

  • 트래픽 관리 - 서비스 간 트래픽 및 API 호출 흐름을 제어하고, 호출을 더 안정적으로 만들며, 불리한 조건에서도 네트워크를 보다 견고하게 만듭니다.
  • 서비스 ID 및 보안 - 메시에서 확인 가능한 ID로 서비스를 제공하고 다양한 수준의 신뢰도를 갖춘 네트워크를 통해 전달될 때 서비스 트래픽을 보호할 수 있는 기능을 제공합니다.
  • 정책 강화- 서비스 간 상호 작용에 조직 정책을 적용하여 액세스 정책이 시행되고 리소스가 소비자 간에 공정하게 배포되도록 합니다. 애플리케이션 코드를 변경하는 것이 아니라 메시를 구성하여 정책 변경을 수행합니다.
  • Telemetry - 서비스 간의 종속성과 트래픽 속성 및 흐름을 이해하여 문제를 신속하게 식별할 수 있는 기능을 제공합니다.

1.2.1.1. Red Hat OpenShift Service Mesh 버전 2.0.6에 포함된 구성 요소 버전

구성 요소버전

Istio

1.6.14

Jaeger

1.20.3

Kiali

1.24.8

3scale Istio 어댑터

2.0.0

1.2.1.2. Red Hat OpenShift Dedicated 및 Microsoft Azure Red Hat OpenShift의 Red Hat OpenShift Service Mesh

Red Hat OpenShift Service Mesh는 이제 Red Hat OpenShift Dedicated 및 Microsoft Azure Red Hat OpenShift를 통해 지원됩니다.

1.2.1.3. New features Red Hat OpenShift Service Mesh 2.0.6

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

1.2.1.4. Red Hat OpenShift Service Mesh 2.0.5 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

1.2.1.5. Red Hat OpenShift Service Mesh 2.0.4 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

중요

CVE-2021-29492 및 CVE-2021-31920을 해결하려면 수동 단계가 완료되어야 합니다.

1.2.1.5.1. CVE-2021-29492 및 CVE-2021-31920에 필요한 수동 업데이트

Istio에는 여러 슬래시 또는 이스케이프된 슬래시 문자(%2F 또는 %5C)가 있는 HTTP 요청 경로가 경로 기반 권한 부여 규칙이 사용될 때 Istio 권한 부여 정책을 바이패스할 수 있는 원격으로 악용 가능한 취약점이 포함되어 있습니다.

예를 들어 Istio 클러스터 관리자가 경로 /admin에 있는 요청을 거부하도록 권한 부여 DENY 정책을 정의한다고 가정합니다. URL 경로에 전송된 요청이 권한 부여 정책에서 거부되지 않습니다.

RFC 3986에 따르면 슬래시가 여러 개인 경로는 기술적으로 /admin 다른 경로로 처리되어야 합니다. 그러나 일부 백엔드 서비스는 여러 슬래시를 단일 슬래시로 병합하여 URL 경로를 표준화하도록 선택합니다. 이로 인해 권한 부여 정책이 무시될 수있습니다(admin이 /admin과일치하지 않음) 사용자는 백엔드의 경로 /admin에서 리소스에 액세스할 수 있습니다. 이는 보안 문제를 나타낼 수 있습니다.

ALLOW action + notPaths 필드 또는 DENY 작업 + 경로 필드 패턴을 사용하는 권한 부여 정책이 있는 경우 클러스터는 이 취약점의 영향을 받습니다. 이러한 패턴은 예기치 않은 정책 우회에 취약합니다.

다음 경우 클러스터는 이 취약점의 영향을 받지 않습니다.

  • 권한 부여 정책이 없습니다.
  • 권한 부여 정책은 경로를 정의하지 않거나 NotPaths 필드를 정의하지 않습니다.
  • 권한 부여 정책은 ALLOW action + paths 필드 또는 DENY action + notPaths 필드 패턴을 사용합니다. 이러한 패턴은 정책 바이패스 대신 예기치 않은 거부를 유발할 수 있습니다. 이러한 경우 업그레이드는 선택 사항입니다.
참고

경로 정규화를 위한 Red Hat OpenShift Service Mesh 구성 위치는 Istio 구성과 다릅니다.

1.2.1.5.2. 경로 정규화 구성 업데이트

Istio 권한 부여 정책은 HTTP 요청의 URL 경로를 기반으로 할 수 있습니다. URI 정규화라고도 하는 path 정규화는 들어오는 요청의 경로를 수정 및 표준화하여 정규화된 경로를 표준 방식으로 처리할 수 있습니다. 구문적으로 경로 정규화 후에는 다른 경로가 동일할 수 있습니다.

Istio는 권한 부여 정책에 대해 평가하고 요청을 라우팅하기 전에 요청 경로에서 다음 정규화를 지원합니다.

표 1.1. 정규화 체계

옵션설명참고

없음

정규화는 수행되지 않습니다. Envoy가 수신한 모든 항목은 정확히 그대로 모든 백엔드 서비스에 전달됩니다.

../%2FA../b는 권한 부여 정책에 의해 평가되고 서비스로 전송됩니다.

이 설정은 CVE-2021-31920에 취약합니다.

BASE

현재 이는 Istio의 기본 설치에 사용되는 옵션입니다. 이로 인해 Envoy 프록시에normalize_path 옵션이 적용되며, 이는 추가 정규화와 함께 RFC 3986을 따라 백슬래시를 변환하여 슬래시를 전달합니다.

/a/../b는 /b로 정규화됩니다. \Da는 /da 정규화됩니다.

이 설정은 CVE-2021-31920에 취약합니다.

MERGE_SLASHES

BASE 정규화 후 슬래시가 병합됩니다.

/a//b는 /a/b로 정규화됩니다.

CVE-2021-31920을 완화하려면 이 설정으로 업데이트합니다.

DECODE_AND_MERGE_SLASHES

기본적으로 모든 트래픽을 허용할 때 가장 엄격한 설정입니다. 이 설정은 권한 부여 정책 경로를 철저하게 테스트해야 한다는 주의 사항에 따라 권장됩니다. 백분율로 인코딩된 슬래시 및 백슬래시문자(%2F,%2f,%5C%5c)는 MERGE_SLASHES 정규화 전에 / 또는 \로 디코딩됩니다.

/a%2fb는 /a/b로 정규화됩니다.

CVE-2021-31920을 완화하려면 이 설정으로 업데이트합니다. 이 설정은 더 안전하지만 애플리케이션을 중단할 수도 있습니다. 프로덕션에 배포하기 전에 애플리케이션을 테스트합니다.

정규화 알고리즘은 다음 순서로 수행됩니다.

  1. percentage-decode %2F,%2f,%5C%5c.
  2. Envoy의normalize_path 옵션에 의해 구현된 RFC 3986 및 기타 정규화입니다.
  3. 병합 슬래시.
주의

이러한 정규화 옵션은 HTTP 표준 및 일반적인 업계 사례의 권장 사항을 나타내지만 애플리케이션은 어떤 방식으로든 URL을 해석할 수 있습니다. 거부 정책을 사용할 때 애플리케이션이 작동하는 방식을 이해해야 합니다.

1.2.1.5.3. 경로 정규화 구성 예

Envoy는 백엔드 서비스의 기대치와 일치하도록 요청 경로를 표준화하여 시스템 보안에 중요한지 확인합니다. 다음 예제는 시스템을 구성하기 위한 참조로 사용할 수 있습니다. 정규화된 URL 경로 또는 ifNONE이 선택된 경우 원래 URL 경로는 다음과 같습니다.

  1. 권한 부여 정책을 확인하는 데 사용됩니다.
  2. 백엔드 애플리케이션으로 전달됩니다.

표 1.2. 설정 예

귀사의 애플리케이션…​선택…​

프록시를 사용하여 정규화를 수행합니다.

BASE,MERGE_SLASHES 또는 DECODE_AND_MERGE_SLASHES

RFC 3986을 기반으로 요청 경로를 정규화하고 슬래시를 병합하지 않습니다.

BASE

RFC 3986을 기반으로 요청 경로를 정규화하고 슬래시를 병합하지만 백분율로 인코딩된 슬래시를 디코딩하지는 않습니다.

MERGE_SLASHES

RFC 3986을 기반으로 요청 경로를 표준화하고, 백분율로 인코딩된 슬래시를 디코딩하고, 슬래시를 병합합니다.

DECODE_AND_MERGE_SLASHES

프로세스는 RFC 3986과 호환되지 않는 방식으로 경로를 요청합니다.

없음

1.2.1.5.4. 경로 정규화를 위해 SMCP 구성

Red Hat OpenShift Service Mesh에 대한 경로 정규화를 구성하려면 ServiceMeshControlPlane에서 다음을 지정합니다. 구성 예제를 사용하여 시스템 설정을 결정하는 데 도움이 됩니다.

SMCP v2 pathNormalization

spec:
  techPreview:
    global:
      pathNormalization: <option>

1.2.1.5.5. 케이스 정규화를 위한 설정

일부 환경에서는 대/소문자를 구분하지 않는 권한 부여 정책의 경로를 사용하는 것이 유용할 수 있습니다. 예를 들어https://myurl/get 및 https://myurl/GeT https://myurl/GeT 동일한 방법으로 처리합니다. 이 경우 아래에 표시된 EnvoyFilter를 사용할 수 있습니다. 이 필터는 비교에 사용되는 경로와 애플리케이션에 제공되는 경로를 모두 변경합니다.

EnvoyFilter를 파일에 저장하고 다음 명령을 실행합니다.

$ oc create -f <myEnvoyFilterFile>
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: ingress-case-insensitive
  namespace: istio-system
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: "envoy.filters.network.http_connection_manager"
            subFilter:
              name: "envoy.filters.http.router"
    patch:
      operation: INSERT_BEFORE
      value:
        name: envoy.lua
        typed_config:
            "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
            inlineCode: |
              function envoy_on_request(request_handle)
                local path = request_handle:headers():get(":path")
                request_handle:headers():replace(":path", string.lower(path))
              end

1.2.1.6. Red Hat OpenShift Service Mesh 2.0.3 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

또한 이 릴리스에는 다음과 같은 새로운 기능이 있습니다.

  • 지정된 컨트롤 플레인 네임스페이스에서 정보를 수집하는 must-gather 데이터 수집 툴에 옵션을 추가했습니다. 자세한 내용은 OSSM-351을 참조하십시오.
  • 수백 개의 네임스페이스를 사용하여 컨트롤 플레인의 성능 향상

1.2.1.7. Red Hat OpenShift Service Mesh 2.0.2 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스에는 IBM Z 및 IBM Power Systems에 대한 지원이 추가되었습니다. 또한 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

1.2.1.8. Red Hat OpenShift Service Mesh 2.0.1 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

1.2.1.9. Red Hat OpenShift Service Mesh 2.0 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스에는 Istio 1.6.5, Jaeger 1.20.0, Kiali 1.24.2, 3scale Istio Adapter 2.0 및 OpenShift Container Platform 4.6에 대한 지원이 추가되었습니다.

또한 이 릴리스에는 다음과 같은 새로운 기능이 있습니다.

  • 재구축된 컨트롤 플레인이 도입되었습니다. Mixer 구성 요소는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. 다른 컨트롤 플레인 구성 요소인 Pilot, Galley, Citadel은 Istiod라는 단일 바이너리로 결합되었습니다. ‘d’는 데몬(daemon)을 의미합니다.

    • 컨트롤 플레인 설치, 업그레이드 및 관리를 단순화합니다.
    • 컨트롤 플레인의 리소스 사용과 시작 시간을 줄입니다.
    • 네트워크를 통한 상호 컨트롤 플레인 통신을 줄임으로써 성능을 향상시킵니다.
  • Envoy의 SDS(Secret Discovery Service)에 대한 지원을 추가합니다. SDS는 Envoy 사이드 카 프록시에 시크릿을 전달하기 위한 보다 안전하고 효율적인 메커니즘입니다.

    • 잘 알려진 보안 위험이 있는 Kubernetes Secrets를 사용할 필요가 없습니다.
    • 새 인증서를 인식하기 위해 프록시를 다시 시작할 필요가 없으므로 인증서 순환 중에 성능이 향상됩니다.
  • WebAssembly 확장을 사용하여 구축된 Istio의 Telemetry v2 아키텍처에 대한 지원이 추가되었습니다. 이 새로운 아키텍처는 상당한 성능 향상을 가져왔습니다.
  • 컨트롤 플레인을 보다 쉽게 관리할 수 있도록 간소화된 구성으로 ServiceMeshControlPlane 리소스를 v2로 업데이트합니다.
  • WebAssembly 확장을 기술 프리뷰 기능으로 도입합니다.

1.2.2. 기술 프리뷰

중요

Technology Preview 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 고객은 출시 예정된 제품 기능을 Preview를 통해 미리 사용해 보면서 테스트하고 개발 과정에서 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 지원 범위를 참조하십시오.

1.2.2.1. OVN-Kubernetes 기술 프리뷰

Red Hat OpenShift Service Mesh 2.0.1에서는 OpenShift Container Platform 4.6 및 4.7에서 OVN-Kubernetes 네트워크 유형에 대한 기술 프리뷰 지원을 제공합니다.

1.2.2.2. WebAsssembly 기술 프리뷰

Red Hat OpenShift Service Mesh 2.0.0에서는 Envoy Proxy에 대한 WebAssembly 확장을 지원합니다.

릴리스 1.5를 통해 Istio는 Mixer Telemetry 및 정책 구성 요소를 사용하여 확장을 구현했습니다. Istio 1.5는 더 이상 사용되지 않으며 WebAssembly가 Istio의 확장을 위한 새로운 메커니즘으로 도입되었습니다. 이제 Envoy는 여러 프로그래밍 언어로 작성된 코드를 실행할 수 있는 형식인 WebAssembly(“WASM”)를 사용하여 확장을 허용합니다. Mixer는 Istio 1.5로 더 이상 사용되지 않으며 1.8에서 제거됩니다. 앞으로 Istio에 대한 확장은 WebAssembly로 작성된 Envoy 플러그인으로 구현됩니다.

새로운 Telemetry 아키텍처는 이러한 WebAssembly 확장을 기반으로 합니다. Service Mesh 2.0의 경우 기술 프리뷰 기능으로 WebAssembly 확장을 도입합니다. WebAssembly 확장은 더 이상 사용되지 않아 결국 중단될 Mixer 구성 요소를 대체하여 Istio 기능을 확장하는 새로운 방법입니다.

참고

기본 제공되는 Istio WASM 확장은 프록시 바이너리에 포함되지 않으며 업스트림 Istio 커뮤니티의 WASM 필터는 Red Hat OpenShift Service Mesh 2.0에서 지원되지 않습니다.

WebAssembly 확장에 대한 자세한 내용은 확장을 참조하십시오.

1.2.3. 더 이상 사용되지 않는 기능

이전 릴리스에서 사용 가능하던 일부 기능이 더 이상 사용되지 않거나 삭제되었습니다.

더 이상 사용되지 않는 기능은 여전히 OpenShift Container Platform에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새로운 배포에는 사용하지 않는 것이 좋습니다.

1.2.3.1. Red Hat OpenShift Service Mesh 2.0의 중단된 기능

Mixer 구성 요소는 릴리스 2.0에서 더 이상 사용되지 않으며 릴리스 2.1에서 제거될 예정입니다. Mixer를 사용한 확장 구현은 릴리스 2.0에서 계속 지원되지만, 확장은 새로운 WebAssembly 메커니즘으로 마이그레이션되어야 합니다.

다음 리소스 유형은 Red Hat OpenShift Service Mesh 2.0에서 더 이상 지원되지 않습니다.

  • Policy(authentication.istio.io/v1alpha1)은 더 이상 지원되지 않습니다. 정책 리소스의 특정 구성에 따라 동일한 효과를 달성하기 위해 여러 리소스를 구성해야 할 수 있습니다.

    • RequestAuthentication(security.istio.io/v1beta1) 사용
    • PeerAuthentication(security.istio.io/v1beta1) 사용
  • ServiceMeshPolicy(maistra.io/v1)는 더 이상 지원되지 않습니다.

    • 앞에서 설명한 대로 RequestAuthentication 또는 PeerAuthentication을 사용하지만 컨트롤 플레인 네임스페이스에 배치합니다.
  • RbacConfig(rbac.istio.io/v1alpha1)는 더 이상 지원되지 않습니다.

    • RbacConfig, ServiceRole, 및 ServiceRoleBinding을 포함하는 AuthorizationPolicy(security.istio.io/v1beta1)로 대체됩니다.
  • ServiceMeshRbacConfig(maistra.io/v1)는 더 이상 지원되지 않습니다.

    • 위의 설명처럼 AuthorizationPolicy를 사용하되 컨트롤 플레인 네임스페이스에 배치합니다.
  • ServiceRole(rbac.istio.io/v1alpha1)은 더 이상 지원되지 않습니다.
  • ServiceRoleBinding(rbac.istio.io/v1alpha1)은 더 이상 지원되지 않습니다.
  • Kiali에서는 loginLDAP 전략이 더 이상 사용되지 않습니다. 향후 버전에서는 OpenID 공급자를 사용한 인증을 도입할 예정입니다.

1.2.4. 확인된 문제

이러한 제한 사항은 Red Hat OpenShift Service Mesh에 있습니다.

  • Red Hat OpenShift Service Mesh는 IPv6를 지원하지 않습니다. 업스트림 Istio 프로젝트에서 지원하지 않거나 OpenShift에서 완전히 지원하지 않기 때문입니다.
  • 그래프 레이아웃 - 애플리케이션 아키텍처 및 표시할 데이터(그래프 노드 및 상호 작용 수)에 따라 Kiali 그래프의 레이아웃이 다르게 렌더링됩니다. 모든 상황에 적합하게 렌더링되는 단일 레이아웃을 만드는 것이 불가능하지는 않지만 어렵기 때문에 Kiali는 다양한 레이아웃 옵션을 제공합니다. 다른 레이아웃을 선택하려면 그래프 설정 메뉴에서 다른 레이아웃 스키마를 선택할 수 있습니다.
  • Kiali 콘솔의 Jaeger 및 Grafana와 같은 관련 서비스에 처음 액세스하는 경우 인증서를 수락하고 OpenShift Container Platform 로그인 자격 증명을 사용하여 다시 인증해야 합니다. 이것은 프레임워크가 콘솔에 포함된 페이지를 표시하는 방법에 문제가 있기 때문입니다.
  • Bookinfo 샘플 애플리케이션은 IBM Z 및 IBM Power Systems에 설치할 수 없습니다.
  • WebAssembly는 IBM Z 및 IBM Power Systems에서 지원되지 않습니다.

1.2.4.1. 서비스 메시의 알려진 문제

이는 Red Hat OpenShift Service Mesh에서 알려진 문제입니다.

  • Istio-14743 이 Red Hat OpenShift Service Mesh 릴리스의 기반이 되는 Istio 버전의 제한으로 인해 현재 Service Mesh와 호환되지 않는 여러 애플리케이션이 있습니다. 자세한 내용은 링크 커뮤니티 관련 문제를 참조하십시오.
  • OSSM-285 Kiali 콘솔에 액세스하려고 할 때 “Error trying to get OAuth Metadata”와 같은 오류 메시지가 표시됩니다. 해결 방법은 Kiali pod를 다시 시작하는 것입니다.
  • ServiceMeshExtensions에 대한 MAISTRA-1947 기술 프리뷰 업데이트는 적용되지 않습니다. 해결방법은 ServiceMeshExtensions를 제거하고 다시 생성하는 것입니다.
  • MAISTRA-1959 mTLS가 활성화된 경우 2.0으로 마이그레이션 Prometheus 스크랩(spec.addons.prometheus.sc가 true로설정됨 )이 작동하지 않습니다. 또한 Kiali는 mTLS가 비활성화되면 관련 없는 그래프 데이터를 표시합니다.

    이 문제는 프록시 구성에서 포트 15020을 제외하여 해결할 수 있습니다. 예를 들면 다음과 같습니다.

    spec:
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts:
              - 15020
  • MAISTRA-806 제거된 Istio Operator pod로 인해 메시 및 CNI가 배포되지 않습니다.

    제어 창을 배포하는 동안 istio-operator pod가 제거되면, 제거된 istio-operator pod를 삭제합니다.

  • MAISTRA-681 컨트롤 플레인에 네임스페이스가 많은 경우 성능 문제가 발생할 수 있습니다.
  • MAISTRA-465 Maistra Operator가 Operator 지표에 대한 서비스를 생성하지 못합니다.
  • MAISTRA-453 새 프로젝트를 생성하고 즉시 pod를 배포하면 사이드카 삽입이 발생하지 않습니다. pod가 생성되기 전에 Operator에서 maistra.io/member-of를 추가하지 못하므로 사이드카 삽입을 수행하려면 pod를 삭제하고 다시 생성해야 합니다.
  • MAISTRA-158 동일한 호스트 이름을 참조하는 여러 게이트웨이를 적용하면 모든 게이트웨이가 작동을 중지합니다.

1.2.4.2. Kiali의 확인된 문제

참고

Kiali의 새로운 문제는 OpenShift Service Mesh 프로젝트에서 생성되어야 하며 ComponentKiali로 설정되어야 합니다.

다음은 Kiali에서 알려진 문제입니다.

  • KIALI-2206 처음으로 Kiali 콘솔에 액세스했을 때 Kiali에 대해 캐시된 브라우저 데이터가 없는 경우 Kiali 서비스 상세 정보 페이지의 Metrics 탭에 있는 ‘Grafana에서 보기’ 링크가 잘못된 위치로 리디렉션됩니다. 이 문제가 발생하는 유일한 상황은 Kiali에 처음 액세스하는 경우입니다.
  • KIALI-507 Kiali는 Internet Explorer 11을 지원하지 않습니다. 기본 프레임워크가 Internet Explorer를 지원하지 않기 때문입니다. Kiali 콘솔에 액세스하려면 Chrome, Edge, Firefox 또는 Safari 브라우저의 두 가지 최신 버전 중 하나를 사용하십시오.

1.2.4.3. Jaeger의 확인된 문제

Jaeger에 다음과 같은 제한 사항은 있습니다.

  • Apache Spark가 지원되지 않습니다.
  • AMQ/Kafka를 통한 Jaeger 스트리밍은 IBM Z 및 IBM Power Systems에서 지원되지 않습니다.

다음은 Jaeger에서 알려진 문제입니다.

  • BZ-1918920 Elasticsearch pod는 업데이트 후 자동으로 다시 시작되지 않습니다. 이 문제를 해결하려면 pod를 수동으로 다시 시작합니다.
  • TRACING-809 Jaeger Ingester는 Kafka 2.3과 호환되지 않습니다. Jaeger Ingester의 두 개 이상의 인스턴스와 트래픽이 충분한 경우 로그에 지속적으로 리밸런싱 메시지를 생성합니다. 이는 Kafka 2.3.1에서 수정된 Kafka 2.3의 문제의 재발로 인해 발생합니다. 자세한 내용은 Jaegertracing-1819를 참조하십시오.

1.2.5. 수정된 문제

현재 릴리스에서 다음 문제가 해결되었습니다.

1.2.5.1. 서비스 메시의 수정된 문제

  • MAISTRA-2401 CVE-2021-3586 servicemesh-operator: NetworkPolicy 리소스는 인그레스 리소스에 대해 잘못 지정된 포트입니다. Red Hat OpenShift Service Mesh에 설치된 NetworkPolicy 리소스가 액세스할 수 있는 포트를 올바르게 지정하지 않았습니다. 이로 인해 모든 포드에서 이러한 리소스의 모든 포트에 액세스할 수 있었습니다. 다음 리소스에 적용되는 네트워크 정책은 영향을 받습니다.
  • Galley
  • Grafana
  • Istiod
  • Jaeger
  • Kiali
  • Prometheus
  • 사이드카 인젝터
  • MAISTRA-2378 클러스터가 ovs-multitenant와 함께 OpenShiftSDN을 사용하도록 구성되고 메시에 많은 네임스페이스(200+)가 포함된 경우 OpenShift Container Platform 네트워킹 플러그인은 네임스페이스를 신속하게 구성할 수 없습니다. 서비스 메시의 시간이 초과되어 서비스 메시에서 네임스페이스가 지속적으로 삭제된 다음 다시 나열합니다.
  • MAISTRA-2370 listerInformer. 업데이트된 캐시 코드베이스는 네임스페이스 캐시에서 집계된 캐시로 이벤트를 변환할 때 tombstones를 처리하지 않아 go 루틴에서 패닉으로 이어졌습니다.
  • OSSM-449 VirtualService and Service로 인해 "도메인에 대한 고유한 값만 허용됩니다. 도메인의 중복 항목.".
  • 이름이 유사한 OSSM-419 네임스페이스는 서비스 메시 멤버 역할에 네임스페이스를 정의할 수 없는 경우에도 Kiali 네임스페이스 목록에 모두 표시됩니다.
  • OSSM-296 Kiali 사용자 지정 리소스(CR)에 상태 구성을 추가할 때 Kiali configmap에 복제되지 않습니다.
  • OSSM-291 Kiali 콘솔의 애플리케이션, 서비스 및 워크로드 페이지에서 ‘필터에서 레이블 삭제’ 기능이 작동하지 않습니다.
  • OSSM-289 Kiali 콘솔에는 ‘istio-ingressgateway’ 및 ‘jaeger-query’ 서비스에 대한 서비스 세부 정보 페이지에 표시되는 추적이 없습니다. 추적은 Jaeger에 있습니다.
  • OSSM-287 Kiali 콘솔에는 그래프 서비스에 표시되는 추적이 없습니다.
  • MAISTRA-2010 AuthorizationPolicy는 request.regex.headers 필드를 지원하지 않습니다. validatingwebhook는 필드가 있는 모든 AuthorizationPolicy를 거부하며, 이를 비활성화한 경우에도 Pilot은 동일한 코드를 사용하여 유효성을 검사하려고 시도하지만 작동하지 않습니다.
  • MAISTRA-1979 2.0으로 마이그레이션 변환 Webhook는 SMCP.status를 v2에서 v1로 변환할 때 다음과 같은 중요한 필드를 삭제합니다.

    • conditions
    • components
    • observedGeneration
    • annotations

      Operator를 2.0으로 업그레이드하면 리소스의 maistra.io/v1 버전을 사용하여 SMCP 상태를 판독하는 클라이언트 툴이 중단될 수 있습니다.

      또한 oc get servicemeshcontrolplanes.v1.maistra.io를 실행할 때 READY 및 STATUS 열이 비어 있습니다.

  • MAISTRA-1089 2.0으로 마이그레이션 비 컨트롤 플레인 네임스페이스에서 생성된 게이트웨이는 자동으로 삭제됩니다. 사용자는 SMCP 사양에서 게이트웨이 정의를 제거한 후 이러한 리소스를 수동으로 삭제해야 합니다.
  • MAISTRA-1983 2.0으로 마이그레이션 기존의 유효하지 않은 ServiceMeshControlPlane을 사용하여 2.0.0으로 업그레이드하면 쉽게 복구할 수 없습니다. ServiceMeshControlPlane 리소스의 유효하지 않은 항목으로 인해 복구할 수 없는 오류가 발생했습니다. 수정으로 오류를 복구할 수 있습니다. 유효하지 않은 리소스를 삭제하고 새 리소스로 교체하거나 리소스를 편집하여 오류를 수정할 수 있습니다. 리소스 편집에 대한 자세한 내용은 [Red Hat OpenShift Service Mesh 설치 구성]을 참조하십시오.
  • Maistra-1502 버전 1.0.10에서 CVE가 수정되므로 Grafana의 홈 대시보드 메뉴에서는 Istio 대시보드를 사용할 수 없습니다. Istio 대시보드는 여전히 남아 있습니다. 액세스하려면 탐색 패널의 대시보드 메뉴를 클릭하고 관리 탭을 선택합니다.
  • MAISTRA-858 Istio 1.1.x와 관련된 더 이상 사용하지 않는 옵션 및 구성을 설명하는 다음과 같은 Envoy 로그 메시지가 예상됩니다.

    • [2019-06-03 07:03:28.943][19][warning][misc] [external/envoy/source/common/protobuf/utility.cc:129] Using deprecated option 'envoy.api.v2.listener.Filter.config'. 이 구성은 곧 Envoy에서 삭제될 예정입니다.
    • [2019-08-12 22:12:59.001][13][warning][misc] [external/envoy/source/common/protobuf/utility.cc:174] Using deprecated option 'envoy.api.v2.Listener.use_original_dst' from file lds.proto. 이 구성은 곧 Envoy에서 삭제될 예정입니다.
  • MAISTRA-193 citadel에 대해 상태 확인이 활성화되면 예기치 않은 콘솔 정보 메시지가 표시됩니다.
  • 버그 1821432 OpenShift Container Platform 제어 리소스 세부 정보 페이지의 토글 제어가 CR을 올바르게 업데이트하지 않습니다. OpenShift Container Platform 웹 콘솔의 SMCP(Service Mesh Control Plane) 개요 페이지의 UI 토글 제어가 리소스에서 잘못된 필드를 업데이트하는 경우가 있습니다. SMCP를 업데이트하려면 토글 제어를 클릭하는 대신 YAML 콘텐츠를 직접 편집하거나 명령줄에서 리소스를 업데이트합니다.

1.2.5.2. Jaeger의 수정된 문제

  • TRACING-1725 TRACING-1631에 대한 후속 조치입니다. 동일한 이름을 사용하지만 다른 네임스페이스 내에 Jaeger 프로덕션 인스턴스가 여러 개인 경우 Elasticsearch 인증서가 올바르게 조정되는지 확인하기 위한 추가 수정 사항입니다. BZ-1918920도 참조하십시오.
  • TRACING-1631 동일한 이름을 사용하지만 다른 네임스페이스 내의 여러 Jaeger 프로덕션 인스턴스로, Elasticsearch 인증서 문제를 발생시킵니다. 여러 서비스 메시가 설치되면 모든 Jaeger Elasticsearch 인스턴스에 개별 시크릿 대신 동일한 Elasticsearch 시크릿이 있어 OpenShift Elasticsearch Operator가 모든 Elasticsearch 클러스터와 통신할 수 없습니다.
  • TRACING-1300 Istio 사이드카를 사용할 때 에이전트와 수집기 간의 연결에 실패했습니다. Jaeger Operator 업데이트는 Jaeger 사이드카 에이전트와 Jaeger 수집기 간의 TLS 통신을 기본적으로 활성화했습니다.
  • TRACING-1208 Jaeger UI에 액세스할 때 인증 “500 Internal Error”입니다. OAuth를 사용하여 UI를 인증할 때 oauth-proxy 사이드카가 additionalTrustBundle로 설치할 때 정의된 사용자 정의 CA 번들을 신뢰하지 않기 때문에 500 오류가 발생합니다.
  • TRACING-1166 현재 연결이 끊긴 환경에서 Jaeger 스트리밍 전략을 사용할 수 없습니다. Kafka 클러스터가 프로비저닝 중인 경우 오류가 발생합니다. registry.redhat.io/amq7/amq-streams-kafka-24-rhel7@sha256:f9ceca004f1b7dccb3b82d9a8027961f9fe4104e0ed69752c0bdd8078b4a1076 이미지를 가져올 수 없습니다.

1.3. 지원 요청

1.3.1. 지원 요청

이 문서에 설명된 절차 또는 일반적으로 OpenShift Container Platform에 문제가 발생하는 경우 Red Hat 고객 포털에 액세스하십시오. 고객 포털에서 다음을 수행할 수 있습니다.

  • Red Hat 제품과 관련된 기사 및 솔루션에 대한 Red Hat 지식베이스를 검색하거나 살펴볼 수 있습니다.
  • Red Hat 지원에 대한 지원 케이스 제출할 수 있습니다.
  • 다른 제품 설명서에 액세스 가능합니다.

클러스터의 문제를 식별하기 위해 Red Hat OpenShift Cluster Manager에서 Insights를 사용할 수 있습니다. Insights는 문제에 대한 세부 정보 및 문제 해결 방법에 대한 정보를 제공합니다.

이 문서를 개선하기 위한 제안이 있거나 오류를 발견한 경우 문서 구성 요소의 OpenShift Container Platform 제품에 대한 Bugzilla 보고서를 제출하십시오. 섹션 이름 및 OpenShift Container Platform 버전과 같은 구체적인 정보를 제공합니다.

must-gather 도구를 사용하면 가상 머신 및 Red Hat OpenShift Service Mesh 관련 기타 데이터를 포함하여 OpenShift Container Platform 클러스터에 대한 진단 정보를 수집할 수 있습니다. OpenShift Container Platform 및 Red Hat OpenShift Service Mesh 모두에 대한 지원에 해당 진단 정보를 보낼 수 있습니다.

1.3.2. must-gather 툴 정보

oc adm must-gather CLI 명령은 다음과 같이 문제를 디버깅하는 데 필요할 가능성이 높은 클러스터 정보를 수집합니다.

  • 리소스 정의
  • 감사 로그
  • 서비스 로그

--image 인수를 포함하여 명령을 실행하는 경우 이미지를 하나 이상 지정할 수 있습니다. 이미지를 지정하면 툴에서 해당 기능 또는 제품과 관련된 데이터를 수집합니다.

oc adm must-gather를 실행하면 클러스터에 새 Pod가 생성됩니다. 해당 Pod에 대한 데이터가 수집되어 must-gather.local로 시작하는 새 디렉터리에 저장됩니다. 이 디렉터리는 현재 작업 중인 디렉터리에 생성되어 있습니다.

1.3.2.1. 사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  • OpenShift Container Platform CLI(oc)가 설치되어 있어야 합니다.

1.3.3. 서비스 메시 데이터 수집 정보

oc adm must-gather CLI 명령을 사용하면 Red Hat OpenShift Service Mesh와 연관된 기능 및 오브젝트를 포함하여 클러스터에 대한 정보를 수집할 수 있습니다.

must-gather을 사용하여 Red Hat OpenShift Service Mesh 데이터를 수집하려면 Red Hat OpenShift Service Mesh 이미지를 지정해야 합니다.

$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8

must-gather를 사용하여 특정 컨트롤 플레인 네임스페이스에 대한 Red Hat OpenShift Service Mesh 데이터를 수집하려면 Red Hat OpenShift Service Mesh 이미지 및 네임스페이스를 지정해야 합니다. 이 예에서는 <namespace>를 istio-system과 같은 컨트롤 플레인 네임스페이스로 바꿉니다.

$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8 gather <namespace>

1.4. Red Hat OpenShift Service Mesh 이해

Red Hat OpenShift Service Mesh는 서비스 메시에서 네트워크로 연결된 마이크로 서비스에 대해 동작 정보 및 운영 제어용 플랫폼을 제공합니다. Red Hat OpenShift Service Mesh를 사용하면 OpenShift Container Platform 환경에서 마이크로 서비스를 연결, 보호 및 모니터링할 수 있습니다.

1.4.1. 서비스 메시 이해

서비스 메시는 분산 마이크로 서비스 아키텍처에서 애플리케이션을 구성하는 마이크로 서비스 네트워크와 이러한 마이크로 서비스 간의 상호 작용입니다. 서비스 메시의 크기와 복잡성이 증가함에 따라 이를 이해하고 관리하는 것이 어려워질 수 있습니다.

오픈 소스 Istio 프로젝트를 기반으로 하는 Red Hat OpenShift Service Mesh는 서비스 코드를 변경할 필요 없이 기존 분산 애플리케이션에 투명 계층을 추가합니다. 마이크로 서비스 간의 모든 네트워크 통신을 차단하는 메시의 관련 서비스에 특수 사이드카 프록시를 배포하여 Red Hat OpenShift Service Mesh 지원을 서비스에 추가합니다. 컨트롤 플레인 기능을 사용하여 서비스 메시를 구성하고 관리합니다.

Red Hat OpenShift Service Mesh를 사용하면, 다음과 같은 기능을 제공하는 배포된 서비스 네트워크를 쉽게 생성할 수 있습니다.

  • 검색
  • 로드 밸런싱
  • 서비스 간 인증
  • 장애 복구
  • 지표
  • 모니터링

Red Hat OpenShift Service Mesh는 다음과 같은 보다 복잡한 운영 기능을 제공합니다:

  • A/B 테스트
  • 카나리아 릴리스
  • 속도 제한
  • 액세스 제어
  • 엔드 투 엔드 인증

1.4.2. Red Hat OpenShift Service Mesh 아키텍처

Red Hat OpenShift Service Mesh는 논리적으로 데이터 플레인과 컨트롤 플레인으로 분할됩니다.

데이터 플레인은 사이드카로 배포된 지능적 프록시 세트입니다. 이러한 프록시는 서비스 메시에서 마이크로 서비스 간의 모든 인바운드 및 아웃바운드 네트워크 통신을 가로채기하고 제어합니다.

  • Envoy proxy는 서비스 메시의 모든 서비스에 대한 인바운드 및 아웃바운드 트래픽을 가로채기합니다. Envoy는 동일한 pod에서 관련 서비스에 사이드카로 배포됩니다.

컨트롤 플레인은 트래픽을 라우팅하도록 프록시를 적용하기 위해 Istiod를 관리하고 구성합니다.

Istiod는 서비스 검색, 구성 및 인증서 관리를 제공합니다. 고급 라우팅 규칙을 Envoy 구성으로 변환하고 런타임 시 사이드카로 전달합니다.

SDS(Secret Discovery Service)는 Istiod에서 직접 사이드카에 인증서와 키를 배포합니다.

또한 Red Hat OpenShift Service Mesh는 istio-operator를 사용하여 컨트롤 플레인 설치를 관리합니다. Operator는 OpenShift 클러스터에서 공통 활동을 구현하고 자동화할 수 있는 소프트웨어입니다. 컨트롤러 역할을 하여 클러스터에서 원하는 오브젝트 상태를 설정하거나 변경할 수 있습니다.

1.4.3. Kiali 이해

Kiali는 서비스 메시의 마이크로 서비스와 해당 연결 방법을 표시하여 서비스 메시를 시각화할 수 있습니다.

1.4.3.1. Kiali 개요

Kiali는 OpenShift Container Platform에서 실행 중인 서비스 메시에 대한 관찰 기능을 제공합니다. Kiali는 Istio 서비스 메시를 정의하고 검증하며 관찰하는 데 도움이 됩니다. 이를 통해 토폴로지를 유추하여 서비스 메시의 구조를 이해하고 서비스 메시의 상태에 대한 정보를 제공할 수 있습니다.

Kiali는 회로 차단기, 요청 속도, 대기 시간, 트래픽 흐름 그래프와 같은 기능에 대한 가시성을 제공하는 네임스페이스의 대화형 그래프 보기를 실시간으로 제공합니다. Kiali는 애플리케이션에서 서비스 및 워크로드에 이르기까지 다양한 수준의 구성 요소에 대한 통찰력을 제공하며, 선택한 그래프 노드 또는 에지에서 상황별 정보에 대한 상호 작용과 차트를 표시할 수 있습니다. Kiali는 게이트웨이, 대상 규칙, 가상 서비스, 메시 정책 등과 같은 Istio 구성의 유효성을 확인하는 기능도 제공합니다. Kiali는 자세한 지표를 제공하며 고급 쿼리에 기본 Grafana 통합이 가능합니다. Jaeger를 Kiali 콘솔에 통합하면 분산 추적이 제공됩니다.

Kiali는 기본적으로 Red Hat OpenShift Service Mesh의 일부로 설치됩니다.

1.4.3.2. Kiali 아키텍처

Kiali는 Kiali 애플리케이션과 Kiali 콘솔이라는 두 가지 구성 요소로 구성됩니다.

  • Kiali 애플리케이션(백엔드) - 이 구성 요소는 컨테이너 애플리케이션 플랫폼에서 실행되고 서비스 메시 구성 요소와 통신하며, 데이터를 검색 및 처리하고, 이 데이터를 콘솔에 노출합니다. Kiali 애플리케이션에는 스토리지가 필요하지 않습니다. 클러스터에 애플리케이션을 배포할 때 구성은 ConfigMaps 및 시크릿에 설정됩니다.
  • Kiali 콘솔(프론트엔드) - Kiali 콘솔은 웹 애플리케이션입니다. Kiali 애플리케이션은 Kiali 콘솔을 제공하며 이를 사용자에게 표시하도록 데이터의 백엔드를 쿼리합니다.

또한 Kiali는 컨테이너 애플리케이션 플랫폼과 Istio에서 제공하는 외부 서비스 및 구성 요소에 따라 달라집니다.

  • Red Hat Service Mesh(Istio) - Istio는 Kiali 요구 사항입니다. Istio는 서비스 메시를 제공하고 제어하는 구성 요소입니다. Kiali와 Istio를 별도로 설치할 수 있지만 Kiali는 Istio에 따라 달라지며 Istio가 존재하지 않는 경우 작동하지 않습니다. Kiali는 Prometheus 및 클러스터 API를 통해 노출되는 Istio 데이터와 구성을 검색해야 합니다.
  • Prometheus - 전용 Prometheus 인스턴스는 Red Hat OpenShift Service Mesh 설치의 일부로 포함되어 있습니다. Istio Telemetry가 활성화되면 지표 데이터가 Prometheus에 저장됩니다. Kiali는 이 Prometheus 데이터를 사용하여 메시 토폴로지 확인, 지표 표시, 상태 계산, 가능한 문제 표시 등의 작업을 수행합니다. Kiali는 Prometheus와 직접 통신하고 Istio Telemetry에서 사용하는 데이터 스키마를 가정합니다. Prometheus는 Istio 종속성 및 Kiali에 대한 하드 종속성이며, 대부분의 Kiali 기능은 Prometheus없이 작동하지 않습니다.
  • 클러스터 API - Kiali는 OpenShift Container Platform (클러스터 API)의 API를 사용하여 서비스 메시 구성을 가져오고 해결합니다. Kiali는 클러스터 API를 쿼리하여 네임스페이스, 서비스, 배포, pod 및 기타 엔터티에 대한 정의를 검색합니다. 또한 Kiali는 다른 클러스터 엔티티 간의 관계를 해결하기 위해 쿼리를 만듭니다. 클러스터 API는 가상 서비스, 대상 규칙, 경로 규칙, 게이트웨이, 할당량 등과 같은 Istio 구성을 검색하도록 쿼리합니다.
  • Jaeger - Jaeger는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 기본 Red Hat OpenShift Service Mesh 설치의 일부로 Jaeger를 설치할 때 Kiali 콘솔에는 Jaeger의 추적 데이터를 표시하는 탭이 포함되어 있습니다. Istio의 분산 추적 기능을 비활성화하면 추적 데이터를 사용할 수 없습니다. 또한 사용자가 Jaeger 데이터를 보려면 컨트롤 플레인이 설치된 네임스페이스에 액세스할 수 있어야 합니다.
  • Grafana - Grafana는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 사용 가능한 경우, Kiali의 지표 페이지에 사용자를 Grafana의 동일한 지표로 안내하는 링크가 표시됩니다. 사용자는 Grafana 대시보드에 대한 링크를 보고 Grafana 데이터를 보려면 컨트롤 플레인이 설치된 네임스페이스에 액세스할 수 있어야 합니다.

1.4.3.3. Kiali 기능

Kiali 콘솔은 Red Hat Service Mesh와 통합되어 다음 기능을 제공합니다.

  • 상태 - 애플리케이션, 서비스 또는 워크로드에 대한 문제를 빠르게 식별합니다.
  • 토폴로지 - 애플리케이션, 서비스 또는 워크로드가 Kiali 그래프를 통해 통신하는 방식을 시각화합니다.
  • 지표 - 사전 정의된 지표 대시 보드를 통해 Go, Node.js. Quarkus, Spring Boot, Thorntail, Vert.x에 대한 서비스 메시 및 애플리케이션 성능을 차트로 작성할 수 있습니다. 또한 사용자 정의 대시보드를 생성할 수도 있습니다.
  • 추적 - Jaeger와의 통합을 통해 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 따를 수 있습니다.
  • 검증 - 가장 일반적인 Istio 오브젝트에 대한 고급 검증(대상 규칙, 서비스 항목, 가상 서비스 등)을 수행합니다.
  • 구성 - 마법사를 사용하거나 Kiali 콘솔의 YAML 편집기에서 직접 Istio 라우팅 구성을 생성, 업데이트 및 삭제할 수 있는 옵션입니다.

1.4.4. Jaeger 이해

사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하기 위해 수십 가지 서비스가 필요할 수 있는 아키텍처에 의해 요청이 실행됩니다. 이 요청의 경로는 분산 트랜잭션입니다. Jaeger를 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청의 경로를 따르는 분산 추적을 수행할 수 있습니다.

분산 추적은 분산 트랜잭션의 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 분산 추적을 통해 개발자는 대규모 서비스 지향 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용할 수 있습니다.

Jaeger는 마이크로 서비스의 전체 스택에서 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 범위로 구성됩니다.

기간은 작업 이름, 작업의 시작 시간 및 기간이 있는 Jaeger의 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.

1.4.4.1. Jaeger 개요

서비스 소유자로 Jaeger를 사용하여 서비스 아키텍처에 대한 정보를 수집할 수 있습니다. Jaeger는 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결에 사용할 수 있는 오픈 소스 분산 추적 플랫폼입니다.

Jaeger를 사용하면 다음 기능을 수행할 수 있습니다.

  • 분산 트랜잭션 모니터링
  • 성능 및 대기 시간 최적화
  • 근본 원인 분석 수행

Jaeger는 벤더 중립 OpenTracing API 및 계측을 기반으로 합니다.

1.4.4.2. Jaeger 아키텍처

Jaeger는 연동을 통해 추적 데이터를 수집, 저장, 표시하는 여러 구성 요소로 이루어집니다.

  • Jaeger Client(Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- Jaeger 클라이언트는 OpenTracing API의 언어 특정 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
  • Jaeger 에이전트(Server Queue, Processor Workers) - Jaeger 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬으로, 수집기에 배치 및 전송합니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
  • Jaeger 수집기(Queue, Workers) - 에이전트와 유사하게 수집기는 기간을 수신하여 처리를 위한 내부 큐에 배치할 수 있습니다. 그러면 수집기는 기간이 스토리지로 이동할 때까지 대기하지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
  • 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Jaeger에는 기간 스토리지를 위한 플러그인 메커니즘이 있습니다. 이 릴리스에서 지원되는 유일한 스토리지는 Elasticsearch입니다.
  • 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
  • Ingester(Ingester 서비스) - Jaeger는 수집기와 실제 백업 스토리(Elasticsearch) 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 다른 스토리지 백엔드(Elasticsearch)에 쓰는 서비스입니다.
  • Jaeger 콘솔 - Jaeger는 분산 추적 데이터를 시각화할 수 있는 사용자 인터페이스를 제공합니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.

1.4.4.3. Jaeger 기능

Jaeger 추적은 다음과 같은 기능을 제공합니다.

  • Kiali와의 통합 - 올바르게 구성된 경우 Kiali 콘솔에서 Jaeger 데이터를 볼 수 있습니다.
  • 높은 확장성 - Jaeger 백엔드는 하나의 실패 지점을 보유하고 비즈니스 요구 사항으로 확장할 수 있도록 설계되었습니다.
  • 분산 컨텍스트 전파 - 다른 구성 요소의 데이터를 함께 연결하여 완전한 엔드 투 엔드 추적을 만들 수 있습니다.
  • Zipkin과의 역호환성 - Jaeger에는 Zipkin의 드롭인 대체로 사용할 수 있는 API가 있지만 Red Hat은 이 릴리스에서 Zipkin 호환성을 지원하지 않습니다.

1.4.5. 다음 단계

1.5. 서비스 메시 및 Istio 차이점

Red Hat OpenShift Service Mesh는 추가 기능을 제공하거나 OpenShift Container Platform에 배포할 때 차이점을 처리하기 위해 Istio 설치와 다릅니다.

1.5.1. 서비스 메시 기능

다음 기능은 서비스 메시와 Istio에서 다릅니다.

1.5.1.1. 명령줄 도구

Red Hat OpenShift Service Mesh의 명령줄 도구는 oc입니다.  Red Hat OpenShift Service Mesh는 istioctl을 지원하지 않습니다.

1.5.1.2. 설치 및 업그레이드

Red Hat OpenShift Service Mesh는 Istio 설치 프로필을 지원하지 않습니다.

Red Hat OpenShift Service Mesh는 서비스 메시의 카나리아 업그레이드를 지원하지 않습니다.

1.5.1.3. 페더레이션 및 다중 클러스터

Red Hat OpenShift Service Mesh는 아직 페더레이션 또는 다중 클러스터 서비스 메시를 지원하지 않습니다.

  • 페더레이션: 서로 상호 작용하고 별도로 구성된 Service Mesh Control Plane 세트입니다.
  • 클러스터: 단일 컨트롤 플레인 역할을 하고 단일 엔티티로 구성된 Service Mesh Control Plane 세트입니다.

1.5.1.4. 자동 삽입

업스트림 Istio 커뮤니티 설치는 레이블을 지정한 프로젝트 내의 pod에 사이드카를 자동으로 삽입합니다.

Red Hat OpenShift Service Mesh는 사이드카를 Pod에 자동으로 삽입하지 않지만 프로젝트에 레이블을 지정하지 않고 주석을 사용하여 삽입해야 합니다. 이 방법은 더 적은 권한이 필요하며, builder pod와 같은 다른 OpenShift 기능과 충돌하지 않습니다. 자동 삽입을 활성화하려면 자동 사이드카 삽입 섹션에 설명된 대로 sidecar.istio.io/inject 주석을 지정합니다.

1.5.1.5. Istio 역할 기반 액세스 제어 기능

역할 기반 액세스 제어(RBAC)는 서비스에 대한 액세스를 제어하는 데 사용할 수 있는 메커니즘을 제공합니다. 사용자 이름별로, 또는 속성 집합을 지정하여 제목을 식별하고 그에 따라 액세스 제어를 적용할 수 있습니다.

업스트림 Istio 커뮤니티 설치에는 정확한 헤더 일치를 수행하거나, 헤더에서 와일드카드를 일치시키거나, 특정 접두사 또는 접미사가 포함된 헤더를 확인하는 옵션이 포함되어 있습니다.

Red Hat OpenShift Service Mesh는 정규식을 사용하여 요청 헤더를 일치시키는 기능을 확장합니다. 정규식이 있는 request.regex.headers의 속성 키를 지정합니다.

요청 헤더와 일치하는 업스트림 Istio 커뮤니티 예

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: httpbin-usernamepolicy
spec:
  action: ALLOW
  rules:
    - when:
        - key: 'request.regex.headers[username]'
          values:
            - "allowed.*"
  selector:
    matchLabels:
      app: httpbin

1.5.1.6. OpenSSL

Red Hat OpenShift Service Mesh는 BoringSSL을 OpenSSL로 대체합니다. OpenSSL은 SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security) 프로토콜의 오픈 소스 구현이 포함된 소프트웨어 라이브러리입니다. Red Hat OpenShift Service Mesh 프록시 바이너리는 기본 Red Hat Enterprise Linux 운영 체제에서 OpenSSL 라이브러리(libssl 및 libcrypto)를 동적으로 연결합니다.

1.5.1.7. 외부 워크로드

Red Hat OpenShift Service Mesh는 외부 워크로드(가상 머신)를 지원하지 않습니다.

1.5.1.8. 구성 요소 수정

  • maistra-version 레이블이 모든 리소스에 추가되었습니다.
  • 모든 Ingress 리소스가 OpenShift Route 리소스로 변환되었습니다.
  • Grafana, Tracing(Jaeger) 및 Kiali는 기본적으로 활성화되어 OpenShift 경로를 통해 노출됩니다.
  • Godebug가 모든 템플릿에서 제거됨
  • istio-multi ServiceAccount과 ClusterRoleBinding, istio-reader ClusterRole이 제거되었습니다.

1.5.1.9. Envoy 서비스

Red Hat OpenShift Service Mesh는 QUIC 기반 서비스를 지원하지 않습니다.

1.5.1.10. Istio CNI(컨테이너 네트워크 인터페이스)

Red Hat OpenShift Service Mesh에는 CNI 플러그인이 포함되어 있으며, 이것은 애플리케이션 Pod 네트워킹을 구성할 수 있는 대체 방법을 제공합니다. CNI 플러그인은 상승된 권한으로 SCC(보안 컨텍스트 제약 조건)에 대한 서비스 계정 및 프로젝트 액세스 권한을 부여할 필요가 없도록 init-container 네트워크 구성을 대체합니다.

1.5.1.11. Istio 게이트웨이 경로

Istio 게이트웨이의 OpenShift 경로는 Red Hat OpenShift Service Mesh에서 자동으로 관리됩니다. Istio 게이트웨이가 서비스 메시 내부에서 생성, 업데이트 또는 삭제될 때마다 OpenShift 경로가 생성, 업데이트 또는 삭제됩니다.

IOR(Istio OpenShift Routing)이라는 Red Hat OpenShift Service Mesh Control Plane 구성 요소는 게이트웨이 경로를 동기화합니다. 자세한 내용은 자동 경로 생성을 참조하십시오.

1.5.1.11.1. catch-all 도메인

catch-all 도메인("*")은 지원되지 않습니다. 게이트웨이 정의에서 이 도메인이 발견되면 Red Hat OpenShift Service Mesh는 경로를 생성하지만 기본 호스트 이름을 만들기 위해 OpenShift에 의존합니다. 즉, 새로 생성된 경로는 catch-all ("*") 경로가 아니며, 대신 r<route-name>[-<project>].<suffix> 형식의 호스트 이름이 있습니다. 기본 호스트 이름이 작동하는 방법과 cluster-admin이 사용자 지정할 수 있는 방법에 대한 자세한 내용은 OpenShift 설명서를 참조하십시오. Red Hat OpenShift Dedicated를 사용하는 경우 Red Hat OpenShift Dedicated에서 dedicated-admin 역할을 참조하십시오.

1.5.1.11.2. 하위 도메인

하위 도메인(예: "*.domain.com")이 지원됩니다. 그러나 이 기능은 OpenShift에서 기본적으로 활성화되어 있지 않습니다. 즉, Red Hat OpenShift Service Mesh는 하위 도메인이 있는 경로를 생성하지만 OpenShift가 이것을 활성화하도록 구성된 경우에만 적용됩니다.

1.5.1.11.3. TLS(Transport layer security)

TLS(Transport Layer Security)가 지원됩니다. 즉, 게이트웨이에 tls 섹션이 포함된 경우 OpenShift 경로는 TLS를 지원하도록 구성됩니다.

1.5.1.11.4. WebAssembly 확장

Red Hat OpenShift Service Mesh 2.0에서는 Envoy Proxy에 대한 WebAssembly 확장을 기술 프리뷰로 소개했습니다. Istio WASM 확장은 프록시 바이너리에 포함되지 않으며 업스트림 Istio 커뮤니티의 WASM 필터는 Red Hat OpenShift Service Mesh 2.0에서 지원되지 않습니다.

추가 리소스

1.5.2. 다중 테넌트 설치

업스트림 Istio는 하나의 테넌트 접근법을 사용하지만 Red Hat OpenShift Service Mesh는 클러스터 내에서 여러 개의 독립적인 컨트롤 플레인을 지원합니다. Red Hat OpenShift Service Mesh는 다중 테넌트 연산자를 사용하여 컨트롤 플레인 라이프사이클을 관리합니다.

Red Hat OpenShift Service Mesh는 기본적으로 다중 테넌트 컨트롤 플레인을 설치합니다. 서비스 메시에 액세스할 수 있는 프로젝트를 지정하고 다른 컨트롤 플레인 인스턴스에서 서비스 메시를 분리합니다.

1.5.2.1. 멀티 테넌시 대 클러스터 전체 설치

다중 테넌트 설치와 클러스터 전체 설치의 주요 차이점은 컨트롤 플레인 배포에서 사용하는 권한 범위입니다(예: Galley, Pilot). 구성 요소는 더 이상 클러스터 범위의 역할 기반 액세스 제어(RBAC) 리소스 ClusterRoleBinding을 사용하지 않습니다.

ServiceMeshMemberRoll members 목록에 있는 모든 프로젝트는 컨트롤 플레인 배포와 관련된 각 서비스 계정에 대해 RoleBinding을 가지며, 각 컨트롤 플레인 배포는 해당하는 멤버 프로젝트만 감시합니다. 각 멤버 프로젝트에는 maistra.io/member-of 레이블이 추가됩니다. 여기서 member-of 값은 컨트롤 플레인 설치가 포함된 프로젝트입니다.

Red Hat OpenShift Service Mesh는 각 멤버 프로젝트를 구성하여 자체, 컨트롤 플레인 및 기타 멤버 프로젝트 간의 네트워크 액세스를 보장합니다. 정확한 구성은 OpenShift 소프트웨어 정의 네트워킹(SDN)이 구성된 방법에 따라 다릅니다. 자세한 내용은 OpenShift SDN 정보를 참조하십시오.

OpenShift Container Platform 클러스터가 SDN 플러그인을 사용하도록 구성된 경우:

  • NetworkPolicy: Red Hat OpenShift Service Mesh는 각 멤버 프로젝트에서 NetworkPolicy 리소스를 생성하여 다른 멤버 및 컨트롤 플레인에서 모든 pod로 수신할 수 있습니다. Service Mesh에서 멤버를 제거하면 이 NetworkPolicy 리소스는 프로젝트에서 삭제됩니다.

    참고

    또한 멤버 프로젝트 전용 수신으로 제한합니다. 멤버 외 프로젝트에서 수신이 필요한 경우 해당 트래픽을 허용하기 위해 NetworkPolicy를 생성해야 합니다.

  • 다중 테넌트: Red Hat OpenShift Service Mesh는 각 멤버 프로젝트의 NetNamespace를 컨트롤 플레인 프로젝트의 NetNamespace에 결합합니다(oc adm pod-network join-projects --to control-plane-project member-project). 서비스 메시에서 멤버를 제거하면 해당 NetNamespace가 컨트롤 플레인과 분리됩니다(oc adm pod-network isolate-projects member-project 실행과 동일).
  • 서브넷: 추가 구성이 수행되지 않습니다.

1.5.2.2. 클러스터 범위 리소스

업스트림 Istio에는 의존하는 두 개의 클러스터 범위 리소스가 있습니다. MeshPolicyClusterRbacConfig 이는 다중 테넌트 클러스터와 호환되지 않으며 아래에 설명된 대로 교체되었습니다.

  • ServiceMeshPolicy는 컨트롤 플레인 전체의 인증 정책 구성을 위해 MeshPolicy를 대체합니다. 이는 컨트롤 플레인과 동일한 프로젝트에서 생성되어야 합니다.
  • ServicemeshRbacConfig는 컨트롤 플레인 전체 역할 기반 액세스 제어 구성을 위해 ClusterRbacConfig 를 대체합니다. 이는 컨트롤 플레인과 동일한 프로젝트에서 생성되어야 합니다.

1.5.3. Kiali 및 서비스 메시

OpenShift Container Platform의 서비스 메시를 통해 Kiali를 설치하는 것은 여러 가지 면에서 커뮤니티 Kiali 설치와 다릅니다. 이러한 수정은 OpenShift Container Platform에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

  • Kiali는 기본적으로 활성화되어 있습니다.
  • Ingress는 기본적으로 활성화되어 있습니다.
  • Kiali ConfigMap이 업데이트되었습니다.
  • Kiali의 ClusterRole 설정이 업데이트되었습니다.
  • Service Mesh 또는 Kiali Operator에서 이러한 변경 사항을 덮어쓸 수 있으므로 ConfigMap 또는 Kiali 사용자 정의 리소스 파일을 편집하지 마십시오. Red Hat OpenShift Service Mesh에서 실행 중인 Kiali에 대한 모든 구성은 ServiceMeshControlPlane 사용자 정의 리소스 파일에서 수행되며 구성 옵션은 제한됩니다. Operator 파일을 업데이트하려면 cluster-admin 권한이 있는 사용자로 제한해야 합니다. Red Hat OpenShift Dedicated를 사용하는 경우 운영자 파일을 업데이트하는 것은 dedicated-admin 권한이 있는 사용자로 제한되어야 합니다.

1.5.4. Jaeger 및 서비스 메시

OpenShift Container Platform의 서비스 메시를 통해 Jaeger를 설치하는 것은 여러 가지 면에서 커뮤니티 Jaeger 설치와 다릅니다. 이러한 수정은 OpenShift Container Platform에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

  • Jaeger는 기본적으로 서비스 메시에 대해 활성화되어 있습니다.
  • Ingress는 기본적으로 서비스 메시에 대해 활성화되어 있습니다.
  • Zipkin 포트 이름의 이름이 jaeger-collector-zipkin(http)으로 변경되었습니다.
  • Jaeger는 프로덕션 또는 스트리밍 배포 옵션을 선택할 때 기본적으로 스토리지에 Elasticsearch를 사용합니다.
  • Istio 커뮤니티 버전은 일반적인 "tracing" 경로를 제공합니다. Red Hat OpenShift Service Mesh는 Jaeger Operator가 설치하고 이미 OAuth에 의해 보호되는 "jaeger" 경로를 사용합니다.
  • Red Hat OpenShift Service Mesh는 Envoy 프록시에 사이드카를 사용하며 Jaeger 또한 Jaeger 에이전트에 사이드카를 사용합니다. 이 두 가지 사이드카는 별도로 구성되어 있으며 서로 혼동해서는 안 됩니다. 프록시 사이드카는 Pod의 수신 및 송신 트래픽과 관련된 기간을 생성합니다. 에이전트 사이드카는 응용 프로그램에서 발송되는 기간을 수신하여 Jaeger 수집기로 보냅니다.

1.6. Red Hat OpenShift Service Mesh 설치 준비

Red Hat OpenShift Service Mesh를 설치하려면 먼저 OpenShift Container Platform을 구독하고 지원되는 구성에 OpenShift Container Platform을 설치해야 합니다.

1.6.1. 사전 요구 사항

1.6.2. 지원되는 구성

Red Hat OpenShift Service Mesh의 현재 릴리스에서는 다음 구성이 지원됩니다.

  • Red Hat OpenShift Container Platform 버전 4.x.
참고

Red Hat OpenShift Online은 Red Hat OpenShift Service Mesh에서 지원되지 않습니다.

  • 배포되지 않은 단일 OpenShift Container Platform 클러스터에 포함되어야 합니다.
  • 이번 Red Hat OpenShift Service Mesh 릴리스는 OpenShift Container Platform x86_64, IBM Z 및 IBM Power Systems에서만 사용 가능합니다.

    • IBM Z는 Openshift Container Platform 4.6 이상에서만 지원됩니다.
    • IBM Power Systems은 OpenShift Container Platform 4.6 이상에서만 지원됩니다.
  • 모든 Service Mesh 구성 요소가 작동하는 OpenShift 클러스터에 포함된 구성입니다. Red Hat OpenShift Service Mesh는 클러스터 외부에 있거나 멀티 클러스터 시나리오에 있는 마이크로 서비스 관리는 지원하지 않습니다.
  • 가상 머신과 같은 외부 서비스를 통합하지 않는 구성입니다.

Red Hat OpenShift Service Mesh 라이프사이클 및 지원되는 구성에 대한 자세한 내용은 지원 정책을 참조하십시오.

1.6.2.1. 지원되는 네트워크 구성

Red Hat OpenShift Service Mesh는 다음과 같은 네트워크 구성을 지원합니다.

  • Openshift-SDN
  • OVN-Kubernetes는 OpenShift Container Platform 버전 4.7에서 기술 프리뷰로 제공됩니다.

1.6.2.2. Kiali에 대해 지원되는 구성

  • Kiali Observation Console은 Chrome, Edge, Firefox 또는 Safari 브라우저의 두 가지 최신 버전에서만 지원됩니다.

1.6.2.3. 분산 추적에 지원되는 구성

  • 사이드카로서의 Jaeger 에이전트는 Jaeger에 대해 지원되는 유일한 구성입니다. 다중 테넌트 설치 또는 OpenShift Dedicated에서는 데몬 세트로 Jaeger가 지원되지 않습니다.

1.6.2.4. 지원되는 Mixer 어댑터

  • 이 릴리스에서는 다음 Mixer 어댑터만 지원합니다.

    • 3scale Istio 어댑터

1.6.3. 다음 단계

1.7. Operator 설치

Red Hat OpenShift Service Mesh를 설치하려면 먼저 OpenShift Container Platform에 필요한 Operator를 설치한 다음 ServiceMeshControlPlane 리소스를 생성하여 컨트롤 플레인을 배포합니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 설치 준비 프로세스를 읽어 보십시오.
  • cluster-admin 역할이 있는 계정. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.

다음 단계에서는 OpenShift Container Platform에 Red Hat OpenShift Service Mesh의 기본 인스턴스를 설치하는 방법을 보여줍니다.

1.7.1. Operator 개요

Red Hat OpenShift Service Mesh에는 다음과 같은 네 가지 Operator가 필요합니다.

  • OpenShift Elasticsearch - (선택 사항)는 Jaeger를 사용하여 추적 및 로깅할 수 있는 데이터베이스 스토리지를 제공합니다. 오픈 소스 Elasticsearch 프로젝트를 기반으로 합니다.
  • Jaeger - 복잡한 분산 시스템의 트랜잭션을 모니터링하고 문제를 해결하기 위해 추적 기능을 제공합니다. 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
  • Kiali - 서비스 메시에 대한 가시성을 제공합니다. 단일 콘솔에서 구성을 보고, 트래픽을 모니터링하며 추적을 분석할 수 있습니다. 오픈 소스 Kiali 프로젝트를 기반으로 합니다.
  • Red Hat OpenShift Service Mesh - 애플리케이션을 구성하는 마이크로 서비스를 연결, 보안, 제어 및 관찰할 수 있습니다. Service Mesh Operator는 Service Mesh 구성 요소의 배포, 업데이트 및 삭제를 관리하는 ServiceMeshControlPlane 리소스를 정의하고 모니터링합니다. 오픈소스 Istio 프로젝트를 기반으로 합니다.

1.7.2. Operator 설치

Red Hat OpenShift Service Mesh를 설치하려면 다음 Operator를 이 순서대로 설치합니다. 각 Operator에 대한 절차를 반복합니다.

  1. (Optional) OpenShift Elasticsearch
  2. Jaeger
  3. Kiali
  4. Red Hat OpenShift Service Mesh

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub를 클릭합니다.
  3. Operator 이름을 필터 상자에 입력하고 Red Hat 버전의 Operator를 선택합니다. Operator의 커뮤니티 버전은 지원되지 않습니다.
  4. 설치를 클릭합니다.
  5. Operator 설치 페이지에서 설치 옵션을 선택합니다.

    1. OpenShift Elasticsearch Operator의 업데이트 채널 섹션에서 4.6을 선택합니다.
    2. Jaeger, Kiali 및 Red Hat OpenShift Service Mesh Operator의 경우 기본값을 수락합니다.

      Jaeger, Kiali 및 Red Hat OpenShift Service Mesh는 openshift-operators 네임스페이스에 설치됩니다. OpenShift Elasticsearch Operator는 openshift-operators-redhat 네임스페이스에 설치됩니다.

  6. 설치를 클릭합니다. 목록의 다음 Operator에 대한 단계를 반복하기 전에 Operator가 설치될 때까지 기다립니다.
  7. 4개의 Operator를 모두 설치한 후 Operator 설치된 Operator를 클릭하여 Operator가 설치되었는지 확인합니다.

1.7.3. 다음 단계

ServiceMeshControlPlane 리소스를 생성하여 서비스 메시의 구성 요소를 구성합니다. 자세한 내용은 ServiceMeshControlPlane 생성을 참조하십시오.

1.8. ServiceMeshControlPlane 생성

oc 클라이언트 툴을 사용하여 OpenShift Container Platform 웹 콘솔 또는 명령줄에서 ServiceMeshControlPlane의 기본 설치를 배포할 수 있습니다.

1.8.1. 웹 콘솔에서 컨트롤 플레인 배포

웹 콘솔을 사용하여 기본 ServiceMeshControlPlane을 배포할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
  • cluster-admin 역할이 있는 계정.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. istio-system이라는 프로젝트를 생성합니다.

    1. 프로젝트로 이동합니다.
    2. 프로젝트 만들기를 클릭합니다.
    3. Name (이름) 필드에 istio-system을 입력합니다. ServiceMeshControlPlane 리소스는 마이크로 서비스 및 Operator와 별도로 프로젝트에 설치해야 합니다.

      이러한 단계는 예제로 istio-system을 사용하지만 서비스가 포함된 프로젝트와 별도로 모든 프로젝트에 컨트롤 플레인을 배포할 수 있습니다.

    4. 생성을 클릭합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. Red Hat OpenShift Service Mesh Operator를 클릭한 다음 Istio Service Mesh Control Plane을 클릭합니다.
  5. Istio Service Mesh Control Plane 탭에서 ServiceMeshControlPlane 생성을 클릭합니다.
  6. ServiceMeshControlPlane 생성 페이지에서 기본 컨트롤 플레인 버전을 수락하여 제품의 최신 버전에서 사용할 수 있는 기능을 활용합니다. 컨트롤 플레인의 버전에 따라 Operator 버전에 관계없이 사용 가능한 기능이 결정됩니다.

    나중에 ServiceMeshControlPlane 설정을 구성할 수 있습니다. 자세한 내용은 Red Hat OpenShift Service Mesh 구성을 참조하십시오.

    1. 생성을 클릭합니다. Operator는 구성 매개변수를 기반으로 pods, 서비스 및 Service Mesh Control Plane 구성 요소를 생성합니다.
  7. 컨트롤 플레인이 올바르게 설치되었는지 확인하려면 Istio Service Mesh Control Plane 탭을 클릭합니다.

    1. 새 컨트롤 플레인의 이름을 클릭합니다.
    2. 리소스 탭을 클릭하여 Operator가 생성 및 구성된 Red Hat OpenShift Service Mesh Control Plane 리소스를 확인합니다.

1.8.2. CLI에서 컨트롤 플레인 배포

명령줄에서 기본 ServiceMeshControlPlane을 배포할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform CLI에 로그인합니다.

    $ oc login https://{HOSTNAME}:6443
  2. istio-system이라는 프로젝트를 생성합니다.

    $ oc new-project istio-system
  3. 다음 예제를 사용하여 istio-installation.yaml이라는 ServiceMeshControlPlane 파일을 생성합니다. 컨트롤 플레인의 버전에 따라 Operator 버전에 관계없이 사용 가능한 기능이 결정됩니다.

    버전 2.0 istio-installation.yaml 예

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.0
      tracing:
        type: Jaeger
        sampling: 10000
      addons:
        jaeger:
          name: jaeger
          install:
            storage:
              type: Memory
        kiali:
          enabled: true
          name: kiali
        grafana:
          enabled: true

  4. 다음 명령을 실행하여 컨트롤 플레인을 배포합니다. 여기서 <istio_installation.yaml>에 파일에 대한 전체 경로가 포함됩니다.

    $ oc create -n istio-system -f <istio_installation.yaml>
  5. 다음 명령을 실행하여 컨트롤 플레인 설치를 확인합니다.

    $ oc get smcp -n istio-system

    STATUS 열이 ComponentsReady인 경우 설치가 성공적으로 완료되었습니다.

Red Hat OpenShift Service Mesh는 클러스터 내에서 여러 개의 독립적인 컨트롤 플레인을 지원합니다. ServiceMeshControlPlane 프로필을 사용하여 재사용 가능한 구성을 생성할 수 있습니다. 자세한 내용은 컨트롤 플레인 프로필 생성을 참조하십시오.

1.8.3. 다음 단계

ServiceMeshMemberRoll 리소스를 만들어 Service Mesh와 연결된 네임스페이스를 지정합니다. 자세한 내용은 서비스 메시에 서비스 추가를 참조하십시오.

1.9. 서비스 메시에 서비스 추가

Operator 및 ServiceMeshControlPlane 리소스를 설치한 후 ServiceMeshMemberRoll 리소스를 생성하고 콘텐츠가 있는 네임스페이스를 지정하여 애플리케이션, 워크로드 또는 서비스를 메시에 추가합니다. ServiceMeshMemberRoll 리소스에 추가할 애플리케이션, 워크플로 또는 서비스가 이미 있는 경우 다음 단계를 사용하십시오. 또는 Bookinfo라는 샘플 애플리케이션을 설치하고 ServiceMeshMemberRoll 리소스에 추가하려면 Bookinfo 예제 애플리케이션을 설치하려면 자습서로 건너뛰어 Red Hat OpenShift Service Mesh에서 애플리케이션이 작동하는 방식을 확인하십시오.

ServiceMeshMemberRoll 리소스에 나열된 항목은 ServiceMeshControlPlane 리소스에서 관리하는 애플리케이션 및 워크플로입니다. Service Mesh Operator, Istiod 및 ServiceMeshControlPlane을 포함하는 컨트롤 플레인과 애플리케이션 및 Envoy 프록시를 포함하는 데이터 플레인은 별도의 네임스페이스에 있어야 합니다.

참고

ServiceMeshMemberRoll에 네임스페이스를 추가한 후에는 해당 네임스페이스의 서비스 또는 포드에 액세스하면 서비스 메시 외부의 호출자가 액세스할 수 없습니다.

1.9.1. Red Hat OpenShift Service Mesh 멤버 롤 생성

ServiceMeshMemberRoll은 컨트롤 플레인에 속하는 프로젝트를 나열합니다. ServiceMeshMemberRoll에 나열된 프로젝트만 컨트롤 플레인의 영향을 받습니다. 특정 컨트롤 플레인 배포의 멤버 롤에 추가할 때까지 프로젝트는 서비스 메시에 속하지 않습니다.

ServiceMeshControlPlane과 동일한 프로젝트에서 default라는 ServiceMeshMemberRoll 리소스를 생성해야 합니다(예: istio-system ).

1.9.1.1. 웹 콘솔에서 멤버 롤 생성

웹 콘솔에서 서비스 메시 멤버 롤에 하나 이상의 프로젝트를 추가할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 서비스 메시에 추가할 기존 프로젝트 목록.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 메시에 대한 서비스가 없거나 처음부터 시작하는 경우 프로젝트를 생성합니다. istio-system과 달라야 합니다.

    1. 프로젝트로 이동합니다.
    2. 이름 필드에 이름을 입력합니다.
    3. 생성을 클릭합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. 프로젝트 메뉴를 클릭하고 ServiceMeshControlPlane 리소스가 목록에서 배포되는 프로젝트를 선택합니다(예: istio-system ).
  5. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  6. Istio Service Mesh 멤버 롤 탭을 클릭합니다.
  7. ServiceMeshMemberRoll 생성을클릭합니다.
  8. Members(구성원 )를 클릭한 다음 Value(값 ) 필드에 프로젝트 이름을 입력합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  9. 생성을 클릭합니다.

1.9.1.2. CLI에서 멤버 롤 생성

명령줄에서 ServiceMeshMemberRoll에 프로젝트를 추가할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 서비스 메시에 추가할 프로젝트 목록.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.

    $ oc login https://{HOSTNAME}:6443
  2. 메시에 대한 서비스가 없거나 처음부터 시작하는 경우 프로젝트를 생성합니다. istio-system과 달라야 합니다.

    $ oc new-project {your-project}
  3. 프로젝트를 멤버로 추가하려면 다음 예제 YAML을 수정합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.

    servicemeshmemberroll-default.yaml 예

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

  4. 다음 명령을 실행하여 istio-system 네임스페이스에 ServiceMeshMemberRoll 리소스를 업로드하고 만듭니다.

    $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  5. 다음 명령을 실행하여 ServiceMeshMemberRoll이 성공적으로 생성되었는지 확인합니다.

    $ oc get smmr -n istio-system default

    STATUS 열이 Configured이면 설치가 성공적으로 완료되었습니다.

1.9.2. 서비스 메시에서 프로젝트 추가 또는 제거

웹 콘솔을 사용하여 기존 Service Mesh ServiceMeshMemberRoll 리소스에서 프로젝트를 추가하거나 제거할 수 있습니다.

  • 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  • 해당 ServiceMeshControlPlane 리소스가 삭제되면 ServiceMeshMemberRoll 리소스가 삭제됩니다.

1.9.2.1. 웹 콘솔을 사용하여 멤버 롤에서 프로젝트 추가 또는 제거

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 기존 ServiceMeshMemberRoll 리소스.
  • ServiceMeshMemberRoll 리소스를 사용한 프로젝트의 이름.
  • 메시에서 추가하거나 삭제하려는 프로젝트의 이름.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operators설치된 Operator로 이동합니다.
  3. 프로젝트 메뉴를 클릭하고 ServiceMeshControlPlane 리소스가 목록에서 배포되는 프로젝트를 선택합니다(예: istio-system ).
  4. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  5. Istio Service Mesh 멤버 롤 탭을 클릭합니다.
  6. default 링크를 클릭합니다.
  7. YAML 탭을 클릭합니다.
  8. YAML을 수정하여 프로젝트를 멤버로 추가하거나 제거합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  9. 저장을 클릭합니다.
  10. 새로 고침을 클릭합니다.

1.9.2.2. CLI를 사용하여 멤버 롤에서 프로젝트 추가 또는 제거

명령줄을 사용하여 기존 서비스 메시 멤버 롤을 수정할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 기존 ServiceMeshMemberRoll 리소스.
  • ServiceMeshMemberRoll 리소스를 사용한 프로젝트의 이름.
  • 메시에서 추가하거나 삭제하려는 프로젝트의 이름.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. ServiceMeshMemberRoll 리소스를 편집합니다.

    $ oc edit smmr -n <controlplane-namespace>
  3. YAML을 수정하여 프로젝트를 멤버로 추가하거나 제거합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

1.9.3. Bookinfo 예제 애플리케이션

Bookinfo 예제 애플리케이션을 사용하면 OpenShift Container Platform에서 Red Hat OpenShift Service Mesh 2.0.6 설치를 테스트할 수 있습니다.

Bookinfo 애플리케이션은 온라인 서점의 단일 카탈로그 항목과 유사하게 한 권의 책에 대한 정보를 표시합니다. 애플리케이션에는 책, 책 세부 정보(ISBN, 페이지 수 및 기타 정보) 및 도서 리뷰가 포함된 페이지가 표시됩니다.

Bookinfo 애플리케이션은 이러한 마이크로 서비스로 구성됩니다.

  • productpage 마이크로 서비스는 detailsreviews 마이크로 서비스를 호출하여 페이지를 채웁니다.
  • details 마이크로 서비스에는 도서 정보가 포함되어 있습니다.
  • reviews 마이크로 서비스에는 도서 리뷰가 포함되어 있습니다. 이를 ratings 마이크로 서비스라고도 합니다.
  • ratings 마이크로 서비스에는 도서 리뷰와 함께 제공되는 도서 순위 정보가 포함되어 있습니다.

리뷰 마이크로 서비스의 세 가지 버전이 있습니다.

  • 버전 v1에서는 ratings 서비스를 호출하지 않습니다.
  • 버전 v2는 ratings 서비스를 호출하고 각 평가를 1~5개의 검정별로 표시합니다.
  • 버전 v3은 ratings 서비스를 호출하고 각 평가를 1~5개의 빨강별로 표시합니다.

1.9.3.1. Bookinfo 애플리케이션 설치

이 튜토리얼에서는 프로젝트를 생성하고, Bookinfo 애플리케이션을 해당 프로젝트에 배포하고, 서비스 메시에서 실행 중인 애플리케이션을 확인하여 샘플 애플리케이션을 생성하는 방법을 안내합니다.

사전 요구 사항:

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
  • cluster-admin 역할이 있는 계정.
참고

Bookinfo 샘플 애플리케이션은 IBM Z 및 IBM Power Systems에 설치할 수 없습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 cluster-admin 권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. 프로젝트를 클릭합니다.
  3. 프로젝트 만들기를 클릭합니다.
  4. 프로젝트 이름으로 bookinfo를 입력하고, 디스플레이 이름, 설명을 입력한 다음 생성을 클릭합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 생성할 수 있습니다.

      $ oc new-project bookinfo
  5. Operators설치된 Operator를 클릭합니다.
  6. 프로젝트 메뉴를 클릭하고 컨트롤 플레인 네임스페이스를 사용합니다. 이 예제에서는 istio-system을 사용합니다.
  7. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  8. Istio Service Mesh 멤버 롤 탭을 클릭합니다.

    1. 이미 Istio Service Mesh 멤버 롤을 생성한 경우, 이름을 클릭한 다음 YAML 탭을 클릭하여 YAML 편집기를 엽니다.
    2. ServiceMeshMemberRoll을 생성하지 않은 경우 ServiceMeshMemberRoll 생성을 클릭합니다.
  9. Members(구성원 )를 클릭한 다음 Value(값 ) 필드에 프로젝트 이름을 입력합니다.
  10. 생성을 클릭하여 업데이트된 서비스 메시 멤버 롤을 저장합니다.

    • + 또는 다음 예제를 YAML 파일에 저장합니다.

      Bookinfo ServiceMeshMemberRoll example servicemeshmemberroll-default.yaml

      apiVersion: maistra.io/v1
      kind: ServiceMeshMemberRoll
      metadata:
        name: default
      spec:
        members:
        - bookinfo

      1. 다음 명령을 실행하여 해당 파일을 업로드하고 istio-system 네임스페이스에 ServiceMeshMemberRoll 리소스를 만듭니다.

        $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  11. 다음 명령을 실행하여 ServiceMeshMemberRoll이 성공적으로 생성되었는지 확인합니다.

    $ oc get smmr -n istio-system

    STATUS 열이 Configured이면 설치가 성공적으로 완료되었습니다.

    NAME      READY   STATUS       AGE
    default   1/1     Configured   2m27s
  12. CLI에서 bookinfo.yaml 파일을 적용하여 'bookinfo' 프로젝트에 Bookinfo 애플리케이션을 배포합니다.

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/platform/kube/bookinfo.yaml

    출력은 다음과 유사합니다.

    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
  13. bookinfo-gateway.yaml 파일을 적용하여 수신 게이트웨이를 생성합니다.

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/bookinfo-gateway.yaml

    출력은 다음과 유사합니다.

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
  14. GATEWAY_URL 매개변수 값을 설정합니다.

    참고

    <control_plane_project>를 컨트롤 플레인 프로젝트 이름으로 교체합니다. 이 예제에서 컨트롤 플레인 프로젝트는 istio-system입니다.

    $ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')

1.9.3.2. 기본 대상 규칙 추가

Bookinfo 애플리케이션을 사용하려면 먼저 기본 대상 규칙을 추가해야 합니다. 상호 TLS(Transport layer security) 인증을 활성화했는지 여부에 따라 사전 구성된 YAML 파일이 두 개 있습니다.

프로세스

  1. 대상 규칙을 추가하려면 다음 명령 중 하나를 실행합니다.

    • 상호 TLS를 활성화하지 않은 경우:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/destination-rule-all.yaml
    • 상호 TLS를 활성화한 경우:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/destination-rule-all-mtls.yaml

      출력은 다음과 유사합니다.

      destinationrule.networking.istio.io/productpage created
      destinationrule.networking.istio.io/reviews created
      destinationrule.networking.istio.io/ratings created
      destinationrule.networking.istio.io/details created

1.9.3.3. Bookinfo 설치 확인

샘플 Bookinfo 애플리케이션이 성공적으로 배포되었는지 확인하려면 다음 단계를 수행합니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
  • Bookinfo 샘플 애플리케이션을 설치하는 단계를 완료합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. 이 명령으로 모든 Pod가 준비되었는지 확인합니다.

    $ oc get pods -n bookinfo

    모든 포드의 상태는 Running이어야 합니다. 출력은 다음과 유사합니다.

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-55b869668-jh7hb        2/2     Running   0          12m
    productpage-v1-6fc77ff794-nsl8r   2/2     Running   0          12m
    ratings-v1-7d7d8d8b56-55scn       2/2     Running   0          12m
    reviews-v1-868597db96-bdxgq       2/2     Running   0          12m
    reviews-v2-5b64f47978-cvssp       2/2     Running   0          12m
    reviews-v3-6dfd49b55b-vcwpf       2/2     Running   0          12m
  3. 다음 명령을 실행하여 제품 페이지의 URL을 검색합니다.

    echo "http://$GATEWAY_URL/productpage"
  4. 웹 브라우저에 출력을 복사하여 붙여넣어 Bookinfo 제품 페이지가 배포되었는지 확인합니다.

1.9.3.4. Bookinfo 애플리케이션 제거

다음 단계에 따라 Bookinfo 애플리케이션을 제거하십시오.

사전 요구 사항

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
1.9.3.4.1. Bookinfo 프로젝트 삭제

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트를 클릭합니다.
  3. bookinfo 메뉴 kebab 를 클릭한 다음 프로젝트 삭제를 클릭합니다.
  4. 확인 대화 상자에 bookinfo를 입력한 다음 삭제 를 클릭합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 생성할 수 있습니다.

      $ oc delete project bookinfo
1.9.3.4.2. 서비스 메시 멤버 롤에서 Bookinfo 프로젝트를 제거

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operators설치된 Operator를 클릭합니다.
  3. 프로젝트 메뉴를 클릭하고 목록에서 openshift-operators를 선택합니다.
  4. Red Hat OpenShift Service Mesh Operator에 대해 제공된 APIS에서 Istio Service Mesh 멤버 롤 링크를 클릭합니다.
  5. ServiceMeshMemberRoll 메뉴 kebab 를 클릭하고 서비스 메시 멤버 롤 편집을 선택합니다.
  6. 기본 Service Mesh 멤버 롤 YAML을 편집하고 멤버 목록에서 bookinfo를 삭제합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 ServiceMeshMemberRoll에서 삭제할 수 있습니다. 이 예에서 istio-system은 컨트롤 플레인 프로젝트의 이름입니다.

      $ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
  7. 저장을 클릭하여 서비스 메시 멤버 롤을 업데이트합니다.

1.9.4. 다음 단계

1.10. 사이드카 삽입 활성화

메시에 서비스를 추가한 후 애플리케이션의 배포 리소스에서 자동 사이드카 삽입을 활성화합니다. 각 배포에 대해 자동 사이드카 삽입을 활성화해야 합니다.

Bookinfo 샘플 애플리케이션을 설치한 경우 애플리케이션이 배포되고 사이드카가 삽입되었습니다. 자체 프로젝트 및 서비스를 사용하는 경우 OpenShift Container Platform에 애플리케이션을 배포합니다. 자세한 내용은 Deployment and DeploymentConfig 오브젝트 이해를 참조하십시오.

1.10.1. 사전 요구 사항

1.10.2. 자동 사이드카 삽입 활성화

애플리케이션을 배포할 때 sidecar.istio.io/inject 주석을 "true"로 설정하여 삽입을 선택해야합니다. 이 설정을 통해 사이드카 삽입이 OpenShift 에코시스템 내 여러 프레임 워크에서 사용되는 builder pod와 같은 다른 OpenShift 기능을 방해하지 않도록 할 수 있습니다.

사전 요구 사항

  • 자동 사이드카 삽입을 활성화하려는 배포를 식별합니다.

프로세스

  1. 편집기에서 애플리케이션의 배포 구성 YAML 파일을 엽니다. 배포를 찾으려면 oc get 명령을 사용합니다. 예를 들어 절전 네임스페이스에서 sleep 이라는 앱의 경우 다음 명령을 사용하여 YAML 형식의 리소스를 확인합니다.

    oc get deployment sleep -o yaml
  2. spec.template.metadata.annotations.sidecar.istio/inject 필드에서 값이 "true"인 구성 YAML에 sidecar.istio.io /inject를 추가합니다. sleep이라는 앱의 예는 다음 예를 참조하십시오.

    절전 테스트 애플리케이션 예 sleep.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: sleep
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true"
          labels:
            app: sleep
        spec:
          containers:
          - name: sleep
            image: curlimages/curl
            command: ["/bin/sleep","3650d"]
            imagePullPolicy: IfNotPresent

  3. 구성 파일을 저장합니다.
  4. 앱을 포함하는 프로젝트에 파일을 다시 추가합니다. 이 예에서 sleep은 sleep 앱과 sleep .yaml이 포함된 프로젝트의 이름입니다.

    $ oc apply -n sleep -f sleep.yaml
  5. 리소스가 업로드되었는지 확인하려면 다음 명령을 실행합니다.

    oc get deployment sleep -o yaml

1.10.3. 애플리케이션 pod 업데이트

Operator를 설치할 때 자동 승인 전략을 선택한 경우 Operator는 컨트롤 플레인을 자동으로 업데이트하지만 애플리케이션을 업데이트하지 않습니다. 기존 애플리케이션은 계속 메시의 일부가 되고, 그에 따라 기능합니다. 애플리케이션 관리자는 사이드카를 업그레이드하려면 애플리케이션을 다시 시작해야 합니다.

배포에서 자동 사이드카 삽입을 사용하는 경우 주석을 추가하거나 수정하여 배포에서 Pod 템플릿을 업데이트할 수 있습니다. 다음 명령을 실행하여 pod를 다시 배포합니다.

$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'

배포에서 자동 사이드카 삽입을 사용하지 않는 경우, 배포 또는 Pod에 지정된 사이드카 컨테이너 이미지를 수정하여 사이드카를 수동으로 업데이트해야 합니다.

1.10.4. 주석을 통해 애플리케이션의 프록시에서 환경 변수 설정

injection-template.yaml 파일 배포에 Pod 주석을 추가하여 애플리케이션의 사이드카 프록시에서 환경 변수를 설정할 수 있습니다. 환경 변수가 사이드카에 삽입됩니다.

예: injection-template.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: resource
spec:
  replicas: 7
  selector:
    matchLabels:
      app: resource
  template:
    metadata:
      annotations:
        sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"

주의

maistra.io/ 레이블 및 주석은 Operator에서 리소스를 생성하고 관리한다는 것을 나타내기 때문에 사용자 생성 리소스에 포함되지 않아야 합니다. 자체 리소스를 생성할 때 Operator 생성 리소스에서 콘텐츠를 복사하는 경우, maistra.io/로 시작하는 레이블이나 주석을 포함하지 마십시오. 그렇지 않으면 다음 조정 중에 Operator에 의해 덮어쓰거나 삭제됩니다.

1.10.5. 다음 단계

환경에 맞게 Red Hat OpenShift Service Mesh 기능을 구성합니다.

1.11. Red Hat OpenShift Service Mesh를 버전 1.1에서 버전 2.0으로 업그레이드

버전 1.1에서 2.0으로 업그레이드하려면 워크로드와 애플리케이션을 새 버전을 실행하는 Red Hat OpenShift Service Mesh의 새 인스턴스로 마이그레이션하는 수동 단계가 필요합니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 2.0으로 업그레이드하려면 OpenShift Container Platform 4.7로 업그레이드해야 합니다.
  • Red Hat OpenShift Service Mesh 버전 2.0 operator가 있어야 합니다. 자동 업그레이드 경로를 선택한 경우 Operator는 최신 정보를 자동으로 다운로드합니다. 하지만 Red Hat OpenShift Service Mesh 버전 2.0에서 기능을 사용하려면 몇 가지 단계를 거쳐야 합니다.

1.11.1. Red Hat OpenShift Service Mesh 업그레이드

Red Hat OpenShift Service Mesh를 업그레이드하려면 새 네임스페이스에 Red Hat OpenShift Service Mesh ServiceMeshControlPlane v2 리소스 인스턴스를 생성해야 합니다. 구성되면 이전 메시에서 새로운 서비스 메시로 마이크로 서비스 애플리케이션과 워크로드를 이동하십시오.

프로세스

  1. v1 ServiceMeshControlPlane 리소스 구성을 점검하여 유효한지 확인합니다.

    1. 다음 명령을 실행하여 ServiceMeshControlPlane 리소스를 v2 리소스로 확인합니다.

      $ oc get smcp -o yaml
    2. 유효하지 않은 필드에 대한 정보는 출력의 spec.techPreview.errored.message 필드를 확인합니다.
    3. v1 리소스에 유효하지 않은 필드가 있으면 리소스가 조정되지 않고 v2 리소스로 편집할 수 없습니다. v2 필드에 대한 모든 업데이트는 원래 v1 설정으로 덮어씁니다. 유효하지 않은 필드를 수정하려면 리소스의 v1 버전을 교체, 패치 또는 편집할 수 있습니다. 또한 수정하지 않고 리소스를 삭제할 수도 있습니다. 리소스가 수정된 후 조정할 수 있으며, v2 버전의 리소스를 수정하거나 볼 수 있습니다.
    4. 파일을 편집하여 리소스를 수정하려면 oc get를 사용하여 리소스를 검색하고, 로컬로 텍스트 파일을 편집한 다음, 편집한 파일로 리소스를 교체합니다.

      $ oc get smcp.v1.maistra.io <smcp_name> > smcp-resource.yaml
      #Edit the smcp-resource.yaml file.
      $ oc replace -f smcp-resource.yaml
    5. 패치를 사용하여 리소스를 수정하려면 oc patch를 사용합니다.

      $ oc patch smcp.v1.maistra.io <smcp_name> --type json --patch '[{"op": "replace","path":"/spec/path/to/bad/setting","value":"corrected-value"}]'
    6. 명령줄 도구로 리소스를 수정하려면 oc edit를 사용합니다.

      $ oc edit smcp.v1.maistra.io <smcp_name>
  2. 컨트롤 플레인 구성을 백업합니다. ServiceMeshControlPlane 리소스가 포함된 프로젝트로 전환합니다.

    $ oc project istio-system
  3. 다음 명령을 입력하여 현재 구성을 검색할 수 있습니다. <smcp_name>은 ServiceMeshControlPlane 리소스의 메타데이터에 지정됩니다(예: basic-install 또는 full-install).

    $ oc get servicemeshcontrolplanes.v1.maistra.io <smcp_name> -o yaml > <smcp_name>.v1.yaml
  4. ServiceMeshControlPlane을 구성에 대한 정보를 시작점으로 포함하는 v2 컨트롤 플레인 버전으로 변환합니다.

    $ oc get smcp <smcp_name> -o yaml > <smcp_name>.v2.yaml
  5. 프로젝트를 생성합니다. OpenShift Container Platform 콘솔 프로젝트 메뉴에서 New Project를 클릭하고 프로젝트 이름(예: istio-system-upgrade)을 입력합니다. 또는 CLI에서 이 명령을 실행할 수 있습니다.

    $ oc new-project istio-system-upgrade
  6. v2 ServiceMeshControlPlanemetadata.namespace 필드를 새 프로젝트 이름으로 업데이트합니다. 이 예제에서는 istio-system-upgrade를 사용합니다.
  7. 1.1에서 2.0으로 version 필드를 업데이트하거나 v2 ServiceMeshControlPlane에서 제거합니다.
  8. 새 네임스페이스에서 ServiceMeshControlPlane을 생성합니다. 명령줄에서 다음 명령을 실행하여 검색한 ServiceMeshControlPlane의 v2 버전을 사용하여 컨트롤 플레인을 배포합니다. 이 예제에서 ‘<smcp_name.v2>’를 파일 경로로 바꿉니다.

    $ oc create -n istio-system-upgrade -f <smcp_name>.v2.yaml

    대신 콘솔을 사용하여 컨트롤 플레인을 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔에서 프로젝트를 클릭합니다. 그런 다음, 방금 입력한 프로젝트 이름을 선택합니다.

    1. Operators설치된 Operator를 클릭합니다.
    2. ServiceMeshControlPlane 만들기를 클릭합니다.
    3. YAML 보기를 선택하고, 검색한 YAML 파일의 텍스트를 필드에 붙여넣습니다. apiVersion 필드가 maistra .io/v2로 설정되어 있는지 확인하고 새 네임스페이스를 사용하도록 metadata.namespace 필드를 수정합니다(예: istio-system-upgrade).
    4. 생성을 클릭합니다.

1.11.2. 2.0 ServiceMeshControlPlane 구성

Red Hat OpenShift Service Mesh 버전 2.0에서 ServiceMeshControlPlane 리소스가 변경되었습니다. ServiceMeshControlPlane 리소스의 v2 버전을 생성한 후 새 기능을 활용하고 배포에 적합하게 수정합니다. ServiceMeshControlPlane 리소스를 수정할 때 Red Hat OpenShift Service Mesh 2.0의 사양 및 동작에 대해 다음과 같은 변경 사항을 고려하십시오. 또한 사용하는 기능에 대한 새로운 정보는 Red Hat OpenShift Service Mesh 2.0 제품 문서를 참조하십시오. v2 리소스는 Red Hat OpenShift Service Mesh 2.0 설치에 사용해야 합니다.

1.11.2.1. 아키텍처 변경

이전 버전에서 사용하는 아키텍처 단위는 Istiod로 교체되었습니다. 2.0에서는 컨트롤 플레인 구성 요소인 Mixer, Pilot, Citadel, Galley, 사이드카 인젝터 기능이 단일 구성 요소인 Istiod로 결합되었습니다.

Mixer는 더 이상 컨트롤 플레인 구성 요소로 지원되지 않지만, Mixer 정책 및 Telemetry 플러그인은 이제 Istiod의 WASM 확장을 통해 지원됩니다. 레거시 Mixer 플러그인을 통합해야 하는 경우 정책 및 Telemetry에 대해 Mixer를 활성화할 수 있습니다.

SDS(Secret Discovery Service)는 Istiod에서 직접 사이드카에 인증서와 키를 배포하는 데 사용됩니다. Red Hat OpenShift Service Mesh 버전 1.1에서는 Citadel에 의해 시크릿이 생성되었으며, 이는 프록시가 클라이언트 인증서와 키를 검색하는 데 사용되었습니다.

1.11.2.2. 주석 변경

v2.0에서는 다음과 같은 주석이 더 이상 지원되지 않습니다. 이러한 주석 중 하나를 사용하는 경우 v2.0 컨트롤 플레인으로 이동하기 전에 워크로드를 업데이트해야 합니다.

  • sidecar.maistra.io/proxyCPULimitsidecar.istio.io/proxyCPULimit로 교체되었습니다. 워크로드에서 sidecar.maistra.io 주석을 사용 중인 경우 대신 동등한 sidecar.istio.io를 사용하도록 해당 워크로드를 수정해야 합니다.
  • sidecar.maistra.io/proxyMemoryLimitsidecar.istio.io/proxyMemoryLimit로 교체됨
  • sidecar.istio.io/discoveryAddress는 더 이상 지원되지 않습니다. 또한 기본 검색 주소는 pilot.<control_plane_namespace>.svc:15010(또는 mtls가 활성화된 경우 포트 15011)에서 istiod-<smcp_name>.<control_plane_namespace>.svc:15012로 이동했습니다.
  • 상태 포트는 더 이상 구성할 수 없으며 15021로 하드 코딩됩니다. * 사용자 정의 상태 포트를 정의한 경우(예: status.sidecar.istio.io/port) 워크로드를 v2.0 컨트롤 플레인으로 이동하기 전에 재정의를 제거해야 합니다. 상태 포트를 0 으로 설정하여 준비 상태 점검을 비활성화할 수 있습니다.
  • Kubernetes 시크릿 리소스는 더 이상 사이드카에 대한 클라이언트 인증서를 배포하는 데 사용되지 않습니다. 인증서는 이제 Istiod의 SDS 서비스를 통해 배포됩니다. 마운트된 시크릿에 의존하는 경우 v2.0 컨트롤 플레인의 워크로드에 더 오래 사용할 수 있습니다.

1.11.2.3. 동작 변경

Red Hat OpenShift Service Mesh 2.0의 일부 기능은 이전 버전과 다르게 작동합니다.

  • 게이트웨이의 준비 상태 포트는 15020에서 15021로 이동했습니다.
  • 대상 호스트 가시성에는 VirtualService 및 ServiceEntry 리소스가 포함됩니다. 사이드카 리소스를 통해 적용된 모든 제한을 포함합니다.
  • 자동 상호 TLS는 기본적으로 활성화되어 있습니다. 프록시 간 통신은 글로벌 PeerAuthentication 정책에 관계없이 mTLS를 사용하도록 자동 구성됩니다.
  • 보안 연결은 spec.security.controlPlane.mtls 설정에 관계없이 프록시가 컨트롤 플레인과 통신할 때 항상 사용됩니다. spec.security.controlPlane.mtls 설정은 Mixer Telemetry 또는 정책에 대한 연결을 구성할 때만 사용됩니다.

1.11.2.4. 지원되지 않는 리소스에 대한 마이그레이션 세부 정보

정책(authentication.istio.io/v1alpha1)

v2.0 컨트롤 플레인, PeerAuthentication 및 RequestAuthentication과 함께 사용하려면 정책 리소스를 새 리소스 유형으로 마이그레이션해야 합니다. 정책 리소스의 특정 구성에 따라 동일한 효과를 달성하기 위해 여러 리소스를 구성해야 할 수 있습니다.

상호 TLS

상호 TLS 적용은 security.istio.io/v1beta1 PeerAuthentication 리소스를 사용하여 수행됩니다. 레거시 spec.peers.mtls.mode 필드는 새로운 리소스의 spec.mtls.mode 필드에 직접 매핑됩니다. 선택 기준이 spec.targets[x].name의 서비스 이름 지정에서 spec.selector.matchLabels의 레이블 선택기로 변경되었습니다. PeerAuthentication에서 레이블은 대상 목록에 이름이 지정된 서비스의 선택기와 일치해야 합니다. 모든 포트별 설정은 spec.portLevelMtls에 매핑되어야 합니다.

인증

spec.origins에 지정된 추가 인증 방법은 security.istio.io/v1beta1 RequestAuthentication 리소스에 매핑되어야 합니다. spec.selector.matchLabels는 PeerAuthentication의 동일한 필드와 유사하게 구성되어야 합니다. spec.origins.jwt 항목의 JWT 주체와 관련된 구성은 spec.rules 항목의 유사한 필드에 매핑됩니다.

  • 정책에 지정된 spec.origins[x].jwt.triggerRules는 하나 이상의 security.istio.io/v1beta1 AuthorizationPolicy 리소스에 매핑되어야 합니다. spec.selector.labels는 RequestAuthentication의 동일한 필드와 유사하게 구성되어야 합니다.
  • spec.origins[x].jwt.triggerRules.excludedPaths.excludedPaths 는 spec.action이 ALLOW로 설정된 AuthorizationPolicy에 매핑되고, spec.rules[x].to.operation.path 항목이 제외된 경로와 일치해야 합니다.
  • spec.origins[x].jwt.triggerRules.includedPathsspec.actionALLOW로 설정된 별도의 AuthorizationPolicy에 매핑되고, spec.rules[x].to.operation.path 항목이 제외된 경로와 일치하며, spec.rules.[x].from.source.requestPrincipals 항목이 정책 리소스의 specified spec.origins[x].jwt.issuer와 일치해야 합니다

ServiceMeshPolicy(maistra.io/v1)

ServiceMeshPolicy는 v1 리소스의 spec.istio.global.mtls.enabled 또는 v2 리소스 설정의 spec.security.dataPlane.mtls를 통해 컨트롤 플레인에 대해 자동으로 구성되었습니다. v2 컨트롤 플레인의 경우 설치 중에 기능적으로 동일한 PeerAuthentication 리소스가 생성됩니다. 이 기능은 Red Hat OpenShift Service Mesh 버전 2.0에서 더 이상 사용되지 않습니다.

RbacConfig, ServiceRole, ServiceRoleBinding (rbac.istio.io/v1alpha1)

이러한 리소스는 security.istio.io/v1beta1 AuthorizationPolicy 리소스로 교체되었습니다.

RbacConfig 동작을 모방하려면 RbacConfig에 지정된 spec.mode에 따라 설정이 달라지는 기본 AuthorizationPolicy를 작성해야 합니다.

  • spec.modeOFF로 설정되면 AuthorizationPolicy가 요청에 적용되지 않는 한 기본 정책은 ALLOW이므로 리소스가 필요하지 않습니다.
  • spec.mode가 ON으로 설정된 경우 spec: {}를 설정합니다. 메시의 모든 서비스에 대해 AuthorizationPolicy 정책을 생성해야 합니다.
  • spec.modeON_WITH_INCLUSION으로 설정되며, 포함된 각각의 네임스페이스에 spec: {}을 사용하여 AuthorizationPolicy를 생성해야 합니다. 개별 서비스 포함은 AuthorizationPolicy에서 지원되지 않습니다. 그러나 서비스의 워크로드에 적용되는 AuthorizationPolicy가 생성되면 명시적으로 허용되지 않는 다른 모든 요청이 거부됩니다.
  • spec.modeON_WITH_EXCLUSION으로 설정된 경우 AuthorizationPolicy에서 지원되지 않습니다. 글로벌 DENY 정책을 생성할 수 있지만, 네임스페이스 또는 워크로드에 적용할 수 있는 허용된 정책이 없기 때문에 메시의 모든 워크로드에 대해 AuthorizationPolicy를 생성해야 합니다.

AuthorizationPolicy에는 ServiceRoleBinding이 제공하는 기능과 유사한 구성이 적용되는 선택기와 ServiceRole이 제공하는 기능과 유사하며 적용되어야 하는 규칙에 대한 구성이 모두 포함됩니다.

ServiceMeshRbacConfig (maistra.io/v1)

이 리소스는 컨트롤 플레인의 네임스페이스에 빈 spec.selector가 있는 security.istio.io/v1beta1 AuthorizationPolicy 리소스를 사용하여 교체됩니다. 이 정책은 메시의 모든 워크로드에 적용되는 기본 권한 부여 정책이 됩니다. 특정 마이그레이션 세부 사항은 위의 RbacConfig를 참조하십시오.

1.11.2.5. Mixer 플러그인

Mixer 구성 요소는 버전 2.0에서 기본적으로 비활성화되어 있습니다. 워크로드에 Mixer 플러그인을 사용하는 경우 Mixer 구성 요소를 포함하도록 버전 2.0 ServiceMeshControlPlane을 구성해야 합니다.

Mixer 정책 구성 요소를 활성화하려면 ServiceMeshControlPlane에 다음 스니펫을 추가합니다.

spec:
  policy:
    type: Mixer

Mixer telemetry 구성 요소를 활성화하려면 ServiceMeshControlPlane에 다음 스니펫을 추가합니다.

spec:
  telemetry:
    type: Mixer

또한 레거시 mixer 플러그인은 WASM으로 마이그레이션하고 새로운 ServiceMeshExtension(maistra.io/v1alpha1) 사용자 정의 리소스를 사용하여 통합할 수 있습니다.

업스트림 Istio 배포에 포함된 내장 WASM 필터는 Red Hat OpenShift Service Mesh 2.0에서 사용할 수 없습니다.

1.11.2.6. 상호 TLS 변경

워크로드별 PeerAuthentication 정책과 함께 mTLS를 사용할 때 워크로드 정책이 네임스페이스/글로벌 정책과 다를 경우 트래픽을 허용하려면 상응하는 DestinationRule이 필요합니다.

자동 mTLS는 기본적으로 활성화되어 있지만 ServiceMeshControlPlane 리소스에서 spec.security.dataPlane.automtls를 false로 설정하여 비활성화할 수 있습니다. 자동 mTLS를 비활성화할 때 서비스 간 적절한 통신을 위해 DestinationRules가 필요할 수 있습니다. 예를 들어, 하나의 네임스페이스에 대해 PeerAuthentication을 STRICT으로 설정하면 DestinationRule이 네임스페이스의 서비스에 TLS 모드를 구성하지 않는 한 다른 네임스페이스의 서비스에 액세스하지 못할 수 있습니다.

mTLS에 대한 자세한 내용은 mTLS(mutual Transport Layer Security) 활성화를참조하십시오.

1.11.2.6.1. 기타 mTLS 예

mTLS 비활성화: bookinfo 샘플 애플리케이션의 productpage 서비스의 경우, Red Hat OpenShift Service Mesh v1.1에 대해 다음과 같은 방식으로 정책 리소스를 구성했습니다.

정책 리소스 예

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: productpage-mTLS-disable
  namespace: <namespace>
spec:
  targets:
  - name: productpage

mTLS 비활성화: bookinfo 샘플 애플리케이션의 productpage 서비스의 경우, 다음 예제를 사용하여 Red Hat OpenShift Service Mesh v2.0에 PeerAuthentication 리소스를 구성합니다.

PeerAuthentication 리소스 예

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: productpage-mTLS-disable
  namespace: <namespace>
spec:
  mtls:
    mode: DISABLE
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage

mTLS 활성화: bookinfo 샘플 애플리케이션에서 productpage 서비스에 대한 JWT 인증의 경우, Red Hat OpenShift Service Mesh v1.1에 대해 다음과 같은 방식으로 정책 리소스를 구성했습니다.

정책 리소스 예

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  targets:
  - name: productpage
    ports:
    - number: 9000
  peers:
  - mtls:
  origins:
  - jwt:
      issuer: "https://securetoken.google.com"
      audiences:
      - "productpage"
      jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
      jwtHeaders:
      - "x-goog-iap-jwt-assertion"
      triggerRules:
      - excludedPaths:
        - exact: /health_check
  principalBinding: USE_ORIGIN

mTLS 활성화: bookinfo 샘플 애플리케이션에서 productpage 서비스에 대한 JWT 인증의 경우, 다음 예제를 사용하여 Red Hat OpenShift Service Mesh v2.0에 PeerAuthentication 리소스를 구성합니다.

PeerAuthentication 리소스 예

#require mtls for productpage:9000
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  portLevelMtls:
    9000:
      mode: STRICT
...
#JWT authentication for productpage
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  jwtRules:
  - issuer: "https://securetoken.google.com"
    audiences:
    - "productpage"
    jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
    fromHeaders:
    - name: "x-goog-iap-jwt-assertion"
...
#Require JWT token to access product page service from
#any client to all paths except /health_check
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  action: ALLOW
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  rules:
  - to: # require JWT token to access all other paths
      - operation:
          notPaths:
          - /health_check
    from:
      - source:
          # if using principalBinding: USE_PEER in the Policy,
          # then use principals, e.g.
          # principals:
          # - “*”
          requestPrincipals:
          - “*”
  - to: # no JWT token required to access health_check
      - operation:
          paths:
          - /health_check

1.11.3. 설정 레시피

이러한 구성 레시피를 사용하여 다음 항목을 구성할 수 있습니다.

1.11.3.1. 데이터 플레인의 상호 TLS

데이터 플레인 통신에 대한 상호 TLS는 ServiceMeshControlPlane 리소스의 spec.security.dataPlane.mtls를 통해 구성되며, 기본적으로 false입니다.

1.11.3.2. 사용자 정의 서명 키

Istiod는 서비스 프록시에서 사용하는 클라이언트 인증서 및 개인 키를 관리합니다. 기본적으로 Istiod는 서명에 자체 서명된 인증서를 사용하지만 사용자 정의 인증서와 개인 키를 구성할 수 있습니다. 서명 키를 구성하는 방법에 대한 자세한 내용은 외부 인증 기관 키 및 인증서 추가를참조하십시오.

1.11.3.3. 추적

추적은 spec.tracing에서 구성됩니다. 현재 지원되는 유일한 추적기 유형은 Jaeger입니다. 샘플링은 0.01% 증분을 나타내는 스케일링된 정수입니다(예: 1은 0.01%, 10000은 100%). 추적 구현 및 샘플링 비율을 지정할 수 있습니다.

spec:
  tracing:
    sampling: 100 # 1%
    type: Jaeger

Jaeger는 ServiceMeshControlPlane 리소스의 애드온 섹션에서 구성됩니다.

spec:
  addons:
    jaeger:
      name: jaeger
      install:
        storage:
          type: Memory # or Elasticsearch for production mode
          memory:
            maxTraces: 100000
          elasticsearch: # the following values only apply if storage:type:=Elasticsearch
            storage: # specific storageclass configuration for the Jaeger Elasticsearch (optional)
              size: "100G"
              storageClassName: "storageclass"
            nodeCount: 3
            redundancyPolicy: SingleRedundancy
  runtime:
    components:
      tracing.jaeger: {} # general Jaeger specific runtime configuration (optional)
      tracing.jaeger.elasticsearch: #runtime configuration for Jaeger Elasticsearch deployment (optional)
        container:
          resources:
            requests:
              memory: "1Gi"
              cpu: "500m"
            limits:
              memory: "1Gi"

Jaeger 설치는 install 필드로 사용자 지정할 수 있습니다. 리소스 제한과 같은 컨테이너 구성은 spec.runtime.components.jaeger 관련 필드에 구성됩니다. spec.addons.jaeger.name 값과 일치하는 Jaeger 리소스가 있으면 기존 설치를 사용하도록 컨트롤 플레인이 구성됩니다. 기존 Jaeger 리소스를 사용하여 Jaeger 설치를 완전히 사용자 지정할 수 있습니다.

1.11.3.4. 시각화

Kiali 및 Grafana는 ServiceMeshControlPlane 리소스의 애드온 섹션에서 구성됩니다.

spec:
  addons:
    grafana:
      enabled: true
      install: {} # customize install
    kiali:
      enabled: true
      name: kiali
      install: {} # customize install

Grafana 및 Kiali 설치는 각 설치 필드를 통해 사용자 지정할 수 있습니다. 리소스 제한과 같은 컨테이너 사용자 정의는 spec.runtime.components.kialispec.runtime.components.grafana에서 구성됩니다. 이름값과 일치하는 기존 Kiali 리소스가 있으면 컨트롤 플레인은 컨트롤 플레인과 함께 사용할 Kiali 리소스를 구성합니다. Kiali 리소스의 일부 필드(예: accessible_namespaces 목록과 Grafana, Prometheus, 추적에 대한 끝점)는 재정의됩니다. 기존 리소스를 사용하여 Kiali 설치를 완전히 사용자 지정할 수 있습니다.

1.11.3.5. 리소스 사용률 및 스케줄링

리소스는 spec.runtime.<component>에서 구성됩니다. 다음과 같은 구성 요소 이름이 지원됩니다.

구성 요소설명지원되는 버전

보안

Citadel 컨테이너

v1.0/1.1

galley

Galley 컨테이너

v1.0/1.1

pilot

Pilot/Istiod 컨테이너

v1.0/1.1/2.0

mixer

Istio-telemetry 및 istio-policy 컨테이너

v1.0/1.1

mixer.policy

Istio-policy 컨테이너

v2.0

mixer.telemetry

Istio-telemetry 컨테이너

v2.0

global.ouathproxy

다양한 애드온과 함께 사용되는 oauth-proxy 컨테이너

v1.0/1.1/2.0

sidecarInjectorWebhook

사이드카 인젝터 webhook 컨테이너

v1.0/1.1

tracing.jaeger

일반 Jaeger 컨테이너 - 일부 설정은 적용할 수 없습니다. 컨트롤 플레인 구성에서 기존 Jaeger 리소스를 지정하면 Jaeger 설치에 대한 완전한 사용자 정의가 지원됩니다.

v1.0/1.1/2.0

tracing.jaeger.agent

Jaeger 에이전트와 관련된 설정

v1.0/1.1/2.0

tracing.jaeger.allInOne

Jaeger allInOne과 관련된 설정

v1.0/1.1/2.0

tracing.jaeger.collector

Jaeger 수집기와 관련된 설정

v1.0/1.1/2.0

tracing.jaeger.elasticsearch

Jaeger elasticsearch 배포와 관련된 설정

v1.0/1.1/2.0

tracing.jaeger.query

Jaeger 쿼리와 관련된 설정

v1.0/1.1/2.0

prometheus

prometheus 컨테이너

v1.0/1.1/2.0

kiali

Kiali 컨테이너 - 컨트롤 플레인 구성에서 기존 Kiali 리소스를 지정하면 Kiali 설치에 대한 완전한 사용자 정의가 지원됩니다.

v1.0/1.1/2.0

grafana

Grafana 컨테이너

v1.0/1.1/2.0

3scale

3scale 컨테이너

v1.0/1.1/2.0

wasmExtensions.cacher

WASM 확장 cacher 컨테이너

v2.0 - 기술 프리뷰

일부 구성 요소는 리소스 제한 및 스케줄링을 지원합니다. 자세한 내용은 성능 및 확장성을 참조하십시오.

1.11.4. 애플리케이션 및 워크플로우 마이그레이션을 위한 다음 단계

애플리케이션 워크로드를 새 메시로 이동하고 이전 인스턴스를 제거하여 업그레이드를 완료합니다.

1.12. 사용자 및 프로필 관리

1.12.1. Red Hat OpenShift Service Mesh 멤버 생성

ServiceMeshMember 리소스는 각 사용자가 서비스 메시 프로젝트 또는 멤버 롤에 직접 액세스할 수 없는 경우에도 Red Hat OpenShift Service Mesh 관리자가 서비스 메시 프로젝트 또는 멤버 롤에 직접 액세스할 수 없는 경우에도 프로젝트를 서비스 메시에 위임할 수 있는 방법을 제공합니다. 프로젝트 관리자가 프로젝트에서 ServiceMeshMember 리소스를 생성할 수 있는 권한을 자동으로 부여하는 동안 서비스 메시 관리자가 서비스 메시에 대한 액세스 권한을 명시적으로 부여할 때까지 ServiceMeshControlPlane를 가리킬 수 없습니다. 관리자는 mesh-user 사용자 역할을 부여하여 메시에 액세스할 수 있는 권한을 사용자에게 부여할 수 있습니다. 이 예에서 istio-system은 컨트롤 플레인 네임스페이스입니다.

$ oc policy add-role-to-user -n istio-system --role-namespace istio-system mesh-user <user_name>

관리자는 컨트롤 플레인 프로젝트에서 mesh-user 역할 바인딩을 수정하여 액세스 권한이 부여된 사용자 및 그룹을 지정할 수 있습니다. ServiceMeshMember는 이를 참조하는 컨트롤 플레인 프로젝트 내의 ServiceMeshMemberRoll에 프로젝트를 추가합니다.

apiVersion: maistra.io/v1
kind: ServiceMeshMember
metadata:
  name: default
spec:
  controlPlaneRef:
    namespace: istio-system
    name: basic

관리자가 ServiceMeshControlPlane 리소스를 생성한 후 mesh-users 역할 바인딩이 자동으로 생성됩니다. 관리자는 다음 명령을 사용하여 사용자에게 역할을 추가할 수 있습니다.

$ oc policy add-role-to-user

관리자가 ServiceMeshControlPlane 리소스를 생성하기 전에 mesh-user 역할 바인딩을 생성할 수도 있습니다. 예를 들어 관리자는 ServiceMeshControlPlane 리소스와 동일한 oc apply 작업으로 이를 생성할 수 있습니다.

이 예제에서는 alice에 대한 역할 바인딩이 추가되었습니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: istio-system
  name: mesh-users
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: mesh-user
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: alice

1.12.2. 컨트롤 플레인 프로필 생성

ServiceMeshControlPlane 프로필을 사용하여 재사용 가능한 구성을 생성할 수 있습니다. 개별 사용자는 생성한 프로필을 자체 구성으로 확장할 수 있습니다. 프로필은 다른 프로필의 구성 정보를 상속할 수도 있습니다. 예를 들어, 회계 팀에 대한 계정 컨트롤 플레인과 마케팅 팀에 대한 마케팅 컨트롤 플레인을 생성할 수 있습니다. 개발 템플릿과 프로덕션 템플릿을 생성하는 경우 마케팅 팀과 회계 팀의 구성원은 팀별 사용자 지정을 통해 개발 및 프로덕션 프로필을 확장할 수 있습니다.

ServiceMeshControlPlane과 동일한 구문을 따르는 컨트롤 플레인 프로필을 구성하면, 사용자는 계층적으로 설정을 상속합니다. Operator는 Red Hat OpenShift Service Mesh의 기본 설정이 포함된 default 프로필과 함께 제공됩니다.

1.12.2.1. ConfigMap 생성

사용자 지정 프로필을 추가하려면 먼저 openshift-operators 프로젝트에서 smcp-templates라는 ConfigMap을 생성한 다음, /usr/local/share/istio-operator/templates의 Operator 컨테이너에 ConfigMap을 마운트해야 합니다.

사전 요구 사항

  • Service Mesh Operator 설치 및 검증.
  • cluster-admin 역할이 있는 계정. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  • Operator 배포 위치.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 cluster-admin으로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. CLI에서 이 명령을 실행하여 openshift-operators 프로젝트에서 smcp-templates라는 ConfigMap을 생성하고 <profiles-directory>를 로컬 디스크의 ServiceMeshControlPlane 파일의 위치로 교체합니다.

    $ oc create configmap --from-file=<profiles-directory> smcp-templates -n openshift-operators
  3. Operator ClusterServiceVersion 이름을 찾습니다.

    $ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'

    출력 예

    maistra.v2.0.0            Red Hat OpenShift Service Mesh   2.0.0                Succeeded

  4. Operator 클러스터 서비스 버전을 편집하여 Operator에서 smcp-templates ConfigMap을 사용하도록 지시합니다.

    $ oc edit clusterserviceversion -n openshift-operators servicemeshoperator.v2.0.0.1
  5. Operator 배포에 볼륨 마운트 및 볼륨을 추가합니다.

    deployments:
      - name: istio-operator
        spec:
          template:
            spec:
              containers:
                volumeMounts:
                  - name: smcp-templates
                    mountPath: /usr/local/share/istio-operator/templates/
              volumes:
                - name: smcp-templates
                  configMap:
                    name: smcp-templates
    ...
  6. 변경 사항을 저장하고 편집기를 종료합니다.
  7. ServiceMeshControlPlane에서 profiles 매개변수를 사용하여 하나 이상의 템플릿을 지정할 수 있습니다.

      apiVersion: maistra.io/v2
      kind: ServiceMeshControlPlane
      metadata:
        name: basic
      spec:
        profiles:
        - default

1.12.2.2. 올바른 네트워크 정책 설정

서비스 메시는 컨트롤 플레인과 멤버 네임스페이스에서 네트워크 정책을 생성하여 트래픽을 허용합니다. 배포하기 전에 다음 조건을 고려하여 OpenShift Container Platform 경로를 통해 이전에 노출된 서비스 메시의 서비스를 확인합니다.

  • Istio가 제대로 작동하려면 서비스 메시로의 트래픽이 항상 ingress-gateway를 통과해야 합니다.
  • 서비스 메시에 없는 별도의 네임스페이스에서 서비스 메시 외부에 서비스를 배포합니다.
  • 서비스 메시 등록 네임스페이스에 배포해야 하는 메시 외 서비스는 해당 배포 maistra.io/expose-route: "true"에 레이블을 지정하여 OpenShift Container Platform 경로가 여전히 작동하도록 해야 합니다.

1.13. 보안

서비스 메시 애플리케이션이 복잡한 마이크로 서비스를 사용하여 구성된 경우 Red Hat OpenShift Service Mesh를 사용하여 해당 서비스 간 통신 보안을 사용자 지정할 수 있습니다. 서비스 메시의 트래픽 관리 기능과 함께 OpenShift Container Platform의 인프라를 사용하면 애플리케이션 및 보안 마이크로 서비스의 복잡성을 관리할 수 있습니다.

시작하기 전

프로젝트가 있는 경우ServiceMeshMemberRoll 리소스에 프로젝트를 추가합니다.

프로젝트가 없는 경우 Bookinfo 샘플 애플리케이션을 설치하고 ServiceMeshMemberRoll 리소스에 추가합니다. 샘플 애플리케이션은 보안 개념을 설명하는 데 도움이 됩니다.

1.13.1. mTLS(mutual Transport Layer Security)

mTLS(mutual Transport Layer Security)는 두 당사자가 서로 인증할 수 있는 프로토콜입니다. 일부 프로토콜(IKE, SSH)에서는 기본 인증 모드이며, 다른 프로토콜(TLS)에서는 선택 사항입니다. mTLS는 애플리케이션 또는 서비스 코드 변경 없이 사용할 수 있습니다. TLS는 서비스 메시 인프라와 두 사이드카 프록시 사이에서 전적으로 처리됩니다.

기본적으로 Red Hat OpenShift Service Mesh의 mTLS가 활성화되고 허용 모드로 설정됩니다. 여기서 서비스 메시의 사이드카는 일반 텍스트 트래픽과 mTLS를 사용하여 암호화된 연결을 모두 허용합니다. 메시의 서비스가 메시 외부 서비스와 통신하는 경우 엄격한 mTLS가 해당 서비스 간의 통신을 중단할 수 있습니다. 워크로드를 서비스 메시로 마이그레이션하는 동안 허용 모드를 사용합니다. 그러면 메시, 네임스페이스 또는 애플리케이션 전반에서 엄격한 mTLS를 활성화할 수 있습니다.

컨트롤 플레인 수준에서 메시 전체에서 mTLS를 활성화하면 애플리케이션 및 워크플로우를 다시 작성하지 않고도 서비스 메시의 모든 트래픽을 보호합니다. ServiceMeshControlPlane 리소스의 데이터 플레인 수준에서 메시의 네임스페이스를 보호할 수 있습니다. 트래픽 암호화 연결을 사용자 지정하려면 PeerAuthenticationDestinationRule 리소스를 사용하여 애플리케이션 수준에서 네임스페이스를 구성합니다.

1.13.1.1. 서비스 메시에서 엄격한 mTLS 활성화

워크로드가 외부 서비스와 통신하지 않으면 통신 중단 없이 메시 전체에서 mTLS를 빠르게 활성화할 수 있습니다. ServiceMeshControlPlane 리소스에서 spec.security.dataPlane.mtlstrue로 설정하여 활성화할 수 있습니다. Operator는 필요한 리소스를 생성합니다.

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
spec:
  version: v2.0
  security:
    dataPlane:
      mtls: true

또한 OpenShift Container Platform 웹 콘솔을 사용하여 mTLS를 활성화할 수 있습니다.

프로세스

  1. 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Operators설치된 Operators를 클릭합니다.
  4. 제공된 API에서 Service Mesh Control Plane 을 클릭합니다.
  5. ServiceMeshControlPlane 리소스의 이름을 클릭합니다(예: basic ).
  6. 세부 정보 페이지에서 데이터 플레인 보안의 보안 섹션에서 토글을 클릭합니다.
1.13.1.1.1. 특정 서비스의 수신 연결에 대해 사이드카 구성

정책을 생성하여 개별 서비스에 대해 mTLS를 구성할 수도 있습니다.

프로세스

  1. 다음 예제를 사용하여 YAML 파일을 생성합니다.

    PeerAuthentication Policy 예 policy.yaml

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
      namespace: <namespace>
    spec:
      mtls:
        mode: STRICT

    1. <namespace>를 서비스가 있는 네임스페이스로 바꿉니다.
  2. 다음 명령을 실행하여 서비스가 있는 네임스페이스에 리소스를 생성합니다. 방금 생성한 정책 리소스의 namespace 필드와 일치해야 합니다.

    $ oc create -n <namespace> -f <policy.yaml>
참고

자동 mTLS를 사용하지 않고 PeerAuthentication을 STRICT로 설정하는 경우 서비스에 대한 DestinationRule 리소스를 생성해야 합니다.

1.13.1.1.2. 발신 연결에 대한 사이드카 구성

메시에서 다른 서비스로 요청을 보낼 때 mTLS를 사용하도록 서비스 메시를 구성하는 대상 규칙을 생성합니다.

프로세스

  1. 다음 예제를 사용하여 YAML 파일을 생성합니다.

    DestinationRule example destination-rule.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: default
      namespace: <namespace>
    spec:
      host: "*.<namespace>.svc.cluster.local"
      trafficPolicy:
       tls:
        mode: ISTIO_MUTUAL

    1. <namespace>를 서비스가 있는 네임스페이스로 바꿉니다.
  2. 다음 명령을 실행하여 서비스가 있는 네임스페이스에 리소스를 생성합니다. 방금 생성한 DestinationRule 리소스의 namespace 필드와 일치해야 합니다.

    $ oc create -n <namespace> -f <destination-rule.yaml>
1.13.1.1.3. 최소 및 최대 프로토콜 버전 설정

사용자 환경에 서비스 메시의 암호화된 트래픽에 대한 특정 요구 사항이 있는 경우 ServiceMeshControlPlane 리소스에 spec.security.controlPlane.tls.minProtocolVersion 또는 spec.security.controlPlane.tls.maxProtocolVersion을 설정하여 허용되는 암호화 기능을 제어할 수 있습니다. 컨트롤 플레인 리소스에 구성된 해당 값은 TLS를 통해 안전하게 통신할 때 메시 구성 요소에서 사용하는 최소 및 최대 TLS 버전을 정의합니다.

기본값은 TLS_AUTO이며 TLS 버전을 지정하지 않습니다.

표 1.3. 유효한 값

설명

TLS_AUTO

default

TLSv1_0

TLS 버전 1.0

TLSv1_1

TLS 버전 1.1

TLSv1_2

TLS 버전 1.2

TLSv1_3

TLS 버전 1.3

프로세스

  1. 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Operators설치된 Operators를 클릭합니다.
  4. 제공된 API에서 Service Mesh Control Plane 을 클릭합니다.
  5. ServiceMeshControlPlane 리소스의 이름을 클릭합니다(예: basic ).
  6. YAML 탭을 클릭합니다.
  7. YAML 편집기에 다음 코드 조각을 삽입합니다. minProtocolVersion의 값을 TLS 버전 값으로 바꿉니다. 이 예에서 최소 TLS 버전은 TLSv1_2로 설정됩니다.

    ServiceMeshControlPlane snippet

    kind: ServiceMeshControlPlane
    spec:
      security:
        controlPlane:
          tls:
            minProtocolVersion: TLSv1_2

  8. 저장을 클릭합니다.
  9. Refresh(새로 고침 )를 클릭하여 변경 사항이 올바르게 업데이트되었는지 확인합니다.

1.13.2. 역할 기반 액세스 제어(RBAC) 구성

RBAC(역할 기반 액세스 제어) 오브젝트에 따라 사용자 또는 서비스가 프로젝트 내에서 지정된 작업을 수행할 수 있는지가 결정됩니다. 메시의 워크로드에 대해 메시, 네임스페이스, 워크로드 전체 액세스 제어를 정의할 수 있습니다.

RBAC를 구성하려면 액세스를 구성하는 네임스페이스에 AuthorizationPolicy 리소스를 생성합니다. 메시 전체 액세스를 구성하려면 istio-system을 사용하십시오.

예를 들어 RBAC를 사용하면 다음과 같은 정책을 생성할 수 있습니다.

  • 프로젝트 내 통신을 구성합니다.
  • 기본 네임스페이스의 모든 워크로드에 대한 전체 액세스를 허용하거나 거부합니다.
  • 수신 게이트웨이 액세스를 허용 또는 거부합니다.
  • 액세스 하려면 토큰이 필요합니다.

권한 부여 정책에는 선택기, 작업 및 규칙 목록이 포함됩니다.

  • selector 필드는 정책의 대상을 지정합니다.
  • action 필드는 요청을 허용하거나 거부할지 여부를 지정합니다.
  • rules 필드는 작업을 트리거할 시기를 지정합니다.

    • from 필드는 요청 원본에 대한 제약 조건을 지정합니다.
    • to 필드는 요청 대상 및 매개변수에 대한 제약 조건을 지정합니다.
    • when 필드는 규칙을 적용하기 위한 추가 조건을 지정합니다.

프로세스

  1. AuthorizationPolicy 리소스를 생성합니다. 다음 예제는 IP 주소가 수신 게이트웨이에 액세스하는 것을 거부하도록 ingress-policy AuthorizationPolicy를 업데이트하는 리소스를 보여줍니다.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: ingress-policy
      namespace: istio-system
    spec:
      selector:
        matchLabels:
          app: istio-ingressgateway
      action: DENY
      rules:
      - from:
        - source:
          ipBlocks: ["1.2.3.4"]
  2. 리소스를 작성한 후 다음 명령어를 실행하여 네임스페이스에 리소스를 만듭니다. 네임스페이스는 AuthorizationPolicy 리소스의 metadata.namespace 필드와 일치해야 합니다.

    $ oc create -n istio-system -f <filename>

다음 단계

다른 일반적인 구성에 대해서는 다음 예제를 고려하십시오.

1.13.2.1. 프로젝트 내 통신 구성

AuthorizationPolicy를 사용하여 메시의 메시 또는 서비스와 통신하는 트래픽을 허용하거나 거부하도록 컨트롤 플레인을 구성할 수 있습니다.

1.13.2.1.1. 네임스페이스 외부 서비스에 대한 액세스 제한

다음 AuthorizationPolicy 리소스 예제를 사용하여 bookinfo 네임스페이스에 없는 모든 소스의 요청을 거부할 수 있습니다.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: httpbin-deny
 namespace: bookinfo
spec:
 selector:
   matchLabels:
     app: httpbin
     version: v1
 action: DENY
 rules:
 - from:
   - source:
       notNamespaces: ["bookinfo"]
1.13.2.1.2. 권한 부여 모두 허용 및 권한 부여 모두 거부(기본) 정책 만들기

다음 예제에서는 bookinfo 네임스페이스의 모든 워크로드에 액세스할 수 있는 권한 부여 모두 허용 정책을 보여줍니다.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all
  namespace: bookinfo
spec:
  action: ALLOW
  rules:
  - {}

다음 예제에서는 bookinfo 네임스페이스의 모든 워크로드에 대한 액세스를 거부하는 정책을 보여줍니다.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: bookinfo
spec:
  {}

1.13.2.2. 수신 게이트웨이에 대한 액세스 허용 또는 거부

IP 주소를 기반으로 허용 또는 거부 목록을 추가하도록 권한 부여 정책을 설정할 수 있습니다.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: ingress-policy
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
       ipBlocks: ["1.2.3.4", "5.6.7.0/24"]

1.13.2.3. JSON 웹 토큰으로 액세스 제한

JSON 웹 토큰(JWT)으로 메시에 액세스하는 항목을 제한할 수 있습니다. 인증 후 사용자 또는 서비스는 해당 토큰과 연결된 경로, 서비스에 액세스할 수 있습니다.

워크로드에서 지원하는 인증 방법을 정의하는 RequestAuthentication 리소스를 생성합니다. 다음 예제에서는 http://localhost:8080/auth/realms/master에서 발행한 JWT를 수락합니다.

apiVersion: "security.istio.io/v1beta1"
kind: "RequestAuthentication"
metadata:
  name: "jwt-example"
  namespace: bookinfo
spec:
  selector:
    matchLabels:
      app: httpbin
  jwtRules:
  - issuer: "http://localhost:8080/auth/realms/master"
    jwksUri: "http://keycloak.default.svc:8080/auth/realms/master/protocol/openid-connect/certs"

그런 다음, 동일한 네임스페이스에 AuthorizationPolicy 리소스를 생성하여, 사용자가 생성한 RequestAuthentication 리소스와 함께 작업할 수 있습니다. 다음 예제에서는 httpbin 워크로드에 요청을 보낼 때 Authorization 헤더에 JWT가 있어야 합니다.

apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
  name: "frontend-ingress"
  namespace: bookinfo
spec:
  selector:
    matchLabels:
      app: httpbin
  action: DENY
  rules:
  - from:
    - source:
        notRequestPrincipals: ["*"]

1.13.3. 암호화 제품군 및 ECDH 곡선 구성

암호화 제품군 및 ECDH(Elliptic-curve Diffie–Hellman) 곡선은 서비스 메시를 보호하는 데 도움이 될 수 있습니다. ServiceMeshControlPlane 리소스에서 spec.istio.global.tls.cipherSuites를 사용하는 암호화 제품군과 spec.istio.global.tls.ecdhCurves를 사용하는 ECDH 곡선을 쉼표로 구분된 목록으로 정의할 수 있습니다. 이러한 속성 중 하나가 비어 있으면 기본값이 사용됩니다.

서비스 메시에서 TLS 1.2 또는 이전 버전을 사용하는 경우 cipherSuites 설정이 적용됩니다. TLS 1.3을 사용할 때는 효과가 없습니다.

우선순위에 따라 암호화 제품군을 쉼표로 구분된 목록으로 설정합니다. 예를 들어 ecdhCurves: CurveP256, CurveP384CurveP256CurveP384보다 높은 우선순위로 설정합니다.

참고

암호화 제품군을 구성할 때 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 또는 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256을 포함해야 합니다. HTTP/2 지원에는 이러한 암호화 제품군 중 하나 이상이 필요합니다.

지원되는 암호화 제품군은 다음과 같습니다.

  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA

지원되는 ECDH 곡선은 다음과 같습니다.

  • CurveP256
  • CurveP384
  • CurveP521
  • X25519

1.13.4. 외부 인증 기관 키 및 인증서 추가

기본적으로 Red Hat OpenShift Service Mesh는 자체 서명된 루트 인증서와 키를 생성하여 이를 사용하여 워크로드 인증서에 서명합니다. 사용자 정의 인증서와 키를 사용하여 사용자 정의 루트 인증서로 워크로드 인증서에 서명할 수도 있습니다. 이 작업은 인증서와 키를 서비스 메시에 연결하는 예제를 보여줍니다.

사전 요구 사항

  • 인증서를 구성하려면 상호 TLS가 활성화된 Red Hat OpenShift Service Mesh를 설치합니다.
  • 이 예제에서는 Maistra 리포지토리의 인증서를 사용합니다. 프로덕션의 경우 인증 기관의 자체 인증서를 사용합니다.
  • Bookinfo 샘플 애플리케이션을 배포하여 이러한 지침으로 결과를 확인합니다.

1.13.4.1. 기존 인증서 및 키 추가

기존 서명(CA) 인증서 및 키를 사용하려면 CA 인증서, 키, 루트 인증서가 포함된 신뢰 파일 체인을 생성해야 합니다. 해당 인증서 각각에 대해 다음과 같은 정확한 파일 이름을 사용해야 합니다. CA 인증서의 이름은 ca-cert.pem이고 키는 ca-key.pem이며 ca-cert.pem에 서명하는 루트 인증서의 이름은 root-cert.pem입니다. 워크로드에서 중개 인증서를 사용하는 경우 cert-chain.pem 파일에 인증서를 지정해야 합니다.

다음 단계에 따라 서비스 메시에 인증서를 추가합니다. Maistra 리포지토리에서 로컬로 예제 인증서를 저장하고 <path>를 인증서 경로로 바꿉니다.

  1. 입력 파일 ca-cert.pem, ca-key.pem, root-cert.pem, cert-chain.pem을 포함하는 시크릿 cacert를 생성합니다.

    $ oc create secret generic cacerts -n istio-system --from-file=<path>/ca-cert.pem \
        --from-file=<path>/ca-key.pem --from-file=<path>/root-cert.pem \
        --from-file=<path>/cert-chain.pem
  2. ServiceMeshControlPlane 리소스에서 spec.security.dataPlane.mtls: truetrue로 설정하고 다음 예제와 같이 certificateAuthority를 구성합니다. 기본 rootCADir/etc/cacerts입니다. 키와 인증서가 기본 위치에 마운트된 경우 privateKey를 설정할 필요가 없습니다. 서비스 메시는 secret-mount 파일에서 인증서와 키를 읽습니다.

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    spec:
      security:
        dataPlane:
          mtls: true
        certificateAuthority:
          type: Istiod
          istiod:
            type: PrivateKey
            privateKey:
              rootCADir:  /etc/cacerts
  3. 워크로드에 새 인증서를 즉시 추가하려면 서비스 메시에서 생성한 istio.*라는 시크릿을 삭제합니다. 이 예제에서는 istio.default 입니다. 서비스 메시는 워크로드에 대한 새 인증서를 발행합니다.

    $ oc delete secret istio.default

1.13.4.2. 인증서 확인

Bookinfo 샘플 애플리케이션을 사용하여 인증서가 올바르게 마운트되었는지 확인합니다. 먼저 마운트된 인증서를 검색합니다. 그런 다음 pod에 마운트된 인증서를 확인합니다.

  1. pod 이름을 변수 RATINGSPOD에 저장합니다.

    $ RATINGSPOD=`oc get pods -l app=ratings -o jsonpath='{.items[0].metadata.name}'`
  2. 다음 명령을 실행하여 프록시에 마운트된 인증서를 검색합니다.

    $ oc exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /var/run/secrets/istio/root-cert.pem > /tmp/pod-root-cert.pem

    /tmp/pod-root-cert.pem 파일에는 Pod로 전달된 루트 인증서가 포함되어 있습니다.

    $ oc exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /etc/certs/cert-chain.pem > /tmp/pod-cert-chain.pem

    /tmp/pod-cert-chain.pem 파일에는 Pod로 전달된 워크로드 인증서와 CA 인증서가 포함되어 있습니다.

  3. 루트 인증서가 Operator가 지정한 것과 동일한지 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ openssl x509 -in <path>/root-cert.pem -text -noout > /tmp/root-cert.crt.txt
    $ openssl x509 -in /tmp/pod-root-cert.pem -text -noout > /tmp/pod-root-cert.crt.txt
    $ diff /tmp/root-cert.crt.txt /tmp/pod-root-cert.crt.txt

    출력 대상이 비어 있을 것으로 예상됩니다.

  4. CA 인증서가 Operator가 지정한 것과 동일한지 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ sed '0,/^-----END CERTIFICATE-----/d' /tmp/pod-cert-chain.pem > /tmp/pod-cert-chain-ca.pem
    $ openssl x509 -in <path>/ca-cert.pem -text -noout > /tmp/ca-cert.crt.txt
    $ openssl x509 -in /tmp/pod-cert-chain-ca.pem -text -noout > /tmp/pod-cert-chain-ca.crt.txt
    $ diff /tmp/ca-cert.crt.txt /tmp/pod-cert-chain-ca.crt.txt

    출력 대상이 비어 있을 것으로 예상됩니다.

  5. 루트 인증서에서 워크로드 인증서로의 인증서 체인을 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ head -n 21 /tmp/pod-cert-chain.pem > /tmp/pod-cert-chain-workload.pem
    $ openssl verify -CAfile <(cat <path>/ca-cert.pem <path>/root-cert.pem) /tmp/pod-cert-chain-workload.pem

    출력 예

    /tmp/pod-cert-chain-workload.pem: OK

1.13.4.3. 인증서 제거

추가한 인증서를 제거하려면 다음 단계를 따르십시오.

  1. 시크릿 cacerts를 제거합니다.

    $ oc delete secret cacerts -n istio-system
  2. ServiceMeshControlPlane 리소스에서 자체 서명된 루트 인증서로 서비스 메시를 재배포합니다.

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    spec:
      dataPlane:
        mtls: true

1.14. 트래픽 관리 구성

Red Hat OpenShift Service Mesh를 사용하면 서비스 간 트래픽 및 API 호출 흐름을 제어할 수 있습니다. 서비스 메시의 일부 서비스는 메시 내에서 통신해야 하며 다른 서비스는 숨겨야 할 수 있습니다. 트래픽을 관리하여 특정 백엔드 서비스를 숨기고, 서비스를 노출하며, 테스트 또는 버전 관리 배포를 생성하거나 서비스 세트에 보안 계층을 추가합니다.

이 안내서는 Bookinfo 샘플 애플리케이션을 참조하여 예제 애플리케이션에 라우팅 예제를 제공합니다. Bookinfo 애플리케이션을 설치하여 이러한 라우팅 예제가 어떻게 작동하는지 알아봅니다.

1.14.1. 라우팅 튜토리얼

Service Mesh Bookinfo 샘플 애플리케이션은 각각 여러 가지 버전이 있는 네 개의 마이크로 서비스로 구성됩니다. Bookinfo 샘플 애플리케이션을 설치한 후에는 reviews 마이크로 서비스의 세 가지 버전이 동시에 실행됩니다.

브라우저에서 Bookinfo 앱 /product 페이지에 액세스하여 여러 번 새로 고침하면 도서 검토 출력에 별 등급과 다른 경우가 포함되어 있습니다. 라우팅할 명시적인 기본 서비스 버전이 없으면 서비스 메시는 사용 가능한 모든 버전으로 차례대로 요청을 라우팅합니다.

이 튜토리얼은 모든 트래픽을 마이크로 서비스의 v1(버전 1)으로 라우팅하는 규칙을 적용하는 데 도움이 됩니다. 나중에 HTTP 요청 헤더의 값을 기반으로 트래픽을 라우팅하는 규칙을 적용할 수 있습니다.

사전 요구 사항:

  • 다음 예제에서 작동하도록 Bookinfo 샘플 애플리케이션을 배포하십시오.

1.14.1.1. 가상 서비스 적용

다음 절차에서 가상 서비스는 마이크로 서비스의 기본 버전을 설정하는 가상 서비스를 적용하여 모든 트래픽을 각 마이크로 서비스의 v1로 라우팅합니다.

프로세스

  1. 가상 서비스를 적용합니다.

    $ oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/virtual-service-all-v1.yaml
  2. 가상 서비스를 적용했는지 확인하려면 다음 명령을 사용하여 정의된 경로를 표시합니다.

    $ oc get virtualservices -o yaml

    이 명령은 kind: VirtualService의 리소스를 YAML 형식으로 반환합니다.

리뷰 서비스 버전 1을 포함하여 v1 버전의 Bookinfo 마이크로 서비스로 라우팅하도록 서비스 메시를 구성했습니다.

1.14.1.2. 새 경로 구성 테스트

Bookinfo 애플리케이션의 /productpage를 새로 고쳐 새 구성을 테스트합니다.

프로세스

  1. GATEWAY_URL 매개 변수의 값을 설정합니다. 이 변수를 사용하여 나중에 Bookinfo 제품 페이지의 URL을 찾을 수 있습니다. 이 예에서 istio-system은 컨트롤 플레인 프로젝트의 이름입니다.

    export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
  2. 다음 명령을 실행하여 제품 페이지의 URL을 검색합니다.

    echo "http://$GATEWAY_URL/productpage"
  3. 브라우저에서 Bookinfo 사이트를 엽니다.

페이지의 리뷰 부분은 새로 고침 횟수와 관계없이 별점 없이 표시됩니다. 이는 리뷰 서비스의 모든 트래픽을 reviews:v1 버전으로 라우팅하도록 서비스 메시를 구성했기 때문이며, 이 서비스 버전은 별점 서비스에 액세스할 수 없습니다.

이제 서비스 메시가 트래픽을 하나의 서비스 버전으로 라우팅합니다.

1.14.1.3. 사용자 ID 기반 경로

특정 사용자의 모든 트래픽이 특정 서비스 버전으로 라우팅되도록 경로 구성을 변경합니다. 이 경우 jason이라는 사용자의 모든 트래픽은 서비스 reviews:v2로 라우팅됩니다.

서비스 메시에는 사용자 ID에 대한 특별한 기본 지식이 없습니다. 이 예제는 productpage 서비스가 모든 아웃바운드 HTTP 요청에 대한 사용자 정의 end-user 헤더를 검토 서비스에 추가한다는 사실에 의해 활성화됩니다.

프로세스

  1. 다음 명령을 실행하여 Bookinfo 샘플 애플리케이션에서 사용자 기반 라우팅을 활성화합니다.

    $ oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
  2. 다음 명령을 실행하여 규칙이 생성되었는지 확인합니다. 이 명령은 kind: VirtualService의 모든 리소스를 YAML 형식으로 반환합니다.

    $ oc get virtualservice reviews -o yaml
  3. Bookinfo 앱의 /productpage에서 암호 없이 사용자 jason으로 로그인합니다.

    1. 브라우저를 새로 고침합니다. 별점은 각 리뷰 옆에 표시됩니다.
  4. 다른 사용자로 로그인합니다(원하는 이름 선택). 브라우저를 새로 고침합니다. 이제 별이 사라졌습니다. Jason을 제외한 모든 사용자에 대해 트래픽이 reviews:v1로 라우팅됩니다.

사용자 ID를 기반으로 트래픽을 라우팅하도록 Bookinfo 샘플 애플리케이션을 성공적으로 구성했습니다.

1.14.2. 트래픽 라우팅 및 관리

YAML 파일에서 사용자 지정 리소스 정의를 사용하여 Red Hat OpenShift Service Mesh에 자체 트래픽 구성을 추가하여 서비스 메시를 구성합니다.

1.14.2.1. 가상 서비스의 트래픽 관리

가상 서비스가 있는 Red Hat OpenShift Service Mesh를 통해 여러 버전의 마이크로 서비스로 요청을 동적으로 라우팅할 수 있습니다. 가상 서비스를 사용하면 다음을 수행할 수 있습니다.

  • 단일 가상 서비스를 통해 여러 애플리케이션 서비스를 처리합니다. 예를 들어 메시에서 Kubernetes를 사용하는 경우 특정 네임스페이스의 모든 서비스를 처리하도록 가상 서비스를 구성할 수 있습니다. 가상 서비스를 사용하면 모놀리식 애플리케이션을 원활한 소비자 환경을 통해 별도의 마이크로 서비스로 구성된 서비스로 전환할 수 있습니다.
  • 게이트웨이와 결합하여 트래픽 규칙을 구성하고 수신 및 송신 트래픽을 제어합니다.
1.14.2.1.1. 가상 서비스 구성

요청은 가상 서비스를 사용하여 서비스 메시 내에서 서비스로 라우팅됩니다. 각 가상 서비스는 순서대로 평가되는 라우팅 규칙 세트로 구성됩니다. Red Hat OpenShift Service Mesh는 가상 서비스에 대해 주어진 각 요청을 메시 내의 실제 특정 대상에 연결합니다.

가상 서비스가 없는 Red Hat OpenShift Service Mesh는 모든 서비스 인스턴스 간에 라운드 로빈 로드 밸런싱을 사용하여 트래픽을 배포합니다. 가상 서비스에서는 하나 이상의 호스트 이름에 대한 트래픽 동작을 지정할 수 있습니다. 가상 서비스의 라우팅 규칙은 가상 서비스에 대한 트래픽을 적절한 대상으로 전송하는 방법을 Red Hat OpenShift Service Mesh에 알립니다. 경로 대상은 동일한 서비스 또는 완전히 다른 서비스 버전일 수 있습니다.

프로세스

  1. 다음 예제를 사용하여 애플리케이션에 연결하는 사용자에 따라 Bookinfo 샘플 애플리케이션 서비스의 다양한 버전으로 요청을 라우팅하도록 YAML 파일을 만듭니다.

    예: VirtualService.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - match:
        - headers:
            end-user:
              exact: jason
        route:
        - destination:
            host: reviews
            subset: v2
      - route:
        - destination:
            host: reviews
            subset: v3

  2. 다음 명령을 실행하여 VirtualService.yaml을 적용합니다. 여기서 VirtualService.yaml은 파일 경로입니다.

    $ oc apply -f VirtualService.yaml

1.14.2.2. 가상 호스트 구성

다음 섹션에서는 YAML 파일의 각 필드에 대해 설명하고 가상 서비스에서 가상 호스트를 생성하는 방법을 설명합니다.

1.14.2.2.1. 호스트

hosts 필드에는 라우팅 규칙이 적용되는 가상 서비스의 대상 주소가 나열됩니다. 이는 서비스에 요청을 보내는 데 사용되는 주소입니다.

가상 서비스 호스트 이름은 정규화된 도메인 이름으로 확인되는 IP 주소, DNS 이름 또는 짧은 이름일 수 있습니다.

spec:
  hosts:
  - reviews
1.14.2.2.2. 라우팅 규칙

http 섹션에는 hosts 필드에 지정된 대로 대상에 전송된 HTTP/1.1, HTTP2 및 gRPC 트래픽을 라우팅하기 위한 일치 조건 및 작업을 설명하는 가상 서비스의 라우팅 규칙이 포함되어 있습니다. 라우팅 규칙은 트래픽을 이동할 대상과 지정된 일치 조건으로 구성됩니다.

일치 조건

예제의 첫 번째 라우팅 규칙에는 match 필드로 시작하는 조건이 있습니다. 이 예제에서 이 라우팅은 사용자 jason의 모든 요청에 적용됩니다. headers, end-user, exact 필드를 추가하여 적절한 요청을 선택합니다.

spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
      end-user:
        exact: jason

대상

경로 섹션의 destination 필드는 이 조건과 일치하는 트래픽에 대한 실제 대상을 지정합니다. 가상 서비스의 호스트와 달리 대상 호스트는 Red Hat OpenShift Service Mesh 서비스 레지스트리에 있는 실제 대상이어야 합니다. 프록시가 있는 메시 서비스 또는 서비스 항목을 사용하여 추가된 비 메시 서비스일 수 있습니다. 이 예제에서 호스트 이름은 Kubernetes 서비스 이름입니다.

spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
      end-user:
        exact: jason
    route:
    - destination:
      host: reviews
      subset: v2
1.14.2.2.3. 대상 규칙

대상 규칙은 가상 서비스 라우팅 규칙이 평가된 후에 적용되므로 트래픽의 실제 대상에 적용됩니다. 가상 서비스는 트래픽을 대상으로 라우팅합니다. 대상 규칙은 해당 대상의 트래픽에 발생하는 요소를 설정합니다.

1.14.2.2.3.1. 로드 밸런싱 옵션

기본적으로 Red Hat OpenShift Service Mesh는 풀의 각 서비스 인스턴스가 차례대로 요청을 받는 라운드 로빈 로드 밸런싱 정책을 사용합니다. 또한 Red Hat OpenShift Service Mesh는 특정 서비스 또는 서비스 하위 집합에 대한 요청의 대상 규칙에 지정할 수 있는 다음과 같은 모델을 지원합니다.

  • Random: 요청은 풀의 인스턴스에 무작위로 전달됩니다.
  • Weighted: 요청은 구체적인 비율에 따라 풀의 인스턴스로 전달됩니다.
  • Least requests: 요청은 요청 수가 가장 적은 인스턴스로 전달됩니다.

대상 규칙 예

다음 예제 대상 규칙은 서로 다른 로드 밸런싱 정책을 사용하여 my-svc 대상 서비스에 대해 세 가지 다른 하위 집합을 구성합니다.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3
1.14.2.2.4. 게이트웨이

게이트웨이를 사용하여 메시에 대한 인바운드 및 아웃바운드 트래픽을 관리하여 메시에 들어가거나 나가려는 트래픽을 지정할 수 있습니다. 게이트웨이 구성은 서비스 워크로드와 함께 실행되는 사이드카 Envoy 프록시가 아닌, 메시의 에지에서 실행되는 독립 실행형 Envoy 프록시에 적용됩니다.

Kubernetes Ingress API와 같이 시스템으로 들어오는 트래픽을 제어하는 다른 메커니즘과 달리 Red Hat OpenShift Service Mesh 게이트웨이를 사용하면 트래픽 라우팅의 모든 기능과 유연성을 사용할 수 있습니다. Red Hat OpenShift Service Mesh 게이트웨이 리소스는 Red Hat OpenShift Service Mesh TLS 설정을 노출하고 구성하기 위해 포트와 같은 4-6개의 부하 분산 속성을 계층화할 수 있습니다. 애플리케이션 계층 트래픽 라우팅(L7)을 동일한 API 리소스에 추가하는 대신, 일반 Red Hat OpenShift Service Mesh 가상 서비스를 게이트웨이에 바인딩하고 서비스 메시의 다른 데이터 플레인 트래픽처럼 게이트웨이 트래픽을 관리할 수 있습니다.

게이트웨이는 주로 수신 트래픽을 관리하는 데 사용되지만 송신 게이트웨이를 구성할 수도 있습니다. 송신 게이트웨이를 사용하면 메시를 나가는 트래픽에 대해 전용 종료 노드를 구성할 수 있습니다. 이를 통해 외부 네트워크에 대한 액세스 권한이 있는 서비스를 제한하여 서비스 메시에 보안 제어를 추가할 수 있습니다. 게이트웨이를 사용하여 전적으로 내부 프록시를 구성할 수도 있습니다.

게이트웨이 예제

다음 예는 외부 HTTPS 수신 트래픽에 대한 샘플 게이트웨이 구성을 보여줍니다.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: ext-host-gwy
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
    number: 443
    name: https
    protocol: HTTPS
    hosts:
    - ext-host.example.com
    tls:
      mode: SIMPLE
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key

이 게이트웨이 구성으로 ext-host.example.com의 HTTPS 트래픽을 포트 443의 메시로 허용할 수 있지만 트래픽에 라우팅을 지정하지 않습니다.

라우팅을 지정하고 게이트웨이가 의도한 대로 작동하려면 게이트웨이도 가상 서비스에 바인딩해야 합니다. 다음 예와 같이 가상 서비스의 게이트웨이 필드를 사용하여 이 작업을 수행합니다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: virtual-svc
spec:
  hosts:
  - ext-host.example.com
  gateways:
    - ext-host-gwy

그러면 외부 트래픽에 대한 라우팅 규칙으로 가상 서비스를 구성할 수 있습니다.

1.14.2.2.5. 서비스 항목

서비스 항목은 Red Hat OpenShift Service Mesh가 내부적으로 관리하는 서비스 레지스트리에 항목을 추가합니다. 서비스 항목을 추가한 후 Envoy 프록시는 메시의 서비스인 것처럼 서비스에 트래픽을 전송합니다. 서비스 항목을 사용하면 다음을 수행할 수 있습니다.

  • 서비스 메시 외부에서 실행되는 서비스의 트래픽을 관리합니다.
  • 외부 대상(예: 웹에서 소비된 API) 또는 레거시 인프라의 서비스에 대한 트래픽을 리디렉션하고 전달합니다.
  • 외부 대상에 대한 재시도, 시간 초과 및 오류 삽입 정책을 정의합니다.
  • VM(가상 머신)에서 메시에 VM을 추가하여 메시 서비스를 실행합니다.
참고

Kubernetes에서 다중 클러스터 Red Hat OpenShift Service Mesh 메시를 구성하기 위해 다른 클러스터의 서비스를 메시에 추가합니다.

서비스 항목 예

다음 예제 mesh-external 서비스 항목은 ext-resource 외부 종속성을 Red Hat OpenShift Service Mesh 서비스 레지스트리에 추가합니다.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: svc-entry
spec:
  hosts:
  - ext-svc.example.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS

호스트 필드를 사용하여 외부 리소스를 지정합니다. 완전히 한정하거나 와일드카드 접두사 도메인 이름을 사용할 수 있습니다.

메시의 다른 서비스에 대한 트래픽을 구성하는 것과 동일한 방식으로 서비스 항목에 대한 트래픽을 제어하도록 가상 서비스 및 대상 규칙을 구성할 수 있습니다. 예를 들어 다음 대상 규칙은 서비스 항목을 사용하여 구성된 ext-svc.example.com 외부 서비스에 대한 연결을 보호하기 위해 상호 TLS를 사용하도록 트래픽 경로를 구성합니다.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ext-res-dr
spec:
  host: ext-svc.example.com
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem

1.14.3. 수신 트래픽 관리

Red Hat OpenShift Service Mesh에서 Ingress 게이트웨이를 사용하면 모니터링, 보안 및 경로 규칙과 같은 기능을 사용하여 클러스터에 들어오는 트래픽에 적용할 수 있습니다. 서비스 메시 게이트웨이를 사용하여 서비스 메시 외부에서 서비스를 노출합니다.

1.14.3.1. 수신 IP 및 포트 확인

인그레스 구성은 환경에서 외부 로드 밸런서를 지원하는지 여부에 따라 다릅니다. 외부 로드 밸런서는 클러스터의 수신 IP 및 포트에 설정됩니다. 클러스터의 IP 및 포트가 외부 로드 밸런서에 구성되어 있는지 확인하려면 다음 명령을 실행합니다.

$ oc get svc istio-ingressgateway -n istio-system

해당 명령은 네임스페이스에 있는 각 항목의 NAME, TYPE, CLUSTER-IP, EXTERNAL-IP, PORT(S), AGE를 반환합니다.

EXTERNAL-IP 값이 설정되면 해당 환경에 수신 게이트웨이에 사용할 수 있는 외부 로드 밸런서가 있습니다.

EXTERNAL-IP 값이 <none> 또는 영구적으로 <pending>인 경우, 해당 환경은 수신 게이트웨이에 외부 로드 밸런서를 제공하지 않습니다. 서비스의 노드 포트를 사용하여 게이트웨이에 액세스할 수 있습니다.

환경에 따라 인그레스를 결정합니다. 로드 밸런서가 지원되는 환경의 경우 로드 밸런서를 사용하여 수신 포트를 결정합니다. 로드 밸런서가 지원되지 않는 환경의 경우 로드 밸런서 없이 인그레스 포트를 결정합니다. 수신 포트를 확인한 후 게이트웨이를 사용한 수신 구성을 참조하십시오.

1.14.3.1.1. 로드 밸런서를 사용하여 수신 포트 확인

환경에 외부 로드 밸런서가 있는 경우 다음 지침을 따릅니다.

프로세스

  1. 다음 명령을 실행하여 수신 IP 및 포트를 설정합니다. 이 명령은 터미널에 변수를 설정합니다.

    $ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. 다음 명령을 실행하여 수신 포트를 설정합니다.

    $ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
  3. 다음 명령을 실행하여 보안 수신 포트를 설정합니다.

    $ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
  4. 다음 명령을 실행하여 TCP 수신 포트를 설정합니다.

    $ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].port}')
참고

일부 환경에서는 IP 주소 대신 호스트 이름을 사용하여 로드 밸런서가 노출될 수 있습니다. 이 경우 수신 게이트웨이의 EXTERNAL-IP 값은 IP 주소가 아닙니다. 호스트 이름입니다. 이전 명령은 INGRESS_HOST 환경 변수를 설정하지 못합니다.

이 경우 다음 명령을 사용하여 INGRESS_HOST 값을 수정합니다.

$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
1.14.3.1.2. 로드 밸런서 없이 수신 포트 확인

환경에 외부 로드 밸런서가 없는 경우 수신 포트를 확인하고 대신 노드 포트를 사용합니다.

프로세스

  1. 수신 포트를 설정합니다.

    $ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
  2. 다음 명령을 실행하여 보안 수신 포트를 설정합니다.

    $ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
  3. 다음 명령을 실행하여 TCP 수신 포트를 설정합니다.

    $ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')

1.14.4. 게이트웨이를 사용하여 수신 구성

수신 게이트웨이는 들어오는 HTTP/TCP 연결을 수신하는 메시의 에지에서 작동하는 로드 밸런서입니다. 노출된 포트와 프로토콜을 구성하지만 트래픽 라우팅 구성은 포함하지 않습니다. 수신 트래픽의 트래픽 라우팅은 내부 서비스 요청과 동일한 방식으로 라우팅 규칙으로 구성됩니다.

다음 단계에서는 게이트웨이를 만들고 Bookinfo 샘플 애플리케이션에서 서비스를 /productpage 및 / login 경로의 외부 트래픽에 노출하도록 VirtualService를 구성하는 방법을 보여줍니다.

프로세스

  1. 게이트웨이를 만들어 트래픽을 수락합니다.

    1. YAML 파일을 생성하고 다음 YAML을 여기에 복사합니다.

      게이트웨이 예제 gateway.yaml

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: bookinfo-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"

    2. YAML 파일을 적용합니다.

      $ oc apply -f gateway.yaml
  2. VirtualService 오브젝트를 만들어 호스트 헤더를 다시 작성합니다.

    1. YAML 파일을 생성하고 다음 YAML을 여기에 복사합니다.

      가상 서비스 예 vs.yaml

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: bookinfo
      spec:
        hosts:
        - "*"
        gateways:
        - bookinfo-gateway
        http:
        - match:
          - uri:
              exact: /productpage
          - uri:
              prefix: /static
          - uri:
              exact: /login
          - uri:
              exact: /logout
          - uri:
              prefix: /api/v1/products
          route:
          - destination:
              host: productpage
              port:
                number: 9080

    2. YAML 파일을 적용합니다.

      $ oc apply -f vs.yaml
  3. 게이트웨이와 VirtualService가 올바르게 설정되었는지 확인합니다.

    1. 게이트웨이 URL을 설정합니다.

      export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
    2. 포트 번호를 설정합니다.

      export TARGET_PORT=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.port.targetPort}')
    3. 명시적으로 노출된 페이지를 테스트합니다.

      curl -s -I "$GATEWAY_URL/productpage"

      예상 결과는 200입니다.

1.14.5. 자동 경로

Istio 게이트웨이의 OpenShift 경로는 서비스 메시에서 자동으로 관리됩니다. Istio 게이트웨이가 서비스 메시 내부에서 생성, 업데이트 또는 삭제될 때마다 OpenShift 경로가 생성, 업데이트 또는 삭제됩니다.

1.14.5.1. 하위 도메인

Red Hat OpenShift Service Mesh 는 하위 도메인으로 경로를 생성하지만 이를 활성화하려면 OpenShift Container Platform을 구성해야 합니다. 하위 도메인(예: *.domain.com)은 지원되지만 기본적으로 아닙니다. 와일드카드 호스트 게이트웨이를 구성하기 전에 OpenShift Container Platform 와일드카드 정책을 구성합니다. 자세한 내용은 와일드카드 경로 사용을 참조하십시오.

1.14.5.2. 하위 도메인 경로 생성

다음 예제에서는 Bookinfo 샘플 애플리케이션에 게이트웨이를 생성하여 하위 도메인 경로를 생성합니다.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway1
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - www.bookinfo.com
    - bookinfo.example.com

이제 다음 OpenShift 경로가 자동으로 생성됩니다. 다음 명령을 사용하여 경로가 생성되었는지 확인할 수 있습니다. 이 예에서 istio-system은 컨트롤 플레인 프로젝트의 이름입니다.

$ oc -n istio-system get routes

예상 출력

NAME           HOST/PORT             PATH  SERVICES               PORT  TERMINATION   WILDCARD
gateway1-lvlfn bookinfo.example.com        istio-ingressgateway   <all>               None
gateway1-scqhv www.bookinfo.com            istio-ingressgateway   <all>               None

게이트웨이가 삭제되면 Red Hat OpenShift Service Mesh가 경로를 삭제합니다. 그러나 수동으로 생성된 경로는 Red Hat OpenShift Service Mesh에 의해 수정되지 않습니다.

1.14.5.3. 자동 경로 생성 비활성화

기본적으로 ServiceMeshControlPlane 리소스는 OpenShift 경로와 게이트웨이 리소스를 자동으로 동기화합니다. 자동 경로 생성을 비활성화하면 특수 사례가 있거나 경로를 수동으로 제어하려는 경우 경로를 보다 유연하게 제어할 수 있습니다.

ServiceMeshControlPlane 필드 gateways.openshiftRoute.enabled를 false로 설정하여 Istio 게이트웨이와 OpenShift 경로 간의 통합을 비활성화합니다. 예를 들어, 다음 리소스 스니펫을 참조하십시오.

spec:
  gateways:
    openshiftRoute:
      enabled: false

1.14.5.4. 사이드카

기본적으로 Red Hat OpenShift Service Mesh는 연결된 워크로드의 모든 포트에서 트래픽을 허용하고 트래픽을 전달할 때 메시의 모든 워크로드에 도달할 수 있도록 모든 Envoy 프록시를 구성합니다. 사이드카 구성을 사용하여 다음을 수행할 수 있습니다.

  • Envoy 프록시가 수락하는 포트와 프로토콜 집합을 미세 조정합니다.
  • Envoy 프록시가 도달할 수 있는 서비스 집합을 제한합니다.
참고

서비스 메시의 성능을 최적화하려면 Envoy 프록시 구성을 제한하는 것이 좋습니다.

Bookinfo 샘플 애플리케이션에서 모든 서비스가 동일한 네임스페이스 및 컨트롤 플레인에서 실행되는 다른 서비스에 도달할 수 있도록 사이드카를 구성합니다. 이 사이드카 구성은 Red Hat OpenShift Service Mesh 정책 및 원격 분석 기능을 사용하는 데 필요합니다.

프로세스

  1. 다음 예제를 사용하여 YAML 파일을 생성하여 사이드카 구성이 특정 네임스페이스의 모든 워크로드에 적용되도록 지정합니다. 그렇지 않으면 workloadSelector를 사용하여 특정 워크로드를 선택합니다.

    예제 sidecar.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: Sidecar
    metadata:
      name: default
      namespace: bookinfo
    spec:
      egress:
      - hosts:
        - "./*"
        - "istio-system/*"

  2. 다음 명령을 실행하여 sidecar.yaml을 적용합니다. 여기서 sidecar.yaml은 파일의 경로입니다.

    $ oc apply -f sidecar.yaml
  3. 다음 명령을 실행하여 사이드카가 성공적으로 생성되었는지 확인합니다.

    $ oc get sidecar

1.15. 메트릭 및 추적

Kiali 콘솔에서 애플리케이션의 토폴로지, 상태 및 지표를 볼 수 있습니다. 서비스에 문제가 발생하면 Kiali 콘솔을 사용하여 서비스를 통해 데이터 흐름을 볼 수 있습니다. 추상 애플리케이션, 서비스 및 워크로드를 포함하여 다양한 수준에서 메시 구성 요소에 대한 인사이트를 볼 수 있습니다. 또한 네임스페이스에 대한 대화형 그래프 보기도 실시간으로 제공합니다.

애플리케이션을 설치한 경우 애플리케이션을 통해 데이터 흐름을 확인할 수 있습니다. 자체 애플리케이션이 설치되어 있지 않은 경우 Bookinfo 샘플 애플리케이션을 설치하여 Red Hat OpenShift Service Mesh에서 관찰 기능이 작동하는 방식을 확인할 수 있습니다.

1.15.1. CLI에서 지표 및 추적 데이터에 액세스

Jaeger, Prometheus 및 Grafana 콘솔에 액세스하여 데이터를 보고 관리합니다.

프로세스

  1. 컨트롤 플레인 프로젝트로 전환합니다. 이 예에서 istio-system은 컨트롤 플레인 프로젝트입니다. 다음 명령을 실행합니다.

    $ oc project istio-system
  2. Red Hat OpenShift Service Mesh 구성 요소로의 경로를 가져옵니다. 다음 명령을 실행합니다.

    $ oc get routes

    이 명령은 Kiali, Jaeger, Prometheus 및 Grafana의 웹 콘솔 URL 및 서비스 메시의 기타 경로를 반환합니다.

  3. HOST/PORT 열에서 원하는 구성 요소의 URL을 브라우저로 복사하여 콘솔을 엽니다.

1.15.2. 서비스 메시 데이터 보기

Kiali Operator는 Red Hat OpenShift Service Mesh에서 수집된 원격 분석 데이터와 함께 작업하여 네임스페이스의 애플리케이션, 서비스 및 워크로드에 대한 그래프 및 실시간 네트워크 다이어그램을 제공합니다.

Kiali 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 있고 서비스 메시에 대해 구성된 프로젝트가 있어야 합니다.

프로세스

  1. 관점 전환 기능을 사용하여 관리자 관점으로 전환하십시오.
  2. Home > Projects(홈 > 프로젝트)를 클릭합니다.
  3. 프로젝트 이름을 클릭합니다. 예를 들어 bookinfo를 클릭합니다.
  4. Launcher(시작기) 섹션에서 Kiali를 클릭합니다.
  5. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 Kiali 콘솔에 로그인합니다.

Kiali 콘솔에 처음 로그인하면 표시 권한이 있는 메시에 모든 네임스페이스가 표시되는 개요 페이지가 나타납니다.

1.15.2.1. Kiali 콘솔에서 데이터 작업

Kiali 콘솔의 Graph 메뉴에서 다음 그래프 및 보기 툴을 사용하여 서비스 메시를 통해 이동하는 데이터에 대한 심층 정보를 얻을 수 있습니다. 이러한 툴은 서비스 또는 워크로드의 문제를 식별하는 데 도움이 될 수 있습니다.

몇 가지의 그래프를 선택할 수 있습니다.

  • 앱 그래프는 동일한 레이블이 있는 모든 애플리케이션에 대한 집계 워크로드를 보여줍니다.
  • 버전 지정된 앱 그래프는 애플리케이션의 각 버전에 대한 노드를 표시합니다. 모든 버전의 애플리케이션이 함께 그룹화됩니다.
  • 워크로드 그래프는 서비스 메시의 각 워크로드에 대한 노드를 표시합니다. 이 그래프에서는 애플리케이션 및 버전 레이블을 사용할 필요가 없습니다. 애플리케이션에서 버전 레이블을 사용하지 않는 경우 이 그래프를 사용합니다.
  • 서비스 그래프는 메시의 각 서비스에 대한 노드를 표시하지만 그래프에서 모든 애플리케이션과 워크로드를 제외합니다. 높은 수준의 보기를 제공하며 정의된 서비스에 대한 모든 트래픽을 집계합니다.

지표 요약을 보려면 그래프에서 노드 또는 에지를 선택하여 요약 세부 정보 패널에 지표 세부 정보를 표시합니다.

1.15.2.1.1. 네임스페이스 그래프

네임스페이스 그래프는 네임스페이스의 서비스, 배포 및 워크플로의 맵이며 데이터가 통과하는 방식을 보여주는 화살표입니다.

사전 요구 사항

  • Bookinfo 샘플 애플리케이션을 설치합니다.

프로세스

  1. 다음 명령을 여러 번 입력하여 메시에 트래픽을 보냅니다.

    $ curl "http://$GATEWAY_URL/productpage"

    이 명령은 애플리케이션의 productpage 마이크로 서비스를 방문하는 사용자를 시뮬레이션합니다.

  2. 기본 탐색에서 Graph(그래프 )를 클릭하여 네임스페이스 그래프를 확인합니다.
  3. 네임스페이스 메뉴에서 bookinfo를 선택합니다.

1.15.3. 분산 추적

분산 추적은 애플리케이션에서 서비스 호출의 경로를 추적하여 애플리케이션에서 개별 서비스의 성능을 추적하는 프로세스입니다. 사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 많은 서비스가 상호 작용해야 할 수 있는 요청이 실행됩니다. 이 요청의 경로를 분산 트랜잭션이라고 합니다.

Red Hat OpenShift Service Mesh는 Jaeger를 사용하여 개발자가 마이크로 서비스 애플리케이션에서 호출 흐름을 볼 수 있도록 합니다.

1.15.3.1. 예제 추적 생성 및 추적 데이터 분석

Jaeger는 오픈 소스 분산 추적 시스템입니다. Jaeger를 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 따르는 추적을 수행할 수 있습니다. Jaeger는 기본적으로 서비스 메시의 일부로 설치됩니다.

이 튜토리얼에서는 서비스 메시 및 Bookinfo 샘플 애플리케이션을 사용하여 Jaeger를 사용하여 분산 추적을 수행하는 방법을 보여줍니다.

사전 요구 사항:

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • 설치 중에 Jaeger가 활성화되었습니다.
  • Bookinfo 예제 애플리케이션이 설치되었습니다.

프로세스

  1. Bookinfo 샘플 애플리케이션을 설치한 후 트래픽을 메시로 보냅니다. 다음 명령을 여러 번 입력합니다.

    $ curl "http://$GATEWAY_URL/productpage"

    이 명령은 애플리케이션의 productpage 마이크로 서비스를 방문하는 사용자를 시뮬레이션합니다.

  2. OpenShift Container Platform 콘솔에서 네트워킹경로로 이동하여 위치에 나열된 URL인 Jaeger 경로를 검색합니다.

    • 또는 CLI를 사용하여 경로에 대한 세부 정보를 쿼리합니다. 이 예에서 istio-system은 컨트롤 플레인 네임스페이스입니다.

      $ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
      1. 다음 명령을 입력하여 Jaeger 콘솔의 URL을 표시합니다. 결과를 브라우저에 붙여넣고 해당 URL로 이동합니다.

        echo $JAEGER_URL
  3. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 로그인합니다.
  4. Jaeger 대시보드의 왼쪽 창에 있는 Service (서비스) 메뉴에서 productpage.bookinfo를 선택하고 창 하단에 있는 추적 찾기 버튼을 클릭합니다. 추적 목록이 표시됩니다.
  5. 목록의 추적 중 하나를 클릭하여 해당 추적에 대한 상세 보기를 엽니다. 목록에서 최신 추적인 첫 번째 추적을 클릭하면 /productpage의 최신 새로 고침에 해당하는 세부 정보가 표시됩니다.

1.15.3.2. 샘플링 속도 조정

분산 추적 샘플링 비율은 기본적으로 서비스 메시의 추적의 샘플 100%로 설정됩니다. 샘플링 비율이 높으면 클러스터 리소스와 성능을 사용하지만 문제를 디버깅할 때 유용합니다. 프로덕션에 Red Hat OpenShift Service Mesh를 배포하기 전에 값을 더 적은 추적으로 설정합니다.

추적은 서비스 메시의 서비스 간 실행 경로입니다. 추적은 하나 이상의 범위로 구성됩니다. 기간은 이름, 시작 시간 및 기간이 있는 논리적 작업 단위입니다.

샘플링 비율은 추적이 발생하는 빈도를 결정합니다. 0.01% 증분을 나타내는 스케일링된 정수로 sampling을 구성합니다.

기본 설치에서 spec.tracing.sampling은 추적의 100%를 샘플링하는 10000으로 설정됩니다. 예를 들면 다음과 같습니다.

  • 추적의 0.1%를 10개 샘플로 설정합니다.
  • 추적의 값을 500개 샘플 5%로 설정합니다.

값을 10000으로 설정하는 것은 디버깅에 유용하지만 성능에 영향을 줄 수 있습니다. 프로덕션의 경우 spec.tracing.sampling을 100으로 설정합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator설치된 Operator를 클릭합니다.
  2. 프로젝트 메뉴에서 컨트롤 플레인을 설치한 프로젝트를 선택합니다(예: istio-system ).
  3. Red Hat OpenShift Service Mesh Operator를 클릭합니다. Istio Service Mesh Control Plane 열에서 ServiceMeshControlPlane 리소스의 이름을 클릭합니다(예: basic ).
  4. 샘플링 속도를 조정하려면 spec.tracing.sampling에 대해 다른 값을 설정합니다.

    1. YAML 탭을 클릭합니다.
    2. ServiceMeshControlPlane 리소스에서 spec.tracing.sampling의 값을 설정합니다. 다음 예제에서는 100으로 설정합니다.

      Jaeger 샘플링 예

      spec:
        tracing:
          sampling: 100

    3. 저장을 클릭합니다.
  5. Reload(다시 로드 )를 클릭하여 ServiceMeshControlPlane 리소스가 올바르게 구성되었는지 확인합니다.

1.15.3.3. 독립 실행형 Jaeger 연결

OpenShift Container Platform에서 분산 추적에 이미 독립 실행형 Jaeger를 사용하는 경우 Red Hat OpenShift Service Mesh와 함께 설치된 것이 아니라 해당 독립 실행형 Jaeger 인스턴스를 사용하도록 ServiceMeshControlPlane 리소스를 구성합니다.

사전 요구 사항

  • 독립 실행형 Jaeger 인스턴스를 구성하고 배포합니다. 자세한 내용은 Jaeger 문서를 참조하십시오.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator설치된 Operator를 클릭합니다.
  2. 프로젝트 메뉴에서 컨트롤 플레인을 설치한 프로젝트를 선택합니다(예: istio-system ).
  3. Red Hat OpenShift Service Mesh Operator를 클릭합니다. Istio Service Mesh Control Plane 열에서 ServiceMeshControlPlane 리소스의 이름을 클릭합니다(예: basic ).
  4. 독립 실행형 Jaeger 인스턴스의 이름을 ServiceMeshControlPlane에 추가합니다.

    1. YAML 탭을 클릭합니다.
    2. ServiceMeshControlPlane 리소스의 spec.addons.jaeger.name에 독립 실행형 Jaeger 인스턴스의 이름을 추가합니다. 다음 예제에서 simple-prod는 독립 실행형 Jaeger 인스턴스의 이름입니다.

      독립 실행형 Jaeger 예

      spec:
        addons:
          jaeger:
            name: simple-prod

    3. 저장을 클릭합니다.
  5. Reload(다시 로드 )를 클릭하여 ServiceMeshControlPlane 리소스가 올바르게 구성되었는지 확인합니다.

Jaeger 구성에 대한 자세한 내용은 Jaeger 문서를 참조하십시오.

1.15.4. Grafana 액세스

Grafana는 서비스 메시 지표를 보고 쿼리하고 분석하는 데 사용할 수 있는 분석 툴입니다. Grafana에 액세스하려면 다음을 수행합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Routes(경로 )를 클릭합니다.
  4. Grafana 행의 Location (위치) 열에서 링크를 클릭합니다.
  5. OpenShift Container Platform 자격 증명을 사용하여 Grafana 콘솔에 로그인합니다.

1.15.5. Prometheus 액세스

Prometheus는 마이크로 서비스에 대한 다차원 데이터를 수집하는 데 사용할 수 있는 모니터링 및 경고 도구입니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Routes(경로 )를 클릭합니다.
  4. Prometheus 행의 Location (위치) 열에서 링크를 클릭합니다.
  5. OpenShift Container Platform 인증 정보를 사용하여 Prometheus 콘솔에 로그인합니다.

1.16. 성능 및 확장

기본 ServiceMeshControlPlane 설정은 프로덕션용이 아닙니다. 이 설정은 리소스가 제한된 환경인 기본 OpenShift Container Platform 설치에 성공적으로 설치되도록 설계되었습니다. SMCP 설치에 성공했는지 확인한 후 SMCP 내에 정의된 설정을 사용자 환경에 맞게 수정해야 합니다.

1.16.2. 로드 테스트 결과

업스트림 Istio 커뮤니티 로드 테스트 메시는 초당 70,000개의 메시 전체 요청이 있는 1000개의 서비스와 2000개의 사이드카로 구성됩니다. Istio 1.6.8을 사용하여 테스트를 실행하면 다음과 같은 결과가 생성됩니다.

  • Envoy 프록시는 프록시를 통과하는 초당 1000개 요청마다 0.5 vCPU50MB 메모리를 사용합니다.
  • Istiod는 1개의 vCPU1.5GB 메모리를 사용합니다.
  • Envoy 프록시는 3.12ms를 90번째 백분율 대기 시간에 추가합니다.
  • 레거시 istio-telemetry 서비스(기본적으로 Service Mesh 2.0에서 비활성화됨)는 Mixer를 사용하는 배포에 대해 초당 1,000 개의 메시 전체 요청마다 0.6 vCPU를 사용합니다. 데이터 플레인 구성 요소인 Envoy 프록시는 시스템을 통과하는 데이터를 처리합니다. 컨트롤 플레인 구성 요소 Istiod는 데이터 플레인을 구성합니다. 데이터 플레인과 컨트롤 플레인에는 별도의 성능 문제가 있습니다.

1.16.2.1. 컨트롤 플레인 성능

Istiod는 사용자가 승인한 구성 파일 및 시스템의 현재 상태를 기반으로 사이드카 프록시를 구성합니다. Kubernetes 환경에서 CRD(Custom Resource Definitions)와 배포는 시스템의 구성 및 상태를 구성합니다. 게이트웨이 및 가상 서비스와 같은 Istio 구성 오브젝트는 사용자 인증된 구성을 제공합니다. 프록시에 대한 구성을 생성하기 위해 Istiod는 Kubernetes 환경과 사용자 인증된 구성에서 결합된 구성 및 시스템 상태를 처리합니다.

컨트롤 플레인은 수천 개의 서비스를 지원하며, 유사한 수의 사용자 인증된 가상 서비스 및 기타 구성 오브젝트가 포함된 수천 개의 Pod에 분산됩니다. Istiod의 CPU 및 메모리 요구 사항은 구성 수와 가능한 시스템 상태에 따라 확장됩니다. CPU 사용량은 다음과 같은 요인에 따라 확장됩니다.

  • 배포 변경 비율.
  • 구성 변경 비율.
  • Istiod에 연결된 프록시 수.

그러나 이 부분은 기본적으로 수평 확장할 수 있습니다.

1.16.2.2. 데이터 플레인 성능

데이터 플레인 성능은 여러 요인에 따라 달라집니다. 예를 들면 다음과 같습니다.

  • 클라이언트 연결 수
  • 대상 요청 속도
  • 요청 크기 및 응답 크기
  • 프록시 작업자 스레드 수
  • 프로토콜
  • CPU 코어 수
  • 프록시 필터, 특히 telemetry v2 관련 필터의 수 및 유형입니다.

대기 시간, 처리량, 프록시 CPU 및 메모리 사용은 이러한 요인의 기능으로 측정됩니다.

1.16.2.2.1. CPU 및 메모리 사용

사이드카 프록시는 데이터 경로에서 추가 작업을 수행하므로 CPU와 메모리를 사용합니다. Istio 1.1부터 프록시는 초당 1000개 요청마다 약 0.6 vCPU를 사용합니다.

프록시의 메모리 사용은 프록시가 보유하고 있는 총 구성 상태에 따라 달라집니다. 다수의 리스너, 클러스터 및 경로를 통해 메모리 사용량을 늘릴 수 있습니다.

프록시는 일반적으로 통과된 데이터를 버퍼링하지 않기 때문에 요청 속도는 메모리 소비에 영향을 미치지 않습니다.

1.16.2.2.2. 추가 대기 시간

Istio가 데이터 경로에 사이드카 프록시를 삽입하기 때문에 대기 시간이 중요합니다. Istio는 인증 필터, telemetry 필터 및 메타데이터 교환 필터를 프록시에 추가합니다. 모든 추가 필터는 프록시 내부의 경로 길이를 추가하고 대기 시간에 영향을 미칩니다.

Envoy 프록시는 응답이 클라이언트에 전송된 후 원시 telemetry 데이터를 수집합니다. 요청을 위해 원시 Telemetry를 수집하는 데 소요되는 시간은 해당 요청을 완료하는 데 걸리는 총 시간에 기여하지 않습니다. 그러나 작업자가 요청을 처리하느라 바쁘기 때문에 작업자는 즉시 다음 요청 처리를 시작하지 않습니다. 이 프로세스는 다음 요청의 대기열 대기 시간에 추가되며 평균 및 테일 대기 시간에 영향을 미칩니다. 실제 정확한 대기 시간은 트래픽 패턴에 따라 달라집니다.

메시 내부에서 요청은 클라이언트 측 프록시를 통과한 다음, 서버 측 프록시를 통과합니다. Istio 1.6.8의 기본 구성(즉, telemetry v2가 있는 Istio)에서 두 프록시는 기준 데이터 플레인 대기 시간 동안 각각 약 3.12ms 및 3.13ms를 90번째 및 99번째 백분위 대기 시간에 추가합니다.

1.17. 확장

WebAssembly 확장으로 Red Hat OpenShift Service Mesh 프록시에 새 기능을 직접 추가하여, 애플리케이션에서 더 일반적인 기능을 이동하고 WebAssembly 바이트 코드로 컴파일되는 단일 언어로 구현할 수 있습니다.

1.17.1. WebAssembly 확장

WebAssembly 모듈은 프록시를 포함한 여러 플랫폼에서 실행될 수 있으며 광범위한 언어 지원, 신속한 실행 및 샌드박스 기반 보안 모델을 제공합니다.

확장 기능

Red Hat OpenShift Service Mesh 확장은 Envoy HTTP 필터이며 다양한 기능을 제공합니다.

  • 요청 및 응답의 본문과 헤더 조정
  • 인증 또는 정책 검사와 같이 요청 경로에 없는 서비스에 대한 대역 외 HTTP 요청
  • 필터가 서로 통신할 수 있는 사이드 채널 데이터 스토리지 및 대기열

Red Hat OpenShift Service Mesh 확장을 작성하는 데는 두 가지 부분이 있습니다. proxy-wasm API를 공개하는 SDK를 사용하여 확장을 작성하고, 이를 WebAssembly 모듈로 컴파일한 다음 컨테이너로 패키징해야 합니다.

지원되는 언어

WebAssembly 바이트 코드에 컴파일된 모든 언어를 사용하여 Red Hat OpenShift Service Mesh 확장을 작성할 수 있지만, 다음 언어에는 proxy-wasm API를 공개하는 기존 SDK가 있어 직접 사용할 수 있습니다.

표 1.4. 지원되는 언어

언어유지 관리자리포지터리

AssemblyScript

solo.io

solo-io/proxy-runtime

C++

proxy-wasm 팀(Istio 커뮤니티)

proxy-wasm/proxy-wasm-cpp-sdk

Go

tetrate.io

tetratelabs/proxy-wasm-go-sdk

Rust

proxy-wasm 팀(Istio 커뮤니티)

proxy-wasm/proxy-wasm-rust-sdk

1.17.1.1. 컨테이너 형식

컨테이너 이미지를 유효한 확장 이미지로 만들려면 컨테이너 파일 시스템의 루트에 WebAssembly 모듈의 바이트 코드가 포함된 .wasm 파일과 manifest.yaml 파일이 있어야 합니다.

manifest.yaml

schemaVersion: 1

name: <your-extension>
description: <description>
version: 1.0.0
phase: PreAuthZ
priority: 100
module: extension.wasm

표 1.5. manifest.yml의 필드 참조

필드설명

schemaVersion

매니페스트 스키마 버전 지정에 사용됩니다. 현재 가능한 값은 1입니다.

name

해당 확장의 이름입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다.

description

해당 확장의 설명입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다.

version

해당 확장의 버전입니다. 이 필드는 메타데이터일 뿐이며 현재 사용되지 않습니다.

phase

해당 확장의 기본 실행 단계입니다. 이 필드는 필수 항목입니다.

priority

해당 확장의 기본 우선순위입니다. 이 필드는 필수 항목입니다.

module

컨테이너 파일 시스템의 루트에서 WebAssembly 모듈에 대한 상대적 경로입니다. 이 필드는 필수 항목입니다.

1.17.1.2. Rust 확장 예

Rust SDK를 사용하여 빌드된 전체 예제는 header-append-filter를 참조하십시오. 이 필터는 custom-header라는 헤더를 구성에 따라 값과 함께 모든 응답에 추가합니다.

1.17.1.3. WebAssembly 확장 지원 활성화

Red Hat OpenShift Service Mesh에 대한 WebAssembly 확장 지원은 현재 기술 프리뷰에 있으므로 ServiceMeshControlPlane에 대해 명시적으로 활성화해야 합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator설치된 Operator를 클릭합니다.
  2. 프로젝트 메뉴에서 컨트롤 플레인을 설치한 프로젝트를 선택합니다(예: istio-system ).
  3. Red Hat OpenShift Service Mesh Operator를 클릭합니다. Istio Service Mesh Control Plane 열에서 ServiceMeshControlPlane 리소스의 이름을 클릭합니다(예: basic ).
  4. YAML 탭을 클릭합니다.
  5. ServiceMeshControlPlane 리소스에서 spec.techPreview.wasmExtensions.enabled를 true로 설정합니다. 예를 들면 다음과 같습니다.

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: openid-connect
      namespace: istio-system
    spec:
      techPreview:
        wasmExtensions:
          enabled: true
  6. 저장을 클릭합니다.
  7. Reload(다시 로드 )를 클릭하여 ServiceMeshControlPlane 리소스가 올바르게 구성되었는지 확인합니다.

1.17.1.4. 확장 배포

Red Hat OpenShift Service Mesh 확장은 ServiceMeshExtension 리소스를 사용하여 활성화할 수 있습니다.

프로세스

  1. 다음 예제 리소스를 생성합니다.

    ServiceMeshExtension 리소스 extensions.yaml의 예

    apiVersion: maistra.io/v1alpha1
    kind: ServiceMeshExtension
    metadata:
      name: header-append
      namespace: istio-system
    spec:
      workloadSelector:
        labels:
          app: httpbin
      config: test
      image: quay.io/maistra-dev/header-append-filter:2.0
      phase: PostAuthZ
      priority: 100

  2. 다음 명령을 사용하여 extensions.yaml 파일을 적용합니다.

    $ oc apply -f extension.yaml

표 1.6. ServiceMeshExtension 필드 참조

필드설명

metadata.namespace

ServiceMeshExtension 소스의metadata.namespace에는 특별한 의미가 있습니다. 컨트롤 플레인 네임스페이스와 같은 경우, 확장은 해당 workloadSelector와 일치하는 서비스 메시의 모든 워크로드에 적용됩니다. 다른 메시 네임스페이스에 배포하면 동일한 네임스페이스의 워크로드에만 적용됩니다.

spec.workloadSelector

spec.workloadSelector 필드는 Istio 게이트웨이 리소스spec.selector 필드와 동일한 의미가 있습니다. Pod 레이블을 기반으로 하는 워크로드와 일치합니다. workloadSelector를 지정하지 않으면 네임스페이스의 모든 워크로드에 확장이 적용됩니다.

spec.config

확장으로 전달되는 패스쓰루 문자열 필드입니다. 구문 및 의미는 배포 중인 확장 기능에 따라 다릅니다.

spec.image

확장자가 있는 이미지를 가리키는 컨테이너 이미지 URI입니다.

spec.phase

이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다. 단계는 인증, 권한 부여, 지표 생성과 같은 기존 Istio 기능과 관련하여 필터 체인에서 확장이 삽입되는 위치를 결정합니다. 유효한 값: PreAuthN, PostAuthN, PreAuthZ, PostAuthZ, PreStats, PostStats. 이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다.

spec.priority

동일한 spec.phase이 있는 여러 확장이 동일한 워크로드 인스턴스에 적용되는 경우, spec.priority는 실행 순서를 결정합니다. 우선순위가 높은 확장이 먼저 실행됩니다. 이를 통해 상호 의존적인 확장을 허용합니다. 이 필드의 기본값은 확장의 manifest.yaml에 설정된 값이지만 사용자가 덮어쓸 수 있습니다.

1.18. 프로덕션을 위한 서비스 메시 구성

기본 설치에서 프로덕션으로 이동할 준비가 되면 프로덕션 요구 사항을 충족하도록 컨트롤 플레인, 추적 및 보안 인증서를 구성해야 합니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 설치 및 구성.
  • 스테이징 환경에서 구성을 테스트합니다.

1.18.1. 프로덕션에 대한 ServiceMeshControlPlane 리소스 구성

Service Mesh를 테스트하기 위해 기본 ServiceMeshControlPlane 리소스를 설치한 경우 프로덕션에서 Red Hat OpenShift Service Mesh를 사용하기 전에 프로덕션 사양으로 구성해야 합니다.

기존 ServiceMeshControlPlane 리소스의 metadata.name 필드를 변경할 수 없습니다. 프로덕션 배포의 경우 기본 템플릿을 사용자 지정해야 합니다.

프로세스

  1. 프로덕션에 대한 Jaeger를 구성합니다.

    1. spec.addons.jaeger.install.storage.type을 Elasticsearch로 설정하고 install에서 추가 구성 옵션을 지정하여 production 배포 전략을 사용하도록 ServiceMeshControlPlane 리소스를 편집합니다. Jaeger 인스턴스를 생성 및 구성하고 spec.addons.jaeger.name을 Jaeger 인스턴스의 이름으로 설정할 수 있습니다(예: jaeger-production ).

      Elasticsearch를 포함한 기본 Jaeger 매개변수

      apiVersion: maistra.io/v2
      kind: ServiceMeshControlPlane
      metadata:
        name: basic
      spec:
        version: v2.0
        tracing:
          sampling: 100
          type: Jaeger
        addons:
          jaeger:
            name: jaeger-production
            install:
              storage:
                type: Elasticsearch
              ingress:
                enabled: true
        runtime:
          components:
            tracing.jaeger.elasticsearch: # only supports resources and image name
              container:
                resources: {}

    2. production의 샘플링 속도를 구성합니다. 자세한 내용은 성능 및 확장성 섹션을 참조하십시오.
  2. 외부 인증 기관에서 보안 인증서를 설치하여 보안 인증서가 프로덕션에 준비되었는지 확인합니다. 자세한 내용은 보안 섹션을 참조하십시오.
  3. 결과를 확인합니다. 다음 명령을 입력하여 ServiceMeshControlPlane 리소스가 올바르게 업데이트되었는지 확인합니다. 이 예에서 basic은 ServiceMeshControlPlane 리소스의 이름입니다.

    $ oc get smcp basic -o yaml

1.19. 추가 리소스

성능을 위해 서비스 메시 튜닝에 대한 자세한 내용은 성능 및 확장성을 참조하십시오.

1.20. 3scale Istio 어댑터 사용

3scale Istio Adapter는 Red Hat OpenShift Service Mesh 내에서 실행되는 서비스에 레이블을 지정하고 해당 서비스를 3scale API 관리 솔루션과 통합할 수 있는 선택적 어댑터입니다. Red Hat OpenShift Service Mesh에는 필요하지 않습니다.

중요

3scale Istio 어댑터로 3scale 백엔드 캐시를 활성화하려면 Mixer 정책 및 Mixer Telemetry도 활성화해야 합니다. Red Hat OpenShift Service Mesh Control Plane 배포를 참조하십시오.

1.20.1. Red Hat OpenShift Service Mesh와 3scale 어댑터 통합

이러한 예제를 사용하여 3scale Istio 어댑터로 서비스에 대한 요청을 구성할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 버전 2.x
  • 작업 중인 3scale 계정(SaaS 또는 3scale 2.9 on-Premises)
  • 백엔드 캐시를 활성화하려면 3scale 2.9 이상 필요
  • Red Hat OpenShift Service Mesh 사전 요구 사항
  • Mixer 정책 적용이 활성화되었는지 확인합니다. Mixer 정책 시행 업데이트 섹션에서는 현재 Mixer 정책 시행 상태를 확인하고 정책 시행을 활성화하는 지침을 제공합니다.
  • mixer 플러그인을 사용하는 경우 Mixer 정책 및 Telemetry를 활성화해야 합니다.

    • 업그레이드 시 SMCP(Service Mesh Control Plane)를 올바르게 구성해야 합니다.
참고

3scale Istio Adapter를 구성하려면 사용자 정의 리소스 파일에 어댑터 매개변수를 추가하는 방법에 대한 Red Hat OpenShift Service Mesh 사용자 정의 리소스를 참조하십시오.

참고

특히 kind: handler 리소스에 주의하십시오. 3scale 계정 인증 정보로 업데이트해야 합니다. 선택적으로 service_id를 핸들러에 추가할 수 있지만 3scale 계정의 하나의 서비스에만 핸들러를 렌더링하므로 이전 버전과의 호환성을 위해서만 유지됩니다. service_id를 핸들러에 추가하는 경우 다른 서비스에 3scale을 활성화하려면 다른 service_ids로 더 많은 핸들러를 생성해야 합니다.

아래 단계에 따라 3scale 계정당 단일 처리기를 사용합니다.

프로세스

  1. 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를 사용하려는 경우 유용할 수 있습니다.

  2. 다음과 같이 3scale 계정에 속하는 서비스의 Deployment(배포) 리소스를 편집하거나 패치합니다.

    1. 유효한 service_id에 해당하는 값을 사용하여 "service-mesh.3scale.net/service-id " 레이블을 추가합니다.
    2. 값을 1단계에서 handler 리소스의 이름으로 사용하여 "service-mesh.3scale.net/credentials" 레이블을 추가합니다.
  3. 서비스를 더 추가할 때마다 2단계를 3scale 계정 자격 증명과 해당 서비스 식별자에 연결합니다.
  4. 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

1.20.1.1. 3scale 사용자 정의 리소스 생성

어댑터에는 handler, instance, rule 사용자 정의 리소스를 생성할 수 있는 도구가 포함되어 있습니다.

표 1.7. 사용법

옵션설명필수 항목기본값

-h, --help

사용 가능한 옵션에 대한 도움말 출력 생성

아니요

 

--name

이 URL의 고유 이름, 토큰 쌍

 

-n, --namespace

템플릿을 생성할 네임스페이스

아니요

istio-system

-t, --token

3scale 액세스 토큰

 

-u, --url

3scale 관리자 포털 URL

 

--backend-url

3scale 백엔드 URL. 설정하면 시스템 설정에서 읽은 값을 재정의합니다.

아니요

 

-s, --service

3scale API/서비스 ID

아니요

 

--auth

지정을 위한 3scale 인증 패턴(1=API Key, 2=App Id/App Key, 3=OIDC)

아니요

하이브리드

-o, --output

생성된 매니페스트를 저장할 파일

아니요

표준 출력

--version

CLI 버전을 출력하고 즉시 종료합니다.

아니요

 
1.20.1.1.1. URL 예제에서 템플릿 생성
참고

프로세스

  • 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]"

추가 리소스

1.20.1.2. 배포된 어댑터에서 매니페스트 생성

참고
  • NAME은 3scale로 관리 중인 서비스와 식별하는 데 사용하는 식별자입니다.
  • CREDENTIALS_NAME 참조는 규칙 구성의 match 섹션에 해당하는 식별자입니다. CLI 도구를 사용하는 경우 이름 식별자로 자동 설정됩니다.
  • 해당 값은 특정할 필요가 없습니다. 레이블 값은 규칙의 내용만 일치해야 합니다. 자세한 내용은 어댑터를 통한 라우팅 서비스 트래픽을 참조하십시오.
  1. 이 명령을 실행하여 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}
  2. 터미널에 샘플 출력이 생성됩니다. 필요한 경우 이러한 샘플을 편집하고 oc create 명령을 사용하여 오브젝트를 생성합니다.
  3. 요청이 어댑터에 도달하면 어댑터는 서비스가 3scale의 API에 매핑되는 방식을 알아야 합니다. 다음 두 가지 방법으로 이러한 정보를 제공할 수 있습니다.

    1. 워크로드에 레이블 지장(권장)
    2. 처리기를 service_id로 하드 코딩
  4. 필요한 주석으로 워크로드를 업데이트합니다.

    참고

    처리기에 아직 포함되지 않은 경우, 이 예제에 제공된 서비스 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}"''

1.20.1.3. 어댑터를 통한 서비스 트래픽 라우팅

3scale 어댑터를 통해 서비스 트래픽을 유도하려면 다음 단계를 따르십시오.

사전 요구 사항

  • 3scale 관리자의 인증 정보 및 서비스 ID

프로세스

  1. kind: rule 리소스의 구성에서 이전에 생성한 destination.labels["service-mesh.3scale.net/credentials"] == "threescale" 규칙과 일치합니다.
  2. 서비스를 통합하기 위해 대상 워크로드 배포에서 위의 레이블을 PodTemplateSpec에 추가합니다. threescale 값은 생성된 처리기의 이름을 나타냅니다. 이 처리기에서는 3scale를 호출하는 데 필요한 액세스 토큰을 저장합니다.
  3. destination.labels["service-mesh.3scale.net/service-id"] == "replace-me" 레이블을 워크로드에 추가하여 요청 시 인스턴스를 통해 서비스 ID를 어댑터에 전달합니다.

1.20.2. 3scale로 통합 설정 구성

3scale 통합 설정을 구성하려면 다음 절차를 따르십시오.

참고

3scale SaaS 고객의 경우, Red Hat OpenShift Service Mesh는 조Early Access 프로그램의 일부로 활성화됩니다.

프로세스

  1. [your_API_name] → 통합으로 이동합니다.
  2. Settings(설정 )를 클릭합니다.
  3. Deployment (배포)에서 Istio 옵션을 선택합니다.

    • Authentication (인증)의 API Key(user_key) 옵션은 기본적으로 선택됩니다.
  4. Update Product (제품 업데이트)를 클릭하여 선택을 저장합니다.
  5. Configuration(구성)을 클릭합니다.
  6. Update Configuration (구성 업데이트)을 클릭합니다.

1.20.3. 캐싱 동작

3scale System API의 응답은 기본적으로 어댑터 내에서 캐시됩니다. 항목이 cacheTTLSeconds 값보다 오래되면 캐시에서 제거됩니다. 또한 기본적으로 캐시된 항목의 자동 새로 고침은 cacheRefreshSeconds 값에 따라 만료되기 몇 초 전에 시도됩니다. 이 값을 cacheTTLSeconds 값보다 높게 설정하여 자동 새로 고침을 비활성화할 수 있습니다.

cacheEntriesMax를 양수가 아닌 값으로 설정하여 캐싱을 완전히 비활성화할 수 있습니다.

새로 고침 프로세스를 사용하면 호스트가 연결할 수 없는 캐시된 값은 만료가 지나면 제거되기 전에 다시 시도됩니다.

1.20.4. 요청 인증

이 릴리스에서는 다음 인증 방법을 지원합니다.

  • 표준 API 키: 식별자와 시크릿 토큰으로 작동하는 임의의 단일 문자열 또는 해시입니다.
  • 애플리케이션 식별자 및 키 쌍: 변경 불가능한 식별자 및 변경 가능한 시크릿 키 문자열입니다.
  • OpenID 인증 방법: JSON 웹 토큰에서 구문 분석된 클라이언트 ID 문자열입니다.

1.20.4.1. 인증 패턴 적용

인증 동작을 구성하려면 다음 인증 방법 예제에 설명된 인스턴스 사용자 정의 리소스를 수정합니다. 다음에서 인증 자격 증명을 허용할 수 있습니다.

  • 요청 헤더
  • 요청 매개변수
  • 요청 헤더 및 쿼리 매개변수 둘 다
참고

헤더에서 값을 지정하는 경우 소문자여야 합니다. 예를 들어 User-Key로 헤더를 보내려면 구성에서 request.headers["user-key"]로 참조되어야 합니다.

1.20.4.1.1. API 키 인증 방법

서비스 메시는 subject 사용자 정의 리소스 매개변수의 user 옵션에 지정된 대로 쿼리 매개변수 및 요청 헤더에서 API 키를 찾습니다. 사용자 정의 리소스 파일에 지정된 순서로 값을 확인합니다. 원하지 않는 옵션을 생략하여 API 키 검색을 쿼리 매개변수 또는 요청 헤더로 제한할 수 있습니다.

이 예에서 서비스 메시는 user_key 쿼리 매개변수에서 API 키를 찾습니다. API 키가 쿼리 매개변수에 없으면 서비스 메시가 user-key 헤더를 확인합니다.

API 키 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

어댑터가 다른 쿼리 매개변수 또는 요청 헤더를 검사하도록 하려면 이름을 적절하게 변경합니다. 예를 들어 "key"라는 쿼리 매개변수에서 API 키를 확인하려면 request.query_params["user_key"]request.query_params["key"]로 변경합니다.

1.20.4.1.2. 애플리케이션 ID 및 애플리케이션 키 쌍 인증 방법

서비스 메시는 subject 사용자 정의 리소스 매개변수의 properties 옵션에 지정된 대로 쿼리 매개변수 및 요청 헤더에서 애플리케이션 ID와 애플리케이션 키를 찾습니다. 애플리케이션 키는 선택 사항입니다. 사용자 정의 리소스 파일에 지정된 순서로 값을 확인합니다. 원하지 않는 옵션을 제외하여 자격 증명 검색을 쿼리 매개변수 또는 요청 헤더로 제한할 수 있습니다.

이 예에서 서비스 메시는 쿼리 매개변수의 애플리케이션 ID 및 애플리케이션 키를 먼저 찾고 필요한 경우 요청 헤더로 이동합니다.

애플리케이션 ID 및 애플리케이션 키 쌍 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

어댑터가 다른 쿼리 매개변수 또는 요청 헤더를 검사하도록 하려면 이름을 적절하게 변경합니다. 예를 들어, identification라는 쿼리 매개변수의 애플리케이션 ID를 확인하려면 request.query_params["app_id"]request.query_params["identification"]로 변경합니다.

1.20.4.1.3. OpenID 인증 방법

OIDC(OpenID Connect) 인증 방법을 사용하려면 subject 필드에서 properties 값을 사용하여 client_id 또는 필요한 경우 app_key로 설정할 수 있습니다.

이전에 설명된 방법을 사용하여 이 오브젝트를 조작할 수 있습니다. 아래 설정 예에서 클라이언트 식별자(애플리케이션 ID)는 azp 레이블 아래에 있는 JSON 웹 토큰(JWT)에서 구문 분석됩니다. 필요에 따라 수정할 수 있습니다.

OpenID 인증 방법 예

  apiVersion: "config.istio.io/v1alpha2"
  kind: instance
  metadata:
    name: threescale-authorization
  spec:
    template: threescale-authorization
    params:
      Subject:
  properties:
          app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
          client_id: request.auth.claims["azp"] | ""
      action:
        path: request.url_path
        method: request.method | "get"
          service: destination.labels["service-mesh.3scale.net/service-id"] | ""

이 통합이 올바르게 작동하려면 클라이언트가 ID 공급자(IdP)에서 생성되도록 OIDC를 3scale에서 수행해야 합니다. 해당 서비스와 동일한 네임스페이스에서 보호하려는 서비스에 대해 요청 권한 부여를 생성해야 합니다. JWT는 요청의 Authorization 헤더로 전달됩니다.

아래에 정의된 샘플 RequestAuthentication에서 issuer, jwksUri, selector를 적절하게 대체합니다.

OpenID 정책 예

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: jwt-example
  namespace: bookinfo
spec:
  selector:
    matchLabels:
      app: productpage
  jwtRules:
  - issuer: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak
    jwksUri: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak/protocol/openid-connect/certs

1.20.4.1.4. 하이브리드 인증 방법

특정 인증 방법을 적용하지 않도록 선택하고, 두 방법에 대해 유효한 자격 증명을 수락할 수 있습니다. API 키와 애플리케이션 ID/애플리케이션 키 쌍이 모두 제공되면 서비스 메시는 API 키를 사용합니다.

이 예제에서 서비스 메시는 쿼리 매개변수에서 API 키를 확인한 다음 요청 헤더를 확인합니다. API 키가 없는 경우 쿼리 매개변수에서 애플리케이션 ID와 키를 확인한 다음 요청 헤더를 확인합니다.

하이브리드 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] |
      properties:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
        client_id: request.auth.claims["azp"] | ""
    action:
      path: request.url_path
      method: request.method | "get"
        service: destination.labels["service-mesh.3scale.net/service-id"] | ""

1.20.5. 3scale Adapter 지표

기본적으로 어댑터는 /metrics 끝점의 포트 8080에서 공개되는 다양한 Prometheus 지표를 보고합니다. 이러한 지표는 어댑터와 3scale 간의 상호 작용 수행 방식에 대한 인사이트를 제공합니다. 이 서비스는 Prometheus에서 자동으로 검색 및 스크랩하도록 레이블이 지정됩니다.

참고

Service Mesh 1.x의 이전 릴리스 이후 3scale Istio 어댑터 지표에 호환되지 않는 변경 사항이 있습니다.

Prometheus에서 지표는 백엔드 캐시에 대해 한 번의 추가로 이름이 변경되었으므로, Service Mesh 2.0부터 다음 지표가 존재합니다.

표 1.8. Prometheus 지표

지표유형설명

threescale_latency

히스토그램

어댑터와 3scale 간의 대기 시간을 요청합니다.

threescale_http_total

카운터

3scale 백엔드에 대한 요청의 HTTP 상태 응답 코드입니다.

threescale_system_cache_hits

카운터

구성 캐시에서 가져온 3scale 시스템에 대한 총 요청 수입니다.

threescale_backend_cache_hits

카운터

백엔드 캐시에서 가져온 3scale 백엔드에 대한 총 요청 수입니다.

1.20.6. 3scale 백엔드 캐시

3scale 백엔드 캐시는 3scale Service Management API의 클라이언트에 대한 권한 부여 및 보고 캐시를 제공합니다. 이 캐시는 어댑터에 내장되어 관리자가 절충을 기꺼이 받아들인다는 가정하에 특정 상황에서 응답 대기 시간을 줄일 수 있습니다.

참고

3scale 백엔드 캐시는 기본적으로 비활성화되어 있습니다. 3scale 백엔드 캐시 기능은 낮은 대기 시간과 프로세서 및 메모리의 더 많은 리소스 소비를 위해 마지막 플러시를 수행한 후 속도 제한 및 잠재적 손실에서 부정확하게 사용됩니다.

1.20.6.1. 백엔드 캐시 활성화의 이점

다음은 백엔드 캐시 활성화의 몇 가지 이점입니다.

  • 3scale Istio Adapter에서 관리하는 서비스에 액세스하는 동안 대기 시간이 길면 백엔드 캐시를 활성화합니다.
  • 백엔드 캐시를 활성화하면 어댑터가 3scale API 관리자의 요청 승인을 계속 확인하지 못하므로 대기 시간이 줄어듭니다.

    • 이렇게 하면 3scale Istio Adapter가 3scale API 관리자에게 권한 부여를 요청하기 전에 저장 및 재사용할 수 있도록 3scale 권한 부여의 메모리 내 캐시가 생성됩니다. 권한 부여는 승인 또는 거부에 소요되는 시간이 훨씬 짧습니다.
  • 백엔드 캐싱은 3scale Istio Adapter를 실행하는 서비스 메시와 다른 지리적 위치에서 3scale API 관리자를 호스팅할 때 유용합니다.

    • 일반적으로 3scale Hosted(SaaS) 플랫폼과 관련이 있지만 사용자가 다른 지리적 위치나 다른 가용성 영역에 있는 다른 클러스터에서 3scale API 관리자를 호스팅하거나 네트워크 오버헤드가 3scale API 관리자의 눈에 띄는 경우도 있습니다.

1.20.6.2. 대기 시간을 줄이기 위한 절충

다음은 대기 시간을 더 줄이기 위한 절충안입니다.

  • 플러시가 발생할 때마다 3scale 어댑터의 권한 부여 상태 업데이트.

    • 즉, 두 개 이상의 어댑터 인스턴스가 플러시 간격 간에 부정확함을 발생시킵니다.
    • 제한을 초과하고 비정상적인 동작을 유발하는 요청이 너무 빈번하게 허용될 가능성이 커져, 각 요청을 처리하는 어댑터에 따라 어떤 요청은 통과하고, 어떤 요청은 통과하지 않습니다.
  • 데이터를 플러시하고 권한 부여 정보를 업데이트할 수 없는 어댑터 캐시는 API 관리자에게 해당 정보를 보고하지 않고 종료되거나 중단될 수 있습니다.
  • API 관리자에 연결할 때 네트워크 연결 문제로 인해 어댑터 캐시가 요청 허용/거부 여부를 결정할 수 없는 경우 페일오픈 또는 페일클로즈 정책이 적용됩니다.
  • 일반적으로 어댑터를 부팅한 직후나 연결이 장기간 끊긴 뒤에 캐시 누락이 발생하면, API 관리자에게 쿼리하기 위해 대기 시간이 늘어납니다.
  • 어댑터 캐시는 활성화된 캐시가 없을 때보다 컴퓨팅 권한 부여에 훨씬 더 많은 작업을 수행해야 프로세서 리소스에 부담이 됩니다.
  • 메모리 요구 사항은 캐시로 관리되는 제한, 애플리케이션 및 서비스 조합에 비례하여 증가합니다.

1.20.6.3. 백엔드 캐시 구성 설정

다음 포인트는 백엔드 캐시 구성 설정을 설명합니다.

  • 3scale 구성 옵션에서 백엔드 캐시를 구성하는 설정을 찾습니다.
  • 마지막 3가지 설정에서 백엔드 캐시 활성화를 제어합니다.

    • PARAM_USE_CACHE_BACKEND - 백엔드 캐시를 활성화하려면 true로 설정합니다.
    • PARAM_BACKEND_CACHE_FLUSH_INTERVAL_SECONDS - 캐시 데이터를 API 관리자에 플러시하려는 연속 시도 사이의 시간(초)을 설정합니다.
    • PARAM_BACKEND_CACHE_POLICY_FAIL_CLOSED - 캐시 데이터가 충분하지 않고 3scale API 관리자에 연결할 수 없는 경우 서비스 요청을 허용/열기 또는 거부/종료 여부를 설정합니다.

1.20.7. 3scale Istio Adapter APIcast 에뮬레이션

3scale Istio Adapter는 다음과 같은 상태가 발생하는 경우 APIcast를 수행합니다.

  • 요청이 정의된 매핑 규칙과 일치할 수 없는 경우 반환되는 HTTP 코드는 404 Not Found입니다. 이전에는 403 Forbidden이었습니다.
  • 제한을 초과하여 요청이 거부되면 반환된 HTTP 코드는 429 Too Many Requests입니다. 이전에는 403 Forbidden이었습니다.
  • CLI를 통해 기본 템플릿을 생성할 때 헤더에 대시 대신 밑줄을 사용합니다(예: user-key 대신 user_key).

1.20.8. 3scale Istio 어댑터 확인

3scale Istio 어댑터가 예상대로 작동하는지 확인해야 할 수 있습니다. 어댑터가 작동하지 않는 경우 다음 단계를 사용하여 문제를 해결합니다.

프로세스

  1. 컨트롤 플레인 네임스페이스에서 3scale-adapter Pod가 실행 중인지 확인합니다.

    $ oc get pods -n <istio-system>
  2. 3scale-adapter Pod에서 버전과 같이 자체 부팅에 대한 정보를 출력했는지 확인합니다.

    $ oc logs <istio-system>
  3. 3scale 어댑터 통합으로 보호되는 서비스에 대한 요청을 수행할 때 항상 올바른 자격 증명이 없는 요청을 시도하여 실패하는지 확인합니다. 3scale 어댑터 로그를 확인하여 추가 정보를 수집합니다.

1.20.9. 3scale Istio 어댑터 문제 해결 체크리스트

3scale Istio 어댑터를 설치하는 관리자는 통합이 제대로 작동하지 않을 수 있는 여러 시나리오가 있습니다. 다음 목록을 사용하여 설치 문제를 해결합니다.

  • 잘못된 YAML 들여쓰기.
  • 누락된 YAML 섹션.
  • YAML 변경 사항을 클러스터에 적용하는 것을 잊어버리셨습니까.
  • service-mesh.3scale.net/credentials 키를 사용하여 서비스 워크로드의 레이블을 지정하는 것을 잊어버리십시오.
  • 서비스 워크로드에 service_id가 포함되지 않은 핸들러를 사용할 때 service-mesh.3scale.net/service-id 레이블을 지정하는 것을 잊어서 계정당 재사용할 수 있습니다.
  • Rule 사용자 지정 리소스는 잘못된 핸들러 또는 인스턴스 사용자 지정 리소스를 가리키거나 참조에 해당 네임스페이스 접미사가 없습니다.
  • Rule 사용자 정의 리소스 일치 섹션은 구성 중인 서비스와 일치하지 않거나 현재 실행 중이거나 존재하지 않는 대상 워크로드를 가리킬 수 없습니다.
  • 핸들러의 3scale 관리 포털의 잘못된 액세스 토큰 또는 URL입니다.
  • 인스턴스 사용자 정의 리소스의 params/subject/properties 섹션은 쿼리 매개 변수, 헤더 및 권한 부여 클레임과 같은 잘못된 위치를 지정하기 때문에 app_id, app_key 또는 client_id에 대한 올바른 매개 변수를 나열하지 못합니다.
  • 실제로 어댑터 컨테이너 이미지에 있음을 인식하지 않고 구성 생성기를 사용하지 못하고 oc exec를 호출해야 합니다.

1.21. Uninstalling Red Hat OpenShift Service Mesh

기존 OpenShift Container Platform 인스턴스에서 Red Hat OpenShift Service Mesh를 설치 제거하고 해당 리소스를 제거하려면 컨트롤 플레인을 삭제하고 Operator를 삭제하고 명령을 실행하여 일부 리소스를 수동으로 제거해야 합니다.

1.21.1. Red Hat OpenShift Service Mesh Control Plane 제거

기존 OpenShift Container Platform 인스턴스에서 Service Mesh를 설치 제거하려면 먼저 컨트롤 플레인 및 Operator를 삭제해야 합니다. 그런 다음 명령을 실행하여 남은 리소스를 수동으로 제거해야 합니다.

1.21.1.1. 웹 콘솔에서 컨트롤 플레인 제거

웹 콘솔을 사용하여 Red Hat OpenShift Service Mesh Control Plane을 제거할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. 제공된 API에서 Service Mesh Control Plane 을 클릭합니다.
  5. ServiceMeshControlPlane 메뉴 kebab 를 클릭합니다.
  6. Service Mesh Control Plane 삭제를 클릭합니다.
  7. 확인 대화 상자에서 삭제를 클릭하여 ServiceMeshControlPlane을 삭제합니다.

1.21.1.2. CLI에서 컨트롤 플레인 제거

CLI를 사용하여 Red Hat OpenShift Service Mesh Control Plane을 제거할 수 있습니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. 이 명령을 실행하여 설치된 ServiceMeshControlPlane의 이름을 검색합니다.

    $ oc get smcp -n istio-system
  3. <name_of_custom_resource>을 이전 명령의 출력으로 바꾸고, 이 명령을 실행하여 사용자 정의 리소스를 삭제합니다.

    $ oc delete smcp -n istio-system <name_of_custom_resource>

1.21.2. 설치된 Operator 제거

Red Hat OpenShift Service Mesh를 성공적으로 제거하려면 Operator를 제거해야 합니다. Red Hat OpenShift Service Mesh Operator를 제거한 후 Kiali Operator, Jaeger Operator 및 OpenShift Elasticsearch Operator를 제거해야 합니다.

1.21.2.1. Operator 제거

Red Hat OpenShift Service Mesh를 구성하는 Operator를 제거하려면 다음 절차를 따르십시오. 다음 각 Operator에 대해 단계를 반복합니다.

  • Red Hat OpenShift Service Mesh
  • Kiali
  • Jaeger
  • OpenShift Elasticsearch

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operator설치된 Operator 페이지에서 스크롤하거나 이름별 필터링에 키워드를 입력하여 각 Operator를 찾습니다. 그런 다음 Operator 이름을 클릭합니다.
  3. Operator 세부 정보 페이지의 작업 메뉴에서 Operator 설치 제거를 선택합니다. 프롬프트에 따라 각 Operator를 제거합니다.

1.21.3. Operator 리소스 정리

OpenShift 콘솔을 사용하여 Red Hat OpenShift Service Mesh Operator를 제거한 후 남아 있는 리소스를 수동으로 제거할 수 있습니다.

사전 요구 사항

  • 클러스터 관리 권한이 있는 계정. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 클러스터 관리자로 로그인합니다.
  2. Operator를 제거한 후 다음 명령을 실행하여 리소스를 정리합니다. 서비스 메시 없이 Jaeger를 독립형 서비스로 계속 사용하려면 Jaeger 리소스를 삭제하지 마십시오.

    참고

    Openshift Elasticsearch Operator는 기본적으로 openshift-operators-redhat에 설치됩니다. 다른 Operator는 기본적으로 openshift-operators 네임스페이스에 설치됩니다. 다른 네임스페이스에 Operator를 설치한 경우 openshift-operators를 Red Hat OpenShift Service Mesh Operator가 설치된 프로젝트의 이름으로 교체합니다.

    $ oc delete validatingwebhookconfiguration/openshift-operators.servicemesh-resources.maistra.io
    $ oc delete mutatingwebhookconfigurations/openshift-operators.servicemesh-resources.maistra.io
    $ oc delete svc maistra-admission-controller -n openshift-operators
    $ oc delete -n openshift-operators daemonset/istio-node
    $ oc delete clusterrole/istio-admin clusterrole/istio-cni clusterrolebinding/istio-cni
    $ oc delete clusterrole istio-view istio-edit
    $ oc delete clusterrole jaegers.jaegertracing.io-v1-admin jaegers.jaegertracing.io-v1-crdview jaegers.jaegertracing.io-v1-edit jaegers.jaegertracing.io-v1-view
    $ oc get crds -o name | grep '.*\.istio\.io' | xargs -r -n 1 oc delete
    $ oc get crds -o name | grep '.*\.maistra\.io' | xargs -r -n 1 oc delete
    $ oc get crds -o name | grep '.*\.kiali\.io' | xargs -r -n 1 oc delete
    $ oc delete crds jaegers.jaegertracing.io
    $ oc delete secret -n openshift-operators maistra-operator-serving-cert
    $ oc delete cm -n openshift-operators maistra-operator-cabundle

1.22. 구성 참조

1.22.1. 컨트롤 플레인 매개변수

다음 표에는 ServiceMeshControlPlane 리소스의 최상위 매개변수가 나열되어 있습니다.

표 1.9. ServiceMeshControlPlane 리소스 매개변수

이름설명유형

apiVersion

APIVersion은 버전이 지정된 이 오브젝트 표현의 스키마를 정의합니다. 서버는 인식된 스키마를 최신 내부 값으로 변환해야 하며, 인식되지 않는 값을 거부할 수 있습니다. ServiceMeshControlPlane 버전 2.0의 값은 maistra.io/v2입니다.

ServiceMeshControlPlane 버전 2.0의 값은 maistra.io/v2입니다.

kind

kind는 이 오브젝트가 나타내는 REST 리소스를 나타내는 문자열 값입니다.

ServiceMeshControlPlane은 ServiceMeshControlPlane에 유효한 유일한 값입니다.

metadata

ServiceMeshControlPlane 인스턴스에 대한 메타데이터입니다. 컨트롤 플레인 설치의 이름을 지정하여 작업을 추적할 수 있습니다(예: basic ).

string

spec

ServiceMeshControlPlane의 원하는 상태 사양입니다. 여기에는 컨트롤 플레인을 구성하는 모든 구성 요소에 대한 구성 옵션이 포함됩니다.

자세한 내용은 표 2를 참조하십시오.

status

ServiceMeshControlPlane의 현재 상태와 컨트롤 플레인을 구성하는 구성 요소입니다.

자세한 내용은 표 3을 참조하십시오.

다음 표에는 ServiceMeshControlPlane 리소스의 사양이 나열되어 있습니다. 이러한 매개변수를 변경하면 Red Hat OpenShift Service Mesh 구성 요소가 구성됩니다.

표 1.10. ServiceMeshControlPlane 리소스 사양

이름설명구성 가능한 매개변수

addons

addons 매개변수는 시각화 또는 지표 스토리지와 같은 핵심 컨트롤 플레인 구성 요소 이외의 추가 기능을 구성합니다.

3scale, grafana, jaeger, kiali, prometheus.

cluster

cluster 매개변수는 클러스터의 일반 구성(예: 클러스터 이름, 네트워크 이름, 다중 클러스터, 메시 확장 등)을 설정합니다.

meshExpansion, multiCluster, name, network

gateways

gateways 매개변수를 사용하여 메시에 대한 수신 및 송신 게이트웨이를 구성합니다.

enabled, additionalEgress, additionalIngress, egress, ingress, openshiftRoute

general

general 매개변수는 다른 곳에 적합하지 않은 일반 컨트롤 플레인 구성을 나타냅니다.

logging, validationMessages

policy

policy 매개변수를 사용하여 컨트롤 플레인에 대한 정책 검사를 구성합니다. spec.policy.enabledtrue로 설정하여 정책 검사를 활성화할 수 있습니다.

mixer remote 또는 type. typeIstiod, Mixer 또는 None으로 설정할 수 있습니다.

profiles

profiles 매개변수를 사용하여 기본값에 적용할 ServiceMeshControlPlane 프로필을 선택합니다.

default

proxy

proxy 매개변수를 사용하여 사이드카의 기본 동작을 설정합니다.

accessLogging, adminPort, concurrency, envoyMetricsService

runtime

runtime 매개변수를 사용하여 컨트롤 플레인 구성 요소를 구성합니다.

components, defaults

보안

security 매개변수를 사용하여 컨트롤 플레인에 대한 보안 측면을 구성합니다.

certificateAuthority, controlPlane, identity, dataPlane, trust

techPreview

techPreview 매개 변수를 사용하면 기술 프리뷰에 있는 기능에 조기 액세스할 수 있습니다.

해당 없음

telemetry

spec.mixer.telemetry.enabledtrue로 설정되면 Telemetry가 활성화됩니다.

mixer, remote, type. typeIstiod, Mixer 또는 None으로 설정할 수 있습니다.

tracing

tracing 매개변수를 사용하여 메시의 분산 추적을 활성화합니다.

sampling, type. typeJaeger 또는 None으로 설정할 수 있습니다.

version

version 매개변수를 사용하여 설치할 컨트롤 플레인의 Maistra 버전을 지정합니다. 비어 있는 버전으로 ServiceMeshControlPlane을 생성할 때 승인 Webhook는 버전을 현재 버전으로 설정합니다. 빈 버전이 있는 새로운 ServiceMeshControlPlanesv2.0으로 설정됩니다. 빈 버전이 있는 기존 ServiceMeshControlPlanes는 설정을 유지합니다.

문자열

ControlPlaneStatus는 서비스 메시의 현재 상태를 나타냅니다.

표 1.11. ServiceMeshControlPlane 리소스 ControlPlaneStatus

이름설명유형

annotations

annotations 매개변수는 ServiceMeshControlPlane에서 배포한 구성 요소 수와 같이 일반적으로 중복되는 상태 정보를 저장합니다. 이러한 상태는 아직 JSONPath 표현식에서 오브젝트를 셀 수 없는 oc 명령줄 도구에서 사용됩니다.

구성 불가능

conditions

오브젝트의 현재 상태에 대해 사용 가능한 최신 관찰을 나타냅니다. Reconciled는 Operator가 ServiceMeshControlPlane 리소스의 구성을 사용하여 배포된 구성 요소의 실제 상태를 조정했는지 여부를 나타냅니다. Installed는 컨트롤 플레인이 설치되었는지를 나타냅니다. Ready는 모든 컨트롤 플레인 구성 요소가 준비되었는지를 나타냅니다.

string

components

배포된 각 컨트롤 플레인 구성 요소의 상태를 표시합니다.

문자열

appliedSpec

모든 프로필이 적용된 후 구성 옵션의 결과 사양입니다.

ControlPlaneSpec

appliedValues

차트를 생성하는 데 사용되는 결과 values.yaml입니다.

ControlPlaneSpec

chartVersion

이 리소스를 위해 마지막으로 처리된 차트의 버전입니다.

문자열

observedGeneration

가장 최근 조정 중에 컨트롤러가 관찰한 생성입니다. 상태의 정보는 이 특정 오브젝트 생성과 관련이 있습니다. status.conditionsstatus.observedGeneration 필드가 metadata.generation과 일치하지 않는 경우 최신 상태가 아닙니다.

정수

operatorVersion

이 리소스를 마지막으로 처리하는 Operator의 버전입니다.

문자열

readiness

구성 요소 및 소유 리소스의 준비 상태입니다.

string

이 예제 ServiceMeshControlPlane 정의에는 지원되는 모든 매개변수가 포함되어 있습니다.

ServiceMeshControlPlane 리소스 예

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  proxy:
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 500m
        memory: 128Mi
  tracing:
    type: Jaeger
  gateways:
    ingress: # istio-ingressgateway
      service:
        type: ClusterIP
        ports:
        - name: status-port
          port: 15020
        - name: http2
          port: 80
          targetPort: 8080
        - name: https
          port: 443
          targetPort: 8443
      meshExpansionPorts: []
    egress: # istio-egressgateway
      service:
        type: ClusterIP
        ports:
        - name: status-port
          port: 15020
        - name: http2
          port: 80
          targetPort: 8080
        - name: https
          port: 443
          targetPort: 8443
    additionalIngress:
      some-other-ingress-gateway: {}
    additionalEgress:
      some-other-egress-gateway: {}

  policy:
    type: Mixer
    mixer: # only applies if policy.type: Mixer
      enableChecks: true
      failOpen: false

  telemetry:
    type: Istiod # or Mixer
    mixer: # only applies if telemetry.type: Mixer, for v1 telemetry
      sessionAffinity: false
      batching:
        maxEntries: 100
        maxTime: 1s
      adapters:
        kubernetesenv: true
        stdio:
          enabled: true
          outputAsJSON: true
  addons:
    grafana:
      enabled: true
      install:
        config:
          env: {}
          envSecrets: {}
        service:
          ingress:
            contextPath: /grafana
            tls:
              termination: reencrypt
    kiali:
      name: kiali
      enabled: true
      install: # install kiali CR if not present
        dashboard:
          viewOnly: false
          enableGrafana: true
          enableTracing: true
          enablePrometheus: true
      service:
        ingress:
          contextPath: /kiali
    jaeger:
      name: jaeger
      install:
        storage:
          type: Elasticsearch # or Memory
          memory:
            maxTraces: 100000
          elasticsearch:
            nodeCount: 3
            storage: {}
            redundancyPolicy: SingleRedundancy
            indexCleaner: {}
        ingress: {} # jaeger ingress configuration
  runtime:
    components:
      pilot:
        deployment:
          replicas: 2
        pod:
          affinity: {}
        container:
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 128Mi
      grafana:
        deployment: {}
        pod: {}
      kiali:
        deployment: {}
        pod: {}

1.22.2. 3scale 구성

다음 표는 ServiceMeshControlPlane 리소스의 3scale Istio Adapter에 대한 매개변수를 설명합니다.

3scale 매개변수 예

spec:
  addons:
    3Scale:
      enabled: false
      PARAM_THREESCALE_LISTEN_ADDR: 3333
      PARAM_THREESCALE_LOG_LEVEL: info
      PARAM_THREESCALE_LOG_JSON: true
      PARAM_THREESCALE_LOG_GRPC: false
      PARAM_THREESCALE_REPORT_METRICS: true
      PARAM_THREESCALE_METRICS_PORT: 8080
      PARAM_THREESCALE_CACHE_TTL_SECONDS: 300
      PARAM_THREESCALE_CACHE_REFRESH_SECONDS: 180
      PARAM_THREESCALE_CACHE_ENTRIES_MAX: 1000
      PARAM_THREESCALE_CACHE_REFRESH_RETRIES: 1
      PARAM_THREESCALE_ALLOW_INSECURE_CONN: false
      PARAM_THREESCALE_CLIENT_TIMEOUT_SECONDS: 10
      PARAM_THREESCALE_GRPC_CONN_MAX_SECONDS: 60
      PARAM_USE_CACHED_BACKEND: false
      PARAM_BACKEND_CACHE_FLUSH_INTERVAL_SECONDS: 15
      PARAM_BACKEND_CACHE_POLICY_FAIL_CLOSED: true

표 1.12. 3scale 매개변수

매개변수설명기본값

enabled

3scale 어댑터 사용 여부

true/false

false

PARAM_THREESCALE_LISTEN_ADDR

gRPC 서버의 수신 주소를 설정

유효한 포트 번호

3333

PARAM_THREESCALE_LOG_LEVEL

최소 로그 출력 수준을 설정합니다.

debug, info, warn, error 또는 none

info

PARAM_THREESCALE_LOG_JSON

로그 형식이 JSON인지 여부를 제어

true/false

true

PARAM_THREESCALE_LOG_GRPC

로그에 gRPC 정보가 포함되었는지 여부를 제어

true/false

true

PARAM_THREESCALE_REPORT_METRICS

3scale 시스템 및 백엔드 지표가 수집되어 Prometheus에 보고되는지 제어

true/false

true

PARAM_THREESCALE_METRICS_PORT

3scale /metrics 끝점을 스크랩할 수 있는 포트를 설정

유효한 포트 번호

8080

PARAM_THREESCALE_CACHE_TTL_SECONDS

캐시에서 만료된 항목을 제거하기 전에 대기하는 시간(초)

시간(초)

300

PARAM_THREESCALE_CACHE_REFRESH_SECONDS

캐시 요소를 새로 고침하려고 할 때 만료되기 전 시간

시간(초)

180

PARAM_THREESCALE_CACHE_ENTRIES_MAX

언제든지 캐시에 저장할 수 있는 항목의 최대 수. 캐싱을 비활성화하려면 0으로 설정합니다.

유효한 번호

1000

PARAM_THREESCALE_CACHE_REFRESH_RETRIES

캐시 업데이트 루프 중에 연결할 수 없는 호스트가 재시도되는 횟수

유효한 번호

1

PARAM_THREESCALE_ALLOW_INSECURE_CONN

3scale API를 호출할 때 인증서 확인을 건너뛸 수 있습니다. 이 설정 사용은 권장되지 않습니다.

true/false

false

PARAM_THREESCALE_CLIENT_TIMEOUT_SECONDS

3scale System 및 백엔드에 대한 요청을 종료하기 전 대기하는 시간(초)을 설정합니다.

시간(초)

10

PARAM_THREESCALE_GRPC_CONN_MAX_SECONDS

연결이 닫히기 전에 연결할 수 있는 최대 시간(초)(+/-10% jitter)을 설정합니다.

시간(초)

60

PARAM_USE_CACHE_BACKEND

true인 경우, 권한 부여 요청에 대해 메모리 내 apisonator 캐시를 생성합니다.

true/false

false

PARAM_BACKEND_CACHE_FLUSH_INTERVAL_SECONDS

백엔드 캐시가 활성화된 경우 3scale에 대해 캐시를 플러싱하는 간격(초)을 설정합니다.

시간(초)

15

PARAM_BACKEND_CACHE_POLICY_FAIL_CLOSED

백엔드 캐시가 권한 부여 데이터를 검색할 수 없을 때마다 요청을 거부(닫기)할지, 허용할지(열기) 여부

true/false

true

1.22.3. 자세한 정보

ServiceMeshControlPlane에서 기능을 구성하는 방법에 대한 자세한 내용은 다음 링크를 참조하십시오.

2장. Service Mesh 1.x

2.1. 서비스 메시 릴리스 노트

2.1.1. Red Hat OpenShift Service Mesh 소개

Red Hat OpenShift Service Mesh는 애플리케이션에서 중앙 집중식 제어 지점을 생성하여 마이크로 서비스 아키텍처에서 다양한 문제를 해결합니다. 애플리케이션 코드를 변경하지 않고도 기존 분산 애플리케이션에 투명한 계층을 추가합니다.

마이크로 서비스 아키텍처는 엔터프라이즈 애플리케이션의 작업을 모듈식 서비스로 분할하므로 확장 및 유지 관리를 더 쉽게 수행할 수 있습니다. 그러나 마이크로 서비스 아키텍처에 구축된 엔터프라이즈 애플리케이션이 크기와 복잡성이 증가함에 따라 이해 및 관리하기가 어려워집니다. 서비스 메시는 서비스 간 트래픽을 캡처하거나 가로채어 이러한 아키텍처 문제를 해결할 수 있으며 다른 서비스에 대한 새 요청을 수정, 리디렉션 또는 생성할 수 있습니다.

오픈 소스 Istio 프로젝트를 기반으로 하는 서비스 메시는 검색, 부하 분산, 서비스 간 인증, 오류 복구, 지표 및 모니터링을 제공하는 배포된 서비스의 네트워크를 쉽게 생성할 수 있는 방법을 제공합니다. 또한 서비스 메시는 A/B 테스트, 카나리 릴리스, 속도 제한, 액세스 제어, 엔드 투 엔드 인증을 포함한 복잡한 운영 기능을 제공합니다.

2.1.1.1. 보다 포괄적인 오픈 소스 구현

Red Hat은 코드, 문서 및 웹 속성에서 문제를 야기할 수 있는 언어를 변경하기 위해 최선을 다하고 있습니다. 이는 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist)의 네 가지 용어의 변경 작업에서부터 시작합니다. 이러한 변경 작업은 향후 여러 릴리스에 대해 단계적으로 구현될 예정입니다. 자세한 내용은 Red Hat CTO Chris Wright의 메시지에서 참조하십시오.

2.1.2. 지원 요청

이 문서에 설명된 절차 또는 일반적으로 OpenShift Container Platform에 문제가 발생하는 경우 Red Hat 고객 포털에 액세스하십시오. 고객 포털에서 다음을 수행할 수 있습니다.

  • Red Hat 제품과 관련된 기사 및 솔루션에 대한 Red Hat 지식베이스를 검색하거나 살펴볼 수 있습니다.
  • Red Hat 지원에 대한 지원 케이스 제출할 수 있습니다.
  • 다른 제품 설명서에 액세스 가능합니다.

클러스터의 문제를 식별하기 위해 Red Hat OpenShift Cluster Manager에서 Insights를 사용할 수 있습니다. Insights는 문제에 대한 세부 정보 및 문제 해결 방법에 대한 정보를 제공합니다.

이 문서를 개선하기 위한 제안이 있거나 오류를 발견한 경우 문서 구성 요소의 OpenShift Container Platform 제품에 대한 Bugzilla 보고서를 제출하십시오. 섹션 이름 및 OpenShift Container Platform 버전과 같은 구체적인 정보를 제공합니다.

지원 사례를 여는 경우 클러스터에 대한 디버깅 정보를 Red Hat 지원에 제공하면 도움이 됩니다.

must-gather 도구를 사용하면 가상 머신 및 Red Hat OpenShift Service Mesh 관련 기타 데이터를 포함하여 OpenShift Container Platform 클러스터에 대한 진단 정보를 수집할 수 있습니다.

즉각 지원을 받을 수 있도록 OpenShift Container Platform 및 Red Hat OpenShift Service Mesh 둘 다에 대한 진단 정보를 제공하십시오.

2.1.2.1. must-gather 도구 정보

oc adm must-gather CLI 명령은 다음과 같이 문제를 디버깅하는 데 필요할 가능성이 높은 클러스터 정보를 수집합니다.

  • 리소스 정의
  • 감사 로그
  • 서비스 로그

--image 인수를 포함하여 명령을 실행하는 경우 이미지를 하나 이상 지정할 수 있습니다. 이미지를 지정하면 툴에서 해당 기능 또는 제품과 관련된 데이터를 수집합니다.

oc adm must-gather를 실행하면 클러스터에 새 Pod가 생성됩니다. 해당 Pod에 대한 데이터가 수집되어 must-gather.local로 시작하는 새 디렉터리에 저장됩니다. 이 디렉터리는 현재 작업 중인 디렉터리에 생성되어 있습니다.

2.1.2.2. 사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift Container Platform CLI(oc)가 설치되어 있어야 합니다.

2.1.2.3. 서비스 메시 데이터 수집 정보

oc adm must-gather CLI 명령을 사용하면 Red Hat OpenShift Service Mesh와 연관된 기능 및 오브젝트를 포함하여 클러스터에 대한 정보를 수집할 수 있습니다.

must-gather을 사용하여 Red Hat OpenShift Service Mesh 데이터를 수집하려면 Red Hat OpenShift Service Mesh 이미지를 지정해야 합니다.

$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8

must-gather를 사용하여 특정 컨트롤 플레인 네임스페이스에 대한 Red Hat OpenShift Service Mesh 데이터를 수집하려면 Red Hat OpenShift Service Mesh 이미지 및 네임스페이스를 지정해야 합니다. 이 예에서는 <namespace>를 istio-system과 같은 컨트롤 플레인 네임스페이스로 바꿉니다.

$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8 gather <namespace>

2.1.3. Red Hat OpenShift Service Mesh 지원 구성

다음은 Red Hat OpenShift Service Mesh에 지원되는 구성입니다.

  • Red Hat OpenShift Container Platform 버전 4.x.
참고

OpenShift Online 및 OpenShift Dedicated는 Red Hat OpenShift Service Mesh에서 지원되지 않습니다.

  • 배포되지 않은 단일 OpenShift Container Platform 클러스터에 포함되어야 합니다.
  • 이번 Red Hat OpenShift Service Mesh 릴리스는 OpenShift Container Platform x86_64에서만 사용 가능합니다.
  • 이 릴리스에서는 모든 Service Mesh 구성 요소가 작동하는 OpenShift 클러스터에 포함된 구성만 지원합니다. 클러스터 외부에 있거나 멀티 클러스터 시나리오에 있는 마이크로 서비스 관리는 지원하지 않습니다.
  • 이 릴리스는 가상 머신과 같은 외부 서비스를 통합하지 않는 구성만 지원합니다.

Red Hat OpenShift Service Mesh 라이프사이클 및 지원되는 구성에 대한 자세한 내용은 지원 정책을 참조하십시오.

2.1.3.1. Red Hat OpenShift Service Mesh에서 Kiali에 지원되는 구성

  • Kiali Observation Console은 Chrome, Edge, Firefox 또는 Safari 브라우저의 두 가지 최신 버전에서만 지원됩니다.

2.1.3.2. 지원되는 Mixer 어댑터

  • 이 릴리스에서는 다음 Mixer 어댑터만 지원합니다.

    • 3scale Istio 어댑터

2.1.4. 새로운 기능

Red Hat OpenShift Service Mesh는 서비스 네트워크 전반에서 여러 주요 기능을 균일하게 제공합니다.

  • 트래픽 관리 - 서비스 간 트래픽 및 API 호출 흐름을 제어하고, 호출을 더 안정적으로 만들며, 불리한 조건에서도 네트워크를 보다 견고하게 만듭니다.
  • 서비스 ID 및 보안 - 메시에서 확인 가능한 ID로 서비스를 제공하고 다양한 수준의 신뢰도를 갖춘 네트워크를 통해 전달될 때 서비스 트래픽을 보호할 수 있는 기능을 제공합니다.
  • 정책 강화- 서비스 간 상호 작용에 조직 정책을 적용하여 액세스 정책이 시행되고 리소스가 소비자 간에 공정하게 배포되도록 합니다. 애플리케이션 코드를 변경하는 것이 아니라 메시를 구성하여 정책 변경을 수행합니다.
  • Telemetry - 서비스 간의 종속성과 트래픽 속성 및 흐름을 이해하여 문제를 신속하게 식별할 수 있는 기능을 제공합니다.

2.1.4.1. Red Hat OpenShift Service Mesh 버전 1.1.16에 포함된 구성 요소 버전

구성 요소버전

Istio

1.4.8

Jaeger

1.17.8

Kiali

1.12.16

3scale Istio 어댑터

1.0.0

2.1.4.2. Red Hat OpenShift Service Mesh 1.1.16 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.3. Red Hat OpenShift Service Mesh 1.1.15 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.4. Red Hat OpenShift Service Mesh 1.1.14 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

중요

CVE-2021-29492 및 CVE-2021-31920을 해결하려면 수동 단계가 완료되어야 합니다.

2.1.4.4.1. CVE-2021-29492 및 CVE-2021-31920에 필요한 수동 업데이트

Istio에는 여러 슬래시 또는 이스케이프된 슬래시 문자가 있는 HTTP 요청 경로(%2F' 또는 %5C' )가 경로 기반 권한 부여 규칙이 사용될 때 Istio 권한 부여 정책을 바이패스할 수 있는 원격으로 악용 가능한 취약점이 포함되어 있습니다.

예를 들어 Istio 클러스터 관리자가 경로 /admin에 있는 요청을 거부하도록 권한 부여 DENY 정책을 정의한다고 가정합니다. URL 경로에 전송된 요청이 권한 부여 정책에서 거부되지 않습니다.

RFC 3986에 따르면 슬래시가 여러 개인 경로는 기술적으로 /admin 다른 경로로 처리되어야 합니다. 그러나 일부 백엔드 서비스는 여러 슬래시를 단일 슬래시로 병합하여 URL 경로를 표준화하도록 선택합니다. 이로 인해 권한 부여 정책이 무시될 수있습니다(admin이 /admin과일치하지 않음) 사용자는 백엔드의 경로 /admin에서 리소스에 액세스할 수 있습니다. 이는 보안 문제를 나타낼 수 있습니다.

ALLOW action + notPaths 필드 또는 DENY 작업 + 경로 필드 패턴을 사용하는 권한 부여 정책이 있는 경우 클러스터는 이 취약점의 영향을 받습니다. 이러한 패턴은 예기치 않은 정책 우회에 취약합니다.

다음 경우 클러스터는 이 취약점의 영향을 받지 않습니다.

  • 권한 부여 정책이 없습니다.
  • 권한 부여 정책은 경로를 정의하지 않거나 NotPaths 필드를 정의하지 않습니다.
  • 권한 부여 정책은 ALLOW action + paths 필드 또는 DENY action + notPaths 필드 패턴을 사용합니다. 이러한 패턴은 정책 바이패스 대신 예기치 않은 거부를 유발할 수 있습니다. 이러한 경우 업그레이드는 선택 사항입니다.
참고

경로 정규화를 위한 Red Hat OpenShift Service Mesh 구성 위치는 Istio 구성과 다릅니다.

2.1.4.4.2. 경로 정규화 구성 업데이트

Istio 권한 부여 정책은 HTTP 요청의 URL 경로를 기반으로 할 수 있습니다. URI 정규화라고도 하는 path 정규화는 들어오는 요청의 경로를 수정 및 표준화하여 정규화된 경로를 표준 방식으로 처리할 수 있습니다. 구문적으로 경로 정규화 후에는 다른 경로가 동일할 수 있습니다.

Istio는 권한 부여 정책에 대해 평가하고 요청을 라우팅하기 전에 요청 경로에서 다음 정규화를 지원합니다.

표 2.1. 정규화 체계

옵션설명참고

없음

정규화는 수행되지 않습니다. Envoy가 수신한 모든 항목은 정확히 그대로 모든 백엔드 서비스에 전달됩니다.

../%2FA../b는 권한 부여 정책에 의해 평가되고 서비스로 전송됩니다.

이 설정은 CVE-2021-31920에 취약합니다.

BASE

현재 이는 Istio의 기본 설치에 사용되는 옵션입니다. 이로 인해 Envoy 프록시에normalize_path 옵션이 적용되며, 이는 추가 정규화와 함께 RFC 3986을 따라 백슬래시를 변환하여 슬래시를 전달합니다.

/a/../b는 /b로 정규화됩니다. \Da는 /da 정규화됩니다.

이 설정은 CVE-2021-31920에 취약합니다.

MERGE_SLASHES

BASE 정규화 후 슬래시가 병합됩니다.

/a//b는 /a/b로 정규화됩니다.

CVE-2021-31920을 완화하려면 이 설정으로 업데이트합니다.

DECODE_AND_MERGE_SLASHES

기본적으로 모든 트래픽을 허용할 때 가장 엄격한 설정입니다. 이 설정은 권한 부여 정책 경로를 철저하게 테스트해야 한다는 주의 사항에 따라 권장됩니다. 백분율로 인코딩된 슬래시 및 백슬래시문자(%2F,%2f,%5C%5c)는 MERGE_SLASHES 정규화 전에 / 또는 \로 디코딩됩니다.

/a%2fb는 /a/b로 정규화됩니다.

CVE-2021-31920을 완화하려면 이 설정으로 업데이트합니다. 이 설정은 더 안전하지만 애플리케이션을 중단할 수도 있습니다. 프로덕션에 배포하기 전에 애플리케이션을 테스트합니다.

정규화 알고리즘은 다음 순서로 수행됩니다.

  1. percentage-decode %2F,%2f,%5C%5c.
  2. Envoy의normalize_path 옵션에 의해 구현된 RFC 3986 및 기타 정규화입니다.
  3. 병합 슬래시.
주의

이러한 정규화 옵션은 HTTP 표준 및 일반적인 업계 사례의 권장 사항을 나타내지만 애플리케이션은 어떤 방식으로든 URL을 해석할 수 있습니다. 거부 정책을 사용할 때 애플리케이션이 작동하는 방식을 이해해야 합니다.

2.1.4.4.3. 경로 정규화 구성 예

Envoy는 백엔드 서비스의 기대치와 일치하도록 요청 경로를 표준화하여 시스템 보안에 중요한지 확인합니다. 다음 예제는 시스템을 구성하기 위한 참조로 사용할 수 있습니다. 정규화된 URL 경로 또는 ifNONE이 선택된 경우 원래 URL 경로는 다음과 같습니다.

  1. 권한 부여 정책을 확인하는 데 사용됩니다.
  2. 백엔드 애플리케이션으로 전달됩니다.

표 2.2. 설정 예

귀사의 애플리케이션…​선택…​

프록시를 사용하여 정규화를 수행합니다.

BASE,MERGE_SLASHES 또는 DECODE_AND_MERGE_SLASHES

RFC 3986을 기반으로 요청 경로를 정규화하고 슬래시를 병합하지 않습니다.

BASE

RFC 3986을 기반으로 요청 경로를 정규화하고 슬래시를 병합하지만 백분율로 인코딩된 슬래시를 디코딩하지는 않습니다.

MERGE_SLASHES

RFC 3986을 기반으로 요청 경로를 표준화하고, 백분율로 인코딩된 슬래시를 디코딩하고, 슬래시를 병합합니다.

DECODE_AND_MERGE_SLASHES

프로세스는 RFC 3986과 호환되지 않는 방식으로 경로를 요청합니다.

없음

2.1.4.4.4. 경로 정규화를 위해 SMCP 구성

Red Hat OpenShift Service Mesh에 대한 경로 정규화를 구성하려면 ServiceMeshControlPlane에서 다음을 지정합니다. 구성 예제를 사용하여 시스템 설정을 결정하는 데 도움이 됩니다.

SMCP v1 pathNormalization

spec:
  global:
    pathNormalization: <option>

2.1.4.5. Red Hat OpenShift Service Mesh 1.1.13 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.6. Red Hat OpenShift Service Mesh 1.1.12 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.7. Red Hat OpenShift Service Mesh 1.1.11 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.8. Red Hat OpenShift Service Mesh 1.1.10 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.9. Red Hat OpenShift Service Mesh 1.1.9 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.10. Red Hat OpenShift Service Mesh 1.1.8 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.11. Red Hat OpenShift Service Mesh 1.1.7 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.12. Red Hat OpenShift Service Mesh 1.1.6 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.13. Red Hat OpenShift Service Mesh 1.1.5 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

또한 이 릴리스에는 암호화 제품군 구성에 대한 지원이 추가되었습니다.

2.1.4.14. Red Hat OpenShift Service Mesh 1.1.4 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

참고

CVE-2020-8663 문제를 해결하려면 수동 단계가 완료되어야 합니다.

2.1.4.14.1. CVE-2020-8663에서 필요한 수동 업데이트

CVE-2020-8663: envoy: Resource exhaustion when accepting too many connections에 대한 수정이 다운스트림 연결에 구성 가능한 제한을 추가했습니다. 이 제한에 대한 구성 옵션은 이 취약점을 완화하도록 설정되어야 합니다.

중요

이러한 수동 단계는 Red Hat OpenShift Service Mesh의 1.1 버전을 사용하든 1.0 버전을 사용하든 이 CVE를 완화하는 데 필요합니다.

이 새로운 설정 옵션은 overload.global_downstream_max_connections라고 하며 프록시 runtime 설정으로 구성할 수 있습니다. 수신 게이트웨이에서 제한을 구성하려면 다음 단계를 수행합니다.

프로세스

  1. 다음 텍스트로 bootstrap-override.json이라는 파일을 생성하여 프록시에서 부트스트랩 템플릿을 재정의하고 디스크의 런타임 구성을 로드하도록 적용합니다.

      {
        "runtime": {
          "symlink_root": "/var/lib/istio/envoy/runtime"
        }
      }
  2. bootstrap-override.json 파일에서 시크릿을 생성하여 <SMCPnamespace>를 Service Mesh Control Plane(SMCP)을 생성한 네임스페이스로 바꿉니다.

    $  oc create secret generic -n <SMCPnamespace> gateway-bootstrap --from-file=bootstrap-override.json
  3. SMCP 구성을 업데이트하여 재정의를 활성화합니다.

    업데이트된 SMCP 구성 예 #1

    apiVersion: maistra.io/v1
    kind: ServiceMeshControlPlane
    spec:
      istio:
        gateways:
          istio-ingressgateway:
            env:
              ISTIO_BOOTSTRAP_OVERRIDE: /var/lib/istio/envoy/custom-bootstrap/bootstrap-override.json
            secretVolumes:
            - mountPath: /var/lib/istio/envoy/custom-bootstrap
              name: custom-bootstrap
              secretName: gateway-bootstrap

  4. 새 구성 옵션을 설정하려면 overload.global_downstream_max_connections 설정에 필요한 값을 보유한 시크릿을 생성합니다. 다음 예제에서는 값 10000을 사용합니다.

    $  oc create secret generic -n <SMCPnamespace> gateway-settings --from-literal=overload.global_downstream_max_connections=10000
  5. SMCP를 다시 업데이트하여 Envoy가 런타임 구성을 찾고 있는 위치에 시크릿을 다시 마운트합니다.

업데이트된 SMCP 구성 예 #2

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
spec:
  template: default
#Change the version to "v1.0" if you are on the 1.0 stream.
  version: v1.1
  istio:
    gateways:
      istio-ingressgateway:
        env:
          ISTIO_BOOTSTRAP_OVERRIDE: /var/lib/istio/envoy/custom-bootstrap/bootstrap-override.json
        secretVolumes:
        - mountPath: /var/lib/istio/envoy/custom-bootstrap
          name: custom-bootstrap
          secretName: gateway-bootstrap
        # below is the new secret mount
        - mountPath: /var/lib/istio/envoy/runtime
          name: gateway-settings
          secretName: gateway-settings

2.1.4.14.2. Elasticsearch 5에서 Elasticsearch 6으로 업그레이드

Elasticsearch 5에서 Elasticsearch 6으로 업데이트할 때 인증서 문제로 인해 Jaeger 인스턴스를 삭제한 다음 Jaeger 인스턴스를 다시 생성해야 합니다. Jaeger 인스턴스 트리거를 다시 생성하여 새 인증서 세트를 생성합니다. 영구 스토리지를 사용하는 경우, 새 Jaeger 인스턴스의 Jaeger 이름과 네임스페이스가 삭제된 Jaeger 인스턴스와 동일하다면 새 Jaeger 인스턴스에 대해 동일한 볼륨을 마운트할 수 있습니다.

Jaeger가 Red Hat Service Mesh의 일부로 설치된 경우 프로세스

  1. Jaeger 사용자 정의 리소스 파일의 이름을 결정합니다.

    $ oc get jaeger -n istio-system

    다음과 같은 내용이 표시됩니다.

    NAME     AGE
    jaeger   3d21h
  2. 생성된 사용자 정의 리소스 파일을 임시 디렉터리에 복사합니다.

    $ oc get jaeger jaeger -oyaml -n istio-system > /tmp/jaeger-cr.yaml
  3. Jaeger 인스턴스를 삭제합니다.

    $ oc delete jaeger jaeger -n istio-system
  4. 사용자 정의 리소스 파일의 사본에서 Jaeger 인스턴스를 재생성합니다.

    $ oc create -f /tmp/jaeger-cr.yaml -n istio-system
  5. 생성된 사용자 정의 리소스 파일의 사본을 삭제합니다.

    $ rm /tmp/jaeger-cr.yaml

Jaeger가 Red Hat Service Mesh의 일부로 설치되지 않은 경우 프로세스

시작하기 전에 Jaeger 사용자 정의 리소스 파일의 사본을 만듭니다.

  1. 사용자 정의 리소스 파일을 삭제하여 Jaeger 인스턴스를 삭제합니다.

    $ oc delete -f <jaeger-cr-file>

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

    $ oc delete -f jaeger-prod-elasticsearch.yaml
  2. 사용자 정의 리소스 파일의 백업 사본에서 Jaeger 인스턴스를 재생성합니다.

    $ oc create -f <jaeger-cr-file>
  3. Pod가 다시 시작되었는지 확인합니다.

    $ oc get pods -n jaeger-system -w

2.1.4.15. Red Hat OpenShift Service Mesh 1.1.3 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 CVE(Common Vulnerabilities and Exposures) 및 버그 수정을 제공합니다.

2.1.4.16. Red Hat OpenShift Service Mesh 1.1.2 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 보안 취약점을 해결합니다.

2.1.4.17. Red Hat OpenShift Service Mesh 1.1.1 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스는 연결이 중단된 설치를 지원합니다.

2.1.4.18. Red Hat OpenShift Service Mesh 1.1.0 새 기능

이번 Red Hat OpenShift Service Mesh 릴리스에는 Istio 1.4.6 및 Jaeger 1.17.1에 대한 지원이 추가되었습니다.

2.1.4.18.1. 1.0에서 1.1로 수동 업데이트

Red Hat OpenShift Service Mesh 1.0에서 1.1로 업데이트하는 경우 컨트롤 플레인 구성 요소를 새 버전으로 업데이트하기 위해 ServiceMeshControlPlane 리소스를 업데이트해야 합니다.

  1. 웹 콘솔에서 Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  2. 프로젝트 메뉴를 클릭하고 ServiceMeshControlPlane이 목록에서 배포되는 프로젝트를 선택합니다(예: istio-system).
  3. 컨트롤 플레인의 이름을 클릭합니다(예: basic-install).
  4. YAML 을 클릭하고 ServiceMeshControlPlane리소스의 spec:에 버전 필드를 추가합니다. 예를 들어 Red Hat OpenShift Service Mesh 1.1.0으로 업데이트하려면 version: v1.1을 추가합니다.
spec:
  version: v1.1
  ...

version 필드는 설치할 Service Mesh 버전을 지정하고 기본값을 최신 사용 가능한 최신 버전으로 지정합니다.

참고

Red Hat OpenShift Service Mesh v1.0 지원은 2020년 10월에 종료되었습니다. v1.1 또는 v2.0으로 업그레이드해야 합니다.

2.1.5. 더 이상 사용되지 않는 기능

이전 릴리스에서 사용 가능하던 일부 기능이 더 이상 사용되지 않거나 삭제되었습니다.

더 이상 사용되지 않는 기능은 여전히 OpenShift Container Platform에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새로운 배포에는 사용하지 않는 것이 좋습니다.

2.1.5.1. Red Hat OpenShift Service Mesh 1.1.5의 중단된 기능

다음 사용자 정의 리소스는 릴리스 1.1.5에서 더 이상 사용되지 않으며 릴리스 1.1.12에서 제외되었습니다.

  • Policy - Policy 리소스는 더 이상 사용되지 않으며 향후 릴리스에서는 PeerAuthentication 리소스로 대체됩니다.
  • MeshPolicy - MeshPolicy 리소스는 더 이상 사용되지 않으며 향후 릴리스에서는 PeerAuthentication 리소스로 대체됩니다.
  • v1alpha1 RBAC API -The v1alpha1 RBAC 정책은 v1beta1 AuthorizationPolicy에서 더 이상 사용되지 않습니다. RBAC(Role Based Access Control)는 ServiceRoleServiceRoleBinding 오브젝트를 정의합니다.

    • ServiceRole
    • ServiceRoleBinding
  • RbacConfig - RbacConfig는 Istio RBAC 동작을 제어하기 위해 사용자 정의 리소스 정의를 구현합니다.

    • ClusterRbacConfig(Red Hat OpenShift Service Mesh 버전 1.0 이전)
    • ServiceMeshRbacConfig(Red Hat OpenShift Service Mesh 버전 1.0 이상)
  • Kiali에서는 loginLDAP 전략이 더 이상 사용되지 않습니다. 향후 버전에서는 OpenID 공급자를 사용한 인증을 도입할 예정입니다.

다음 구성 요소는 이 릴리스에서 더 이상 사용되지 않으며 향후 릴리스에서 Istiod 구성 요소로 대체됩니다.

  • Mixer - 액세스 제어 및 사용 정책
  • Pilot - 서비스 검색 및 프록시 구성
  • Citadel - 인증서 생성
  • Galley - 구성 검증 및 배포

2.1.6. 확인된 문제

이러한 제한 사항은 Red Hat OpenShift Service Mesh에 있습니다.

  • Red Hat OpenShift Service Mesh는 IPv6를 지원하지 않습니다. 업스트림 Istio 프로젝트에서 지원하지 않거나 OpenShift에서 완전히 지원하지 않기 때문입니다.
  • 그래프 레이아웃 - 애플리케이션 아키텍처 및 표시할 데이터(그래프 노드 및 상호 작용 수)에 따라 Kiali 그래프의 레이아웃이 다르게 렌더링됩니다. 모든 상황에 적합하게 렌더링되는 단일 레이아웃을 만드는 것이 불가능하지는 않지만 어렵기 때문에 Kiali는 다양한 레이아웃 옵션을 제공합니다. 다른 레이아웃을 선택하려면 그래프 설정 메뉴에서 다른 레이아웃 스키마를 선택할 수 있습니다.
  • Kiali 콘솔의 Jaeger 및 Grafana와 같은 관련 서비스에 처음 액세스하는 경우 인증서를 수락하고 OpenShift Container Platform 로그인 자격 증명을 사용하여 다시 인증해야 합니다. 이것은 프레임워크가 콘솔에 포함된 페이지를 표시하는 방법에 문제가 있기 때문입니다.

2.1.6.1. 서비스 메시의 알려진 문제

이는 Red Hat OpenShift Service Mesh에서 알려진 문제입니다.

  • Jaeger/Kiali Operator 업그레이드가 operator 보류로 차단됩니다. Service Mesh 1.0.x가 설치된 Jaeger 또는 Kiali Operator를 업그레이드할 때 Operator 상태가 보류 중으로 표시됩니다. 진행 중인 해결 방법과 완료된 해결 방법이 있습니다. 자세한 내용은 연결된 지식 베이스 문서를 참조하십시오.
  • Istio-14743 이 Red Hat OpenShift Service Mesh 릴리스의 기반이 되는 Istio 버전의 제한으로 인해 현재 Service Mesh와 호환되지 않는 여러 애플리케이션이 있습니다. 자세한 내용은 링크 커뮤니티 관련 문제를 참조하십시오.
  • MAISTRA-858 Istio 1.1.x와 관련된 더 이상 사용하지 않는 옵션 및 구성을 설명하는 다음과 같은 Envoy 로그 메시지가 예상됩니다.

    • [2019-06-03 07:03:28.943][19][warning][misc] [external/envoy/source/common/protobuf/utility.cc:129] Using deprecated option 'envoy.api.v2.listener.Filter.config'. 이 구성은 곧 Envoy에서 삭제될 예정입니다.
    • [2019-08-12 22:12:59.001][13][warning][misc] [external/envoy/source/common/protobuf/utility.cc:174] Using deprecated option 'envoy.api.v2.Listener.use_original_dst' from file lds.proto. 이 구성은 곧 Envoy에서 삭제될 예정입니다.
  • MAISTRA-806 제거된 Istio Operator pod로 인해 메시 및 CNI가 배포되지 않습니다.

    제어 창을 배포하는 동안 istio-operator pod가 제거되면, 제거된 istio-operator pod를 삭제합니다.

  • MAISTRA-681 컨트롤 플레인에 네임스페이스가 많은 경우 성능 문제가 발생할 수 있습니다.
  • MAISTRA-465 Maistra Operator가 Operator 지표에 대한 서비스를 생성하지 못합니다.
  • MAISTRA-453 새 프로젝트를 생성하고 즉시 pod를 배포하면 사이드카 삽입이 발생하지 않습니다. pod가 생성되기 전에 Operator에서 maistra.io/member-of를 추가하지 못하므로 사이드카 삽입을 수행하려면 pod를 삭제하고 다시 생성해야 합니다.
  • MAISTRA-158 동일한 호스트 이름을 참조하는 여러 게이트웨이를 적용하면 모든 게이트웨이가 작동을 중지합니다.

2.1.6.2. Kiali의 확인된 문제

참고

Kiali의 새로운 문제는 OpenShift Service Mesh 프로젝트에서 생성되어야 하며 ComponentKiali로 설정되어야 합니다.

다음은 Kiali에서 알려진 문제입니다.

  • KIALI-2206 처음으로 Kiali 콘솔에 액세스했을 때 Kiali에 대해 캐시된 브라우저 데이터가 없는 경우 Kiali 서비스 상세 정보 페이지의 Metrics 탭에 있는 ‘Grafana에서 보기’ 링크가 잘못된 위치로 리디렉션됩니다. 이 문제가 발생하는 유일한 상황은 Kiali에 처음 액세스하는 경우입니다.
  • KIALI-507 Kiali는 Internet Explorer 11을 지원하지 않습니다. 기본 프레임워크가 Internet Explorer를 지원하지 않기 때문입니다. Kiali 콘솔에 액세스하려면 Chrome, Edge, Firefox 또는 Safari 브라우저의 두 가지 최신 버전 중 하나를 사용하십시오.

2.1.6.3. Jaeger의 확인된 문제

Jaeger에 다음과 같은 제한 사항은 있습니다.

  • Apache Spark가 지원되지 않습니다.
  • AMQ/Kafka를 통한 Jaeger 스트리밍은 IBM Z 및 IBM Power Systems에서 지원되지 않습니다.

다음은 Jaeger에서 알려진 문제입니다.

  • BZ-1918920 Elasticsearch pod는 업데이트 후 자동으로 다시 시작되지 않습니다. 이 문제를 해결하려면 pod를 수동으로 다시 시작합니다.
  • TRACING-809 Jaeger Ingester는 Kafka 2.3과 호환되지 않습니다. Jaeger Ingester의 두 개 이상의 인스턴스와 트래픽이 충분한 경우 로그에 지속적으로 리밸런싱 메시지를 생성합니다. 이는 Kafka 2.3.1에서 수정된 Kafka 2.3의 문제의 재발로 인해 발생합니다. 자세한 내용은 Jaegertracing-1819를 참조하십시오.

2.1.7. 수정된 문제

현재 릴리스에서 다음 문제가 해결되었습니다.

2.1.7.1. 서비스 메시의 수정된 문제

  • MAISTRA-2371 listerInformer에서 tombstones를 처리합니다. 업데이트된 캐시 코드베이스는 네임스페이스 캐시에서 집계된 캐시로 이벤트를 변환할 때 tombstones를 처리하지 않아 go 루틴에서 패닉으로 이어졌습니다.
  • OSSM-99 레이블 없이 직접 Pod에서 생성된 워크로드는 Kiali를 충돌하게 만들 수 있습니다.
  • OSSM-93 IstioConfigList는 두 개 이상의 이름으로 필터링할 수 없습니다.
  • OSSM-92 VS/DR YAML 편집 페이지에서 저장되지 않은 변경 사항을 취소해도 변경 사항이 취소되지 않습니다.
  • OSSM-90 추적은 서비스 세부 정보 페이지에서 사용할 수 없습니다.
  • MAISTRA-1649 헤드리스 서비스가 다른 네임스페이스에서 충돌합니다. 다른 네임스페이스에 헤드리스 서비스를 배포할 때 끝점 구성이 병합되고 잘못된 Envoy 구성이 사이드카로 푸시됩니다.
  • MAISTRA-1541 컨트롤러가 소유자 참조에 설정되지 않은 경우 kubernetesenv에서 패닉이 발생합니다. pod에 컨트롤러를 지정하지 않는 ownerReference가 있는 경우 kubernetesenv cache.go 코드 내에서 패닉이 발생할 수 있습니다.
  • MAISTRA-1352 컨트롤 플레인 설치의 Cert-manager CRD(Custom Resource Definitions)가 이 릴리스와 향후 릴리스에서 제외됩니다. Red Hat OpenShift Service Mesh를 이미 설치한 경우 cert-manager가 사용되지 않는 경우 CRD를 수동으로 제거해야 합니다.
  • MAISTRA-1001 HTTP/2 연결을 종료하면 istio-proxy에서 세그먼트 오류가 발생할 수 있습니다.
  • MAISTRA-932 Jaeger Operator와 OpenShift Elasticsearch Operator 간의 종속성 관계를 추가하기 위해 requires 메타데이터를 추가했습니다. Jaeger Operator가 설치되면 사용할 수 없는 경우 OpenShift Elasticsearch Operator가 자동으로 배포됩니다.
  • MAISTRA-862 Galley는 여러 네임스페이스를 삭제하고 다시 만든 뒤, 감시를 중단하고 다른 구성 요소에 대한 구성 제공을 중단했습니다.
  • MAISTRA-833 Pilot은 여러 네임스페이스를 삭제하고 다시 만든 뒤, 구성 전달을 중단했습니다.
  • MAISTRA-684 istio-operator의 기본 Jaeger 버전은 1.12.0이며, 이는 Red Hat OpenShift Service Mesh 0.12.TechPreview에 제공된 Jaeger 버전 1.13.1과 일치하지 않습니다.
  • MAISTRA-622 Maistra 0.12.0/TP12에서는 허용 모드가 작동하지 않습니다. 사용자에게는 일반 텍스트 모드 또는 상호 TLS 모드를 사용하는 옵션이 있지만 허용되지는 않습니다.
  • MAISTRA-572 Jaeger는 Kiali와 함께 사용할 수 없습니다. 이 릴리스에서 Jaeger는 OAuth 프록시를 사용하도록 구성되어 있지만, 브라우저를 통해서만 작동하도록 구성되어 서비스 액세스를 허용하지 않습니다. Kiali는 Jaeger 끝점과 올바르게 통신할 수 없으며 Jaeger가 비활성화된 것으로 간주합니다. 또한 TRACING-591을 참조하십시오.
  • MAISTRA-357 AWS의 OpenShift 4 Beta에서는 기본적으로 포트 80 이외의 포트에서 수신 게이트웨이를 통해 TCP 또는 HTTPS 서비스에 액세스할 수 없습니다. AWS 로드 밸런서에는 서비스 끝점의 포트 80이 활성화되어 있는지 확인하는 상태 점검 기능이 있습니다. 포트 80에서 서비스를 실행하지 않으면 로드 밸런서 상태 점검에 실패합니다.
  • MAISTRA-348 AWS의 OpenShift 4 Beta는 80 또는 443 이외의 포트에서 수신 게이트웨이 트래픽을 지원하지 않습니다. 80 또는 443 이외의 포트 번호로 TCP 트래픽을 처리하도록 수신 게이트웨이를 구성하려면, 이 문제를 해결하기 위해 OpenShift 라우터 대신 AWS 로드 밸런서에서 제공하는 서비스 호스트 이름을 사용해야 합니다.
  • MAISTRA-193 citadel에 대해 상태 확인이 활성화되면 예기치 않은 콘솔 정보 메시지가 표시됩니다.
  • 버그 1821432 OpenShift Container Platform 제어 리소스 세부 정보 페이지의 토글 제어가 CR을 올바르게 업데이트하지 않습니다. OpenShift Container Platform 웹 콘솔의 SMCP(Service Mesh Control Plane) 개요 페이지의 UI 토글 제어가 리소스에서 잘못된 필드를 업데이트하는 경우가 있습니다. ServiceMeshControlPlane 리소스를 업데이트하려면 토글 제어를 클릭하는 대신 YAML 콘텐츠를 직접 편집하거나 명령줄에서 리소스를 업데이트합니다.

2.1.7.2. Kiali의 수정된 문제

  • KIALI-3239 Kiali Operator Pod가 "Evicted" 상태로 실패한 경우 Kiali Operator가 배포되지 않습니다. 해결방법은 Evicted pod를 삭제하고 Kiali Operator를 재배포하는 것입니다.
  • KIALI-3118 ServiceMeshMemberRoll을 변경(예: 프로젝트 추가 또는 삭제)한 후 Kiali pod가 다시 시작되며, Kiali pod가 다시 시작되는 동안 그래프 페이지에 오류가 표시됩니다.
  • KIALI-3096 서비스 메시에서 런타임 지표가 실패합니다. 서비스 메시와 Prometheus 사이에 OAuth 필터가 있으며 액세스 권한이 부여되기 전에 전달자 토큰을 Prometheus에 전달해야 합니다. Kiali는 Prometheus 서버와 통신할 때 이 토큰을 사용하도록 업데이트되었지만 현재 애플리케이션 지표에 403 오류가 발생하고 있습니다.
  • KIALI-3070 이 버그는 기본 대시보드가 아닌 사용자 정의 대시보드에만 영향을 미칩니다. 지표 설정에서 레이블을 선택하고 페이지를 새로 고침하면 선택 사항이 메뉴에는 유지하지만 차트에 표시되지 않습니다.
  • KIALI-2686 컨트롤 플레인에 네임스페이스가 많은 경우 성능 문제가 발생할 수 있습니다.

2.1.7.3. Jaeger의 수정된 문제

  • TRACING-1725 TRACING-1631에 대한 후속 조치입니다. 동일한 이름을 사용하지만 다른 네임스페이스 내에 Jaeger 프로덕션 인스턴스가 여러 개인 경우 Elasticsearch 인증서가 올바르게 조정되는지 확인하기 위한 추가 수정 사항입니다. BZ-1918920도 참조하십시오.
  • TRACING-1631 동일한 이름을 사용하지만 다른 네임스페이스 내의 여러 Jaeger 프로덕션 인스턴스로, Elasticsearch 인증서 문제를 발생시킵니다. 여러 서비스 메시가 설치되면 모든 Jaeger Elasticsearch 인스턴스에 개별 시크릿 대신 동일한 Elasticsearch 시크릿이 있어 OpenShift Elasticsearch Operator가 모든 Elasticsearch 클러스터와 통신할 수 없습니다.
  • TRACING-1300 Istio 사이드카를 사용할 때 에이전트와 수집기 간의 연결에 실패했습니다. Jaeger Operator 업데이트는 Jaeger 사이드카 에이전트와 Jaeger 수집기 간의 TLS 통신을 기본적으로 활성화했습니다.
  • TRACING-1208 Jaeger UI에 액세스할 때 인증 “500 Internal Error”입니다. OAuth를 사용하여 UI를 인증할 때 oauth-proxy 사이드카가 additionalTrustBundle로 설치할 때 정의된 사용자 정의 CA 번들을 신뢰하지 않기 때문에 500 오류가 발생합니다.
  • TRACING-1166 현재 연결이 끊긴 환경에서 Jaeger 스트리밍 전략을 사용할 수 없습니다. Kafka 클러스터가 프로비저닝 중인 경우 Failed to pull image registry.redhat.io/amq7/amq-streams-kafka-24-rhel7@sha256:f9ceca004f1b7dccb3b82d9a8027961f9fe4104e0ed69752c0bdd8078b4a1076와 같은 오류가 발생합니다.

2.2. Red Hat OpenShift Service Mesh 이해

Red Hat OpenShift Service Mesh는 서비스 메시에서 네트워크로 연결된 마이크로 서비스에 대해 동작 정보 및 운영 제어용 플랫폼을 제공합니다. Red Hat OpenShift Service Mesh를 사용하면 OpenShift Container Platform 환경에서 마이크로 서비스를 연결, 보호 및 모니터링할 수 있습니다.

2.2.1. 서비스 메시 이해

서비스 메시는 분산 마이크로 서비스 아키텍처에서 애플리케이션을 구성하는 마이크로 서비스 네트워크와 이러한 마이크로 서비스 간의 상호 작용입니다. 서비스 메시의 크기와 복잡성이 증가함에 따라 이를 이해하고 관리하는 것이 어려워질 수 있습니다.

오픈 소스 Istio 프로젝트를 기반으로 하는 Red Hat OpenShift Service Mesh는 서비스 코드를 변경할 필요 없이 기존 분산 애플리케이션에 투명 계층을 추가합니다. 마이크로 서비스 간의 모든 네트워크 통신을 차단하는 메시의 관련 서비스에 특수 사이드카 프록시를 배포하여 Red Hat OpenShift Service Mesh 지원을 서비스에 추가합니다. 컨트롤 플레인 기능을 사용하여 서비스 메시를 구성하고 관리합니다.

Red Hat OpenShift Service Mesh를 사용하면, 다음과 같은 기능을 제공하는 배포된 서비스 네트워크를 쉽게 생성할 수 있습니다.

  • 검색
  • 로드 밸런싱
  • 서비스 간 인증
  • 장애 복구
  • 지표
  • 모니터링

Red Hat OpenShift Service Mesh는 다음과 같은 보다 복잡한 운영 기능을 제공합니다:

  • A/B 테스트
  • 카나리아 릴리스
  • 속도 제한
  • 액세스 제어
  • 엔드 투 엔드 인증

2.2.2. Red Hat OpenShift Service Mesh 아키텍처

Red Hat OpenShift Service Mesh는 논리적으로 데이터 플레인과 컨트롤 플레인으로 분할됩니다.

데이터 플레인은 사이드카로 배포된 지능적 프록시 세트입니다. 이러한 프록시는 서비스 메시에서 마이크로 서비스 간의 모든 인바운드 및 아웃바운드 네트워크 통신을 가로채기하고 제어합니다. 또한 사이드카 프록시는 범용 정책 및 Telemetry 허브인 Mixer와 통신합니다.

  • Envoy proxy는 서비스 메시의 모든 서비스에 대한 인바운드 및 아웃바운드 트래픽을 가로채기합니다. Envoy는 동일한 pod에서 관련 서비스에 사이드카로 배포됩니다.

컨트롤 플레인은 트래픽을 라우팅하기 위해 프록시를 관리 및 구성하며, 정책을 적용하고 Telemetry를 수집하도록 Mixers를 구성합니다.

  • Mixer는 액세스 제어 및 사용 정책(예: 권한 부여, 속도 제한, 할당량, 인증 및 요청 추적)을 시행하고 Envoy 프록시 및 기타 서비스에서 Telemetry 데이터를 수집합니다.
  • Pilot은 런타임 시 프록시를 구성합니다. Pilot은 Envoy 사이드카에 대한 서비스 검색, 지능형 라우팅을 위한 트래픽 관리 기능(예: A/B 테스트 또는 카나리아 배포) 및 복구 기능(시간 초과, 재시도 및 회로 차단기)을 제공합니다.
  • Citadel은 인증서를 발행 및 교체합니다. Citadel은 내장 ID 및 자격 증명 관리를 통해 강력한 서비스 간 인증과 최종 사용자 인증을 제공합니다. Citadel을 사용하여 서비스 메시에서 암호화되지 않은 트래픽을 업그레이드할 수 있습니다. Operator는 Citadel을 사용하여 네트워크 제어가 아닌 서비스 ID를 기반으로 정책을 시행할 수 있습니다.
  • Galley는 서비스 메시 구성을 수집한 다음, 구성의 유효성을 검증, 처리 및 배포합니다. Galley는 다른 서비스 메시 구성 요소가 OpenShift Container Platform에서 사용자 구성 세부 정보를 얻지 못하도록 보호합니다.

또한 Red Hat OpenShift Service Mesh는 istio-operator를 사용하여 컨트롤 플레인 설치를 관리합니다. Operator는 OpenShift 클러스터에서 공통 활동을 구현하고 자동화할 수 있는 소프트웨어입니다. 컨트롤러 역할을 하여 클러스터에서 원하는 오브젝트 상태를 설정하거나 변경할 수 있습니다.

2.2.3. Kiali 이해

Kiali는 서비스 메시의 마이크로 서비스와 해당 연결 방법을 표시하여 서비스 메시를 시각화할 수 있습니다.

2.2.3.1. Kiali 개요

Kiali는 OpenShift Container Platform에서 실행 중인 서비스 메시에 대한 관찰 기능을 제공합니다. Kiali는 Istio 서비스 메시를 정의하고 검증하며 관찰하는 데 도움이 됩니다. 이를 통해 토폴로지를 유추하여 서비스 메시의 구조를 이해하고 서비스 메시의 상태에 대한 정보를 제공할 수 있습니다.

Kiali는 회로 차단기, 요청 속도, 대기 시간, 트래픽 흐름 그래프와 같은 기능에 대한 가시성을 제공하는 네임스페이스의 대화형 그래프 보기를 실시간으로 제공합니다. Kiali는 애플리케이션에서 서비스 및 워크로드에 이르기까지 다양한 수준의 구성 요소에 대한 통찰력을 제공하며, 선택한 그래프 노드 또는 에지에서 상황별 정보에 대한 상호 작용과 차트를 표시할 수 있습니다. Kiali는 게이트웨이, 대상 규칙, 가상 서비스, 메시 정책 등과 같은 Istio 구성의 유효성을 확인하는 기능도 제공합니다. Kiali는 자세한 지표를 제공하며 고급 쿼리에 기본 Grafana 통합이 가능합니다. Jaeger를 Kiali 콘솔에 통합하면 분산 추적이 제공됩니다.

Kiali는 기본적으로 Red Hat OpenShift Service Mesh의 일부로 설치됩니다.

2.2.3.2. Kiali 아키텍처

Kiali는 Kiali 애플리케이션과 Kiali 콘솔이라는 두 가지 구성 요소로 구성됩니다.

  • Kiali 애플리케이션(백엔드) - 이 구성 요소는 컨테이너 애플리케이션 플랫폼에서 실행되고 서비스 메시 구성 요소와 통신하며, 데이터를 검색 및 처리하고, 이 데이터를 콘솔에 노출합니다. Kiali 애플리케이션에는 스토리지가 필요하지 않습니다. 클러스터에 애플리케이션을 배포할 때 구성은 ConfigMaps 및 시크릿에 설정됩니다.
  • Kiali 콘솔(프론트엔드) - Kiali 콘솔은 웹 애플리케이션입니다. Kiali 애플리케이션은 Kiali 콘솔을 제공하며 이를 사용자에게 표시하도록 데이터의 백엔드를 쿼리합니다.

또한 Kiali는 컨테이너 애플리케이션 플랫폼과 Istio에서 제공하는 외부 서비스 및 구성 요소에 따라 달라집니다.

  • Red Hat Service Mesh(Istio) - Istio는 Kiali 요구 사항입니다. Istio는 서비스 메시를 제공하고 제어하는 구성 요소입니다. Kiali와 Istio를 별도로 설치할 수 있지만 Kiali는 Istio에 따라 달라지며 Istio가 존재하지 않는 경우 작동하지 않습니다. Kiali는 Prometheus 및 클러스터 API를 통해 노출되는 Istio 데이터와 구성을 검색해야 합니다.
  • Prometheus - 전용 Prometheus 인스턴스는 Red Hat OpenShift Service Mesh 설치의 일부로 포함되어 있습니다. Istio Telemetry가 활성화되면 지표 데이터가 Prometheus에 저장됩니다. Kiali는 이 Prometheus 데이터를 사용하여 메시 토폴로지 확인, 지표 표시, 상태 계산, 가능한 문제 표시 등의 작업을 수행합니다. Kiali는 Prometheus와 직접 통신하고 Istio Telemetry에서 사용하는 데이터 스키마를 가정합니다. Prometheus는 Istio 종속성 및 Kiali에 대한 하드 종속성이며, 대부분의 Kiali 기능은 Prometheus없이 작동하지 않습니다.
  • 클러스터 API - Kiali는 OpenShift Container Platform (클러스터 API)의 API를 사용하여 서비스 메시 구성을 가져오고 해결합니다. Kiali는 클러스터 API를 쿼리하여 네임스페이스, 서비스, 배포, pod 및 기타 엔터티에 대한 정의를 검색합니다. 또한 Kiali는 다른 클러스터 엔티티 간의 관계를 해결하기 위해 쿼리를 만듭니다. 클러스터 API는 가상 서비스, 대상 규칙, 경로 규칙, 게이트웨이, 할당량 등과 같은 Istio 구성을 검색하도록 쿼리합니다.
  • Jaeger - Jaeger는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 기본 Red Hat OpenShift Service Mesh 설치의 일부로 Jaeger를 설치할 때 Kiali 콘솔에는 Jaeger의 추적 데이터를 표시하는 탭이 포함되어 있습니다. Istio의 분산 추적 기능을 비활성화하면 추적 데이터를 사용할 수 없습니다. 또한 사용자가 Jaeger 데이터를 보려면 컨트롤 플레인이 설치된 네임스페이스에 액세스할 수 있어야 합니다.
  • Grafana - Grafana는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 사용 가능한 경우, Kiali의 지표 페이지에 사용자를 Grafana의 동일한 지표로 안내하는 링크가 표시됩니다. 사용자는 Grafana 대시보드에 대한 링크를 보고 Grafana 데이터를 보려면 컨트롤 플레인이 설치된 네임스페이스에 액세스할 수 있어야 합니다.

2.2.3.3. Kiali 기능

Kiali 콘솔은 Red Hat Service Mesh와 통합되어 다음 기능을 제공합니다.

  • 상태 - 애플리케이션, 서비스 또는 워크로드에 대한 문제를 빠르게 식별합니다.
  • 토폴로지 - 애플리케이션, 서비스 또는 워크로드가 Kiali 그래프를 통해 통신하는 방식을 시각화합니다.
  • 지표 - 사전 정의된 지표 대시 보드를 통해 Go, Node.js. Quarkus, Spring Boot, Thorntail, Vert.x에 대한 서비스 메시 및 애플리케이션 성능을 차트로 작성할 수 있습니다. 또한 사용자 정의 대시보드를 생성할 수도 있습니다.
  • 추적 - Jaeger와의 통합을 통해 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 따를 수 있습니다.
  • 검증 - 가장 일반적인 Istio 오브젝트에 대한 고급 검증(대상 규칙, 서비스 항목, 가상 서비스 등)을 수행합니다.
  • 구성 - 마법사를 사용하거나 Kiali 콘솔의 YAML 편집기에서 직접 Istio 라우팅 구성을 생성, 업데이트 및 삭제할 수 있는 옵션입니다.

2.2.4. Jaeger 이해

사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하기 위해 수십 가지 서비스가 필요할 수 있는 아키텍처에 의해 요청이 실행됩니다. 이 요청의 경로는 분산 트랜잭션입니다. Jaeger를 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청의 경로를 따르는 분산 추적을 수행할 수 있습니다.

분산 추적은 분산 트랜잭션의 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 분산 추적을 통해 개발자는 대규모 서비스 지향 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용할 수 있습니다.

Jaeger는 마이크로 서비스의 전체 스택에서 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 기간으로 구성됩니다.

기간은 작업 이름, 작업의 시작 시간 및 기간이 있는 Jaeger의 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.

2.2.4.1. Jaeger 개요

서비스 소유자로 Jaeger를 사용하여 서비스 아키텍처에 대한 정보를 수집할 수 있습니다. Jaeger는 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결에 사용할 수 있는 오픈 소스 분산 추적 플랫폼입니다.

Jaeger를 사용하면 다음 기능을 수행할 수 있습니다.

  • 분산 트랜잭션 모니터링
  • 성능 및 대기 시간 최적화
  • 근본 원인 분석 수행

Jaeger는 벤더 중립 OpenTracing API 및 계측을 기반으로 합니다.

2.2.4.2. Jaeger 아키텍처

Jaeger는 연동을 통해 추적 데이터를 수집, 저장, 표시하는 여러 구성 요소로 이루어집니다.

  • Jaeger Client(Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- Jaeger 클라이언트는 OpenTracing API의 언어 특정 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
  • Jaeger 에이전트(Server Queue, Processor Workers) - Jaeger 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬으로, 수집기에 배치 및 전송합니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
  • Jaeger 수집기(Queue, Workers) - 에이전트와 유사하게 수집기는 기간을 수신하여 처리를 위한 내부 큐에 배치할 수 있습니다. 그러면 수집기는 기간이 스토리지로 이동할 때까지 대기하지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
  • 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Jaeger에는 기간 스토리지를 위한 플러그인 메커니즘이 있습니다. 이 릴리스에서 지원되는 유일한 스토리지는 Elasticsearch입니다.
  • 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
  • Ingester(Ingester 서비스) - Jaeger는 수집기와 실제 백업 스토리(Elasticsearch) 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 다른 스토리지 백엔드(Elasticsearch)에 쓰는 서비스입니다.
  • Jaeger 콘솔 - Jaeger는 분산 추적 데이터를 시각화할 수 있는 사용자 인터페이스를 제공합니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.

2.2.4.3. Jaeger 기능

Jaeger 추적은 다음과 같은 기능을 제공합니다.

  • Kiali와의 통합 - 올바르게 구성된 경우 Kiali 콘솔에서 Jaeger 데이터를 볼 수 있습니다.
  • 높은 확장성 - Jaeger 백엔드는 하나의 실패 지점을 보유하고 비즈니스 요구 사항으로 확장할 수 있도록 설계되었습니다.
  • 분산 컨텍스트 전파 - 다른 구성 요소의 데이터를 함께 연결하여 완전한 엔드 투 엔드 추적을 만들 수 있습니다.
  • Zipkin과의 역호환성 - Jaeger에는 Zipkin의 드롭인 대체로 사용할 수 있는 API가 있지만 Red Hat은 이 릴리스에서 Zipkin 호환성을 지원하지 않습니다.

2.2.5. 다음 단계

2.3. 서비스 메시 및 Istio 차이점

Red Hat OpenShift Service Mesh 설치는 여러 가지 면에서 업스트림 Istio 커뮤니티 설치와 다릅니다. Red Hat OpenShift Service Mesh에 대한 수정은 OpenShift Container Platform에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

Red Hat OpenShift Service Mesh의 현재 릴리스는 다음과 같은 점에서 현재 업스트림 Istio 커뮤니티 릴리스와 다릅니다.

2.3.1. 다중 테넌트 설치

업스트림 Istio는 하나의 테넌트 접근법을 사용하지만 Red Hat OpenShift Service Mesh는 클러스터 내에서 여러 개의 독립적인 컨트롤 플레인을 지원합니다. Red Hat OpenShift Service Mesh는 다중 테넌트 연산자를 사용하여 컨트롤 플레인 라이프사이클을 관리합니다.

Red Hat OpenShift Service Mesh는 기본적으로 다중 테넌트 컨트롤 플레인을 설치합니다. 서비스 메시에 액세스할 수 있는 프로젝트를 지정하고 다른 컨트롤 플레인 인스턴스에서 서비스 메시를 분리합니다.

2.3.1.1. 멀티 테넌시 대 클러스터 전체 설치

다중 테넌트 설치와 클러스터 전체 설치의 주요 차이점은 컨트롤 플레인 배포에서 사용하는 권한 범위입니다(예: Galley, Pilot). 구성 요소는 더 이상 클러스터 범위의 역할 기반 액세스 제어(RBAC) 리소스 ClusterRoleBinding을 사용하지 않습니다.

ServiceMeshMemberRoll members 목록에 있는 모든 프로젝트는 컨트롤 플레인 배포와 관련된 각 서비스 계정에 대해 RoleBinding을 가지며, 각 컨트롤 플레인 배포는 해당하는 멤버 프로젝트만 감시합니다. 각 멤버 프로젝트에는 maistra.io/member-of 레이블이 추가됩니다. 여기서 member-of 값은 컨트롤 플레인 설치가 포함된 프로젝트입니다.

Red Hat OpenShift Service Mesh는 각 멤버 프로젝트를 구성하여 자체, 컨트롤 플레인 및 기타 멤버 프로젝트 간의 네트워크 액세스를 보장합니다. 정확한 구성은 OpenShift 소프트웨어 정의 네트워킹(SDN)이 구성된 방법에 따라 다릅니다. 자세한 내용은 OpenShift SDN 정보를 참조하십시오.

OpenShift Container Platform 클러스터가 SDN 플러그인을 사용하도록 구성된 경우:

  • NetworkPolicy: Red Hat OpenShift Service Mesh는 각 멤버 프로젝트에서 NetworkPolicy 리소스를 생성하여 다른 멤버 및 컨트롤 플레인에서 모든 pod로 수신할 수 있습니다. Service Mesh에서 멤버를 제거하면 이 NetworkPolicy 리소스는 프로젝트에서 삭제됩니다.

    참고

    또한 멤버 프로젝트 전용 수신으로 제한합니다. 멤버 외 프로젝트에서 수신이 필요한 경우 해당 트래픽을 허용하기 위해 NetworkPolicy를 생성해야 합니다.

  • 다중 테넌트: Red Hat OpenShift Service Mesh는 각 멤버 프로젝트의 NetNamespace를 컨트롤 플레인 프로젝트의 NetNamespace에 결합합니다(oc adm pod-network join-projects --to control-plane-project member-project). 서비스 메시에서 멤버를 제거하면 해당 NetNamespace가 컨트롤 플레인과 분리됩니다(oc adm pod-network isolate-projects member-project 실행과 동일).
  • 서브넷: 추가 구성이 수행되지 않습니다.

2.3.1.2. 클러스터 범위 리소스

업스트림 Istio에는 의존하는 두 개의 클러스터 범위 리소스가 있습니다. MeshPolicyClusterRbacConfig 이는 다중 테넌트 클러스터와 호환되지 않으며 아래에 설명된 대로 교체되었습니다.

  • ServiceMeshPolicy는 컨트롤 플레인 전체의 인증 정책 구성을 위해 MeshPolicy를 대체합니다. 이는 컨트롤 플레인과 동일한 프로젝트에서 생성되어야 합니다.
  • ServicemeshRbacConfig는 컨트롤 플레인 전체 역할 기반 액세스 제어 구성을 위해 ClusterRbacConfig 를 대체합니다. 이는 컨트롤 플레인과 동일한 프로젝트에서 생성되어야 합니다.

2.3.2. Istio와 Red Hat OpenShift Service Mesh 간의 차이점

Red Hat OpenShift Service Mesh 설치는 여러 가지 면에서 Istio 설치와 다릅니다. Red Hat OpenShift Service Mesh에 대한 수정은 OpenShift에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

2.3.2.1. 명령줄 도구

Red Hat OpenShift Service Mesh의 명령줄 도구는 oc입니다.  Red Hat OpenShift Service Mesh는 istioctl을 지원하지 않습니다.

2.3.2.2. 자동 삽입

업스트림 Istio 커뮤니티 설치는 레이블을 지정한 프로젝트 내의 pod에 사이드카를 자동으로 삽입합니다.

Red Hat OpenShift Service Mesh는 사이드카를 Pod에 자동으로 삽입하지 않지만 프로젝트에 레이블을 지정하지 않고 주석을 사용하여 삽입해야 합니다. 이 방법은 더 적은 권한이 필요하며, builder pod와 같은 다른 OpenShift 기능과 충돌하지 않습니다. 자동 삽입을 활성화하려면 자동 사이드카 삽입 섹션에 설명된 대로 sidecar.istio.io/inject 주석을 지정합니다.

2.3.2.3. Istio 역할 기반 액세스 제어 기능

역할 기반 액세스 제어(RBAC)는 서비스에 대한 액세스를 제어하는 데 사용할 수 있는 메커니즘을 제공합니다. 사용자 이름별로, 또는 속성 집합을 지정하여 제목을 식별하고 그에 따라 액세스 제어를 적용할 수 있습니다.

업스트림 Istio 커뮤니티 설치에는 정확한 헤더 일치를 수행하거나, 헤더에서 와일드카드를 일치시키거나, 특정 접두사 또는 접미사가 포함된 헤더를 확인하는 옵션이 포함되어 있습니다.

Red Hat OpenShift Service Mesh는 정규식을 사용하여 요청 헤더를 일치시키는 기능을 확장합니다. 정규식이 있는 request.regex.headers의 속성 키를 지정합니다.

요청 헤더와 일치하는 업스트림 Istio 커뮤니티 예

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: httpbin-client-binding
  namespace: httpbin
spec:
  subjects:
  - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
    properties:
      request.headers[<header>]: "value"

정규식을 사용하여 요청 헤더를 일치시키는 Red Hat OpenShift Service Mesh

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: httpbin-client-binding
  namespace: httpbin
spec:
  subjects:
  - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
    properties:
      request.regex.headers[<header>]: "<regular expression>"

2.3.2.4. OpenSSL

Red Hat OpenShift Service Mesh는 BoringSSL을 OpenSSL로 대체합니다. OpenSSL은 SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security) 프로토콜의 오픈 소스 구현이 포함된 소프트웨어 라이브러리입니다. Red Hat OpenShift Service Mesh 프록시 바이너리는 기본 Red Hat Enterprise Linux 운영 체제에서 OpenSSL 라이브러리(libssl 및 libcrypto)를 동적으로 연결합니다.

2.3.2.5. 구성 요소 수정

  • maistra-version 레이블이 모든 리소스에 추가되었습니다.
  • 모든 Ingress 리소스가 OpenShift Route 리소스로 변환되었습니다.
  • Grafana, Tracing(Jaeger) 및 Kiali는 기본적으로 활성화되어 OpenShift 경로를 통해 노출됩니다.
  • Godebug가 모든 템플릿에서 제거됨
  • istio-multi ServiceAccount과 ClusterRoleBinding, istio-reader ClusterRole이 제거되었습니다.

2.3.2.6. Envoy, Secret Discovery Service, 및 인증서

  • Red Hat OpenShift Service Mesh는 QUIC 기반 서비스를 지원하지 않습니다.
  • Istio의 SDS(Security Discovery Service) 기능을 사용한 TLS 인증서 배포는 현재 Red Hat OpenShift Service Mesh에서 지원되지 않습니다. Istio 구현은 hostPath 마운트를 사용하는 nodeagent 컨테이너에 따라 다릅니다.

2.3.2.7. Istio CNI(컨테이너 네트워크 인터페이스)

Red Hat OpenShift Service Mesh에는 CNI 플러그인이 포함되어 있으며, 이것은 애플리케이션 Pod 네트워킹을 구성할 수 있는 대체 방법을 제공합니다. CNI 플러그인은 상승된 권한으로 SCC(보안 컨텍스트 제약 조건)에 대한 서비스 계정 및 프로젝트 액세스 권한을 부여할 필요가 없도록 init-container 네트워크 구성을 대체합니다.

2.3.2.8. Istio 게이트웨이 경로

Istio 게이트웨이의 OpenShift 경로는 Red Hat OpenShift Service Mesh에서 자동으로 관리됩니다. Istio 게이트웨이가 서비스 메시 내부에서 생성, 업데이트 또는 삭제될 때마다 OpenShift 경로가 생성, 업데이트 또는 삭제됩니다.

IOR(Istio OpenShift Routing)이라는 Red Hat OpenShift Service Mesh Control Plane 구성 요소는 게이트웨이 경로를 동기화합니다. 자세한 내용은 자동 경로 생성을 참조하십시오.

2.3.2.8.1. catch-all 도메인

catch-all 도메인("*")은 지원되지 않습니다. 게이트웨이 정의에서 이 도메인이 발견되면 Red Hat OpenShift Service Mesh는 경로를 생성하지만 기본 호스트 이름을 만들기 위해 OpenShift에 의존합니다. 즉, 새로 생성된 경로는 catch-all ("*") 경로가 아니며, 대신 r<route-name>[-<project>].<suffix> 형식의 호스트 이름이 있습니다. 기본 호스트 이름이 작동하는 방법과 클러스터 관리자가 사용자 지정할 수 있는 방법에 대한 자세한 내용은 OpenShift 문서를 참조하십시오.

2.3.2.8.2. 하위 도메인

하위 도메인(예: "*.domain.com")이 지원됩니다. 그러나 이 기능은 OpenShift에서 기본적으로 활성화되어 있지 않습니다. 즉, Red Hat OpenShift Service Mesh는 하위 도메인이 있는 경로를 생성하지만 OpenShift가 이것을 활성화하도록 구성된 경우에만 적용됩니다.

2.3.2.8.3. TLS(Transport layer security)

TLS(Transport Layer Security)가 지원됩니다. 즉, 게이트웨이에 tls 섹션이 포함된 경우 OpenShift 경로는 TLS를 지원하도록 구성됩니다.

추가 리소스

2.3.3. Kiali 및 서비스 메시

OpenShift Container Platform의 서비스 메시를 통해 Kiali를 설치하는 것은 여러 가지 면에서 커뮤니티 Kiali 설치와 다릅니다. 이러한 수정은 OpenShift Container Platform에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

  • Kiali는 기본적으로 활성화되어 있습니다.
  • Ingress는 기본적으로 활성화되어 있습니다.
  • Kiali ConfigMap이 업데이트되었습니다.
  • Kiali의 ClusterRole 설정이 업데이트되었습니다.
  • Service Mesh 또는 Kiali Operator에서 이러한 변경 사항을 덮어쓸 수 있으므로 ConfigMap 또는 Kiali 사용자 정의 리소스 파일을 편집하지 마십시오. Red Hat OpenShift Service Mesh에서 실행 중인 Kiali에 대한 모든 구성은 ServiceMeshControlPlane 사용자 정의 리소스 파일에서 수행되며 구성 옵션은 제한됩니다. Operator 파일을 업데이트하려면 cluster-admin 권한이 있는 사용자로 제한해야 합니다. Red Hat OpenShift Dedicated를 사용하는 경우 운영자 파일을 업데이트하는 것은 dedicated-admin 권한이 있는 사용자로 제한되어야 합니다.

2.3.4. Jaeger 및 서비스 메시

OpenShift Container Platform의 서비스 메시를 통해 Jaeger를 설치하는 것은 여러 가지 면에서 커뮤니티 Jaeger 설치와 다릅니다. 이러한 수정은 OpenShift Container Platform에 배포할 때 문제를 해결하거나, 추가 기능을 제공하거나, 차이점을 처리하기 위해 필요한 경우가 있습니다.

  • Jaeger는 기본적으로 서비스 메시에 대해 활성화되어 있습니다.
  • Ingress는 기본적으로 서비스 메시에 대해 활성화되어 있습니다.
  • Zipkin 포트 이름의 이름이 jaeger-collector-zipkin(http)으로 변경되었습니다.
  • Jaeger는 프로덕션 또는 스트리밍 배포 옵션을 선택할 때 기본적으로 스토리지에 Elasticsearch를 사용합니다.
  • Istio 커뮤니티 버전은 일반적인 "tracing" 경로를 제공합니다. Red Hat OpenShift Service Mesh는 Jaeger Operator가 설치하고 이미 OAuth에 의해 보호되는 "jaeger" 경로를 사용합니다.
  • Red Hat OpenShift Service Mesh는 Envoy 프록시에 사이드카를 사용하며 Jaeger 또한 Jaeger 에이전트에 사이드카를 사용합니다. 이 두 가지 사이드카는 별도로 구성되어 있으며 서로 혼동해서는 안 됩니다. 프록시 사이드카는 Pod의 수신 및 송신 트래픽과 관련된 기간을 생성합니다. 에이전트 사이드카는 응용 프로그램에서 발송되는 기간을 수신하여 Jaeger 수집기로 보냅니다.

2.4. Red Hat OpenShift Service Mesh 설치 준비

Red Hat OpenShift Service Mesh를 설치하려면 설치 활동을 검토하고 사전 요구 사항을 충족해야 합니다.

2.4.1. 사전 요구 사항

2.4.2. Red Hat OpenShift Service Mesh 지원 구성

다음은 Red Hat OpenShift Service Mesh에 지원되는 구성입니다.

  • Red Hat OpenShift Container Platform 버전 4.x.
참고

OpenShift Online 및 OpenShift Dedicated는 Red Hat OpenShift Service Mesh에서 지원되지 않습니다.

  • 배포되지 않은 단일 OpenShift Container Platform 클러스터에 포함되어야 합니다.
  • 이번 Red Hat OpenShift Service Mesh 릴리스는 OpenShift Container Platform x86_64에서만 사용 가능합니다.
  • 이 릴리스에서는 모든 Service Mesh 구성 요소가 작동하는 OpenShift 클러스터에 포함된 구성만 지원합니다. 클러스터 외부에 있거나 멀티 클러스터 시나리오에 있는 마이크로 서비스 관리는 지원하지 않습니다.
  • 이 릴리스는 가상 머신과 같은 외부 서비스를 통합하지 않는 구성만 지원합니다.

Red Hat OpenShift Service Mesh 라이프사이클 및 지원되는 구성에 대한 자세한 내용은 지원 정책을 참조하십시오.

2.4.2.1. Red Hat OpenShift Service Mesh에서 Kiali에 지원되는 구성

  • Kiali Observation Console은 Chrome, Edge, Firefox 또는 Safari 브라우저의 두 가지 최신 버전에서만 지원됩니다.

2.4.2.2. 지원되는 Mixer 어댑터

  • 이 릴리스에서는 다음 Mixer 어댑터만 지원합니다.

    • 3scale Istio 어댑터

2.4.3. Operator 개요

Red Hat OpenShift Service Mesh에는 다음과 같은 네 가지 Operator가 필요합니다.

  • OpenShift Elasticsearch - (선택 사항)는 Jaeger를 사용하여 추적 및 로깅할 수 있는 데이터베이스 스토리지를 제공합니다. 오픈 소스 Elasticsearch 프로젝트를 기반으로 합니다.
  • Jaeger - 복잡한 분산 시스템의 트랜잭션을 모니터링하고 문제를 해결하기 위해 추적 기능을 제공합니다. 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
  • Kiali - 서비스 메시에 대한 가시성을 제공합니다. 단일 콘솔에서 구성을 보고, 트래픽을 모니터링하며 추적을 분석할 수 있습니다. 오픈 소스 Kiali 프로젝트를 기반으로 합니다.
  • Red Hat OpenShift Service Mesh - 애플리케이션을 구성하는 마이크로 서비스를 연결, 보안, 제어 및 관찰할 수 있습니다. Service Mesh Operator는 Service Mesh 구성 요소의 배포, 업데이트 및 삭제를 관리하는 ServiceMeshControlPlane 리소스를 정의하고 모니터링합니다. 오픈소스 Istio 프로젝트를 기반으로 합니다.

2.4.4. 다음 단계

2.5. Red Hat OpenShift Service Mesh 설치

Service Mesh를 설치하려면 OpenShift Elasticsearch, Jaeger, Kiali, Service Mesh Operator를 설치하고, ServiceMeshControlPlane 리소스를 생성 및 관리하여 컨트롤 플레인을 배포하며, Service MeshMemberRoll 리소스를 생성하여 Service Mesh와 연결된 네임스페이스를 지정해야 합니다.

참고

Mixer의 정책 적용은 기본적으로 비활성화되어 있습니다. 정책 작업을 실행하려면 활성화해야 합니다. Mixer 정책 시행 활성화에 대한 지침은 Mixer 정책 시행 업데이트를 참조하십시오.

참고

멀티 테넌트 컨트롤 플레인 설치는 Red Hat OpenShift Service Mesh 1.0부터 기본 구성입니다.

참고

Service Mesh 문서는 istio-system을 예제 프로젝트로 사용하지만, 모든 프로젝트에 서비스 메시를 배포할 수 있습니다.

2.5.1. 사전 요구 사항

서비스 메시 설치 프로세스는 OperatorHub를 사용하여 openshift-operators 프로젝트 내에 ServiceMeshControlPlane 사용자 정의 리소스 정의를 설치합니다. Red Hat OpenShift Service Mesh는 컨트롤 플레인의 배포, 업데이트 및 삭제와 관련된 ServiceMeshControlPlane을 정의하고 모니터링합니다.

Red Hat OpenShift Service Mesh 1.1.16부터 OpenShift Elasticsearch Operator, Jaeger Operator 및 Kiali Operator를 설치해야 Red Hat OpenShift Service Mesh Operator가 컨트롤 플레인을 설치할 수 있습니다.

2.5.2. OpenShift Elasticsearch Operator 설치

기본 Jaeger 배포는 Jaeger를 평가하거나 설명을 제공하거나 테스트 환경에서 Jaeger를 사용하기 위해 빠르게 설치하도록 설계되었으므로 메모리 내 스토리지를 사용합니다. 프로덕션에서 Jaeger를 사용하려면 영구 스토리지 옵션을 설치하고 구성해야 합니다(이 경우 Elasticsearch).

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.
  • cluster-admin 역할이 있는 계정. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
주의

Operator의 커뮤니티 버전은 설치하지 마십시오. 커뮤니티 Operator는 지원되지 않습니다.

참고

이미 OpenShift Elasticsearch Operator를 OpenShift 로깅의 일부로 설치한 경우 OpenShift Elasticsearch Operator를 다시 설치할 필요가 없습니다. Jaeger Operator는 설치된 OpenShift Elasticsearch Operator를 사용하여 Elasticsearch 인스턴스를 생성합니다.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. OperatorsOperatorHub로 이동합니다.
  3. Elasticsearch를 필터 상자에 입력하여 OpenShift Elasticsearch Operator를 찾습니다.
  4. Red Hat에서 제공하는 OpenShift Elasticsearch Operator를 클릭하여 Operator에 대한 정보를 표시합니다.
  5. 설치를 클릭합니다.
  6. Operator 설치 페이지의 설치 모드에서 클러스터의 모든 네임스페이스(기본값)를 선택합니다. 이렇게 하면 클러스터의 모든 프로젝트에서 Operator를 사용할 수 있습니다.
  7. 설치된 네임스페이스의 메뉴에서 openshift-operators-redhat을 선택합니다.

    참고

    Elasticsearch 설치에는 OpenShift Elasticsearch Operator의 openshift-operators-redhat 네임스페이스가 필요합니다. 다른 Red Hat OpenShift Service Mesh Operator는 openshift-operators 네임스페이스에 설치됩니다.

  8. OpenShift Container Platform 설치와 일치하는 업데이트 채널을 선택합니다. 예를 들어 OpenShift Container Platform 버전 4.8에 설치하는 경우 4.8 업데이트 채널을 선택합니다.

    참고

    OpenShift Container Platform 버전 4.7의 경우 4.6 업데이트 채널을 선택합니다.

  9. 자동 승인 전략을 선택합니다.

    참고

    수동 승인 전략을 사용하려면 적절한 인증 정보를 가진 사용자가 Operator 설치 및 서브스크립션 프로세스를 승인해야 합니다.

  10. 설치를 클릭합니다.
  11. 설치된 Operator 페이지에서 openshift-operators-redhat 프로젝트를 선택합니다. 계속하기 전에 OpenShift Elasticsearch Operator에 "InstallSucceeded" 상태가 표시될 때까지 기다립니다.

2.5.3. Jaeger Operator 설치

Jaeger를 설치하려면 OperatorHub를 사용하여 Jaeger Operator를 설치합니다.

기본적으로 Operator는 openshift-operators 프로젝트에 설치됩니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.
  • cluster-admin 역할이 있는 계정. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  • 영구 스토리지가 필요한 경우 Jaeger Operator를 설치하기 전에 OpenShift Elasticsearch Operator도 설치해야 합니다.
주의

Operator의 커뮤니티 버전은 설치하지 마십시오. 커뮤니티 Operator는 지원되지 않습니다.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. OperatorsOperatorHub로 이동합니다.
  3. Jaeger를 필터에 입력하여 Jaeger Operator를 찾습니다.
  4. Red Hat에서 제공하는 Jaeger Operator를 클릭하여 Operator에 대한 정보를 표시합니다.
  5. 설치를 클릭합니다.
  6. Operator 설치 페이지에서 stable 업데이트 채널을 선택합니다. 새로운 버전이 릴리스되면 Jaeger가 자동으로 업데이트됩니다. 유지 관리 채널(예: 1.17-stable)을 선택하면 해당 버전의 지원 주기 길이에 대한 버그 수정 및 보안 패치가 제공됩니다.
  7. 클러스터의 모든 네임스페이스(기본값)를 선택합니다. 이렇게 하면 기본 openshift-operators 프로젝트에서 Operator가 설치되고 클러스터의 모든 프로젝트에서 Operator를 사용할 수 있습니다.

    • 승인 전략을 선택합니다. 자동 또는 수동 업데이트를 선택할 수 있습니다. 설치된 Operator에 대해 자동 업데이트를 선택하는 경우 해당 Operator의 새 버전이 사용 가능하면 OLM(Operator Lifecycle Manager)은 개입 없이 Operator의 실행 중인 인스턴스를 자동으로 업그레이드합니다. 수동 업데이트를 선택하면 최신 버전의 Operator가 사용 가능할 때 OLM이 업데이트 요청을 작성합니다. 클러스터 관리자는 Operator를 새 버전으로 업데이트하려면 OLM 업데이트 요청을 수동으로 승인해야 합니다.

      참고

      수동 승인 전략을 사용하려면 적절한 인증 정보를 가진 사용자가 Operator 설치 및 서브스크립션 프로세스를 승인해야 합니다.

  8. 설치를 클릭합니다.
  9. 서브스크립션 개요 페이지에서 openshift-operators 프로젝트를 선택합니다. 계속하기 전에 Jaeger Operator에 "InstallSucceeded" 상태가 표시될 때까지 기다립니다.

2.5.4. Kiali Operator 설치

컨트롤 플레인을 설치하려면 Red Hat OpenShift Service Mesh Operator에 Kiali Operator를 설치해야 합니다.

주의

Operator의 커뮤니티 버전은 설치하지 마십시오. 커뮤니티 Operator는 지원되지 않습니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. OperatorsOperatorHub로 이동합니다.
  3. Kiali를 필터 상자에 입력하여 Kiali Operator를 찾습니다.
  4. Red Hat에서 제공하는 Kiali Operator를 클릭하여 Operator에 대한 정보를 표시합니다.
  5. 설치를 클릭합니다.
  6. Operator 설치 페이지에서 stable 업데이트 채널을 선택합니다.
  7. 클러스터의 모든 네임스페이스(기본값)를 선택합니다. 이렇게 하면 기본 openshift-operators 프로젝트에서 Operator가 설치되고 클러스터의 모든 프로젝트에서 Operator를 사용할 수 있습니다.
  8. 자동 승인 전략을 선택합니다.

    참고

    수동 승인 전략을 사용하려면 적절한 인증 정보를 가진 사용자가 Operator 설치 및 서브스크립션 프로세스를 승인해야 합니다.

  9. 설치를 클릭합니다.
  10. 설치된 Operator 페이지에 Kiali Operator의 설치 진행 상황을 표시합니다.

2.5.5. Operator 설치

Red Hat OpenShift Service Mesh를 설치하려면 다음 Operator를 이 순서대로 설치합니다. 각 Operator에 대한 절차를 반복합니다.

  1. (Optional) OpenShift Elasticsearch
  2. Jaeger
  3. Kiali
  4. Red Hat OpenShift Service Mesh

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub를 클릭합니다.
  3. Operator 이름을 필터 상자에 입력하고 Red Hat 버전의 Operator를 선택합니다. Operator의 커뮤니티 버전은 지원되지 않습니다.
  4. 설치를 클릭합니다.
  5. Operator 설치 페이지에서 설치 옵션을 선택합니다.

    1. OpenShift Elasticsearch Operator의 업데이트 채널 섹션에서 4.6을 선택합니다.
    2. Jaeger, Kiali 및 Red Hat OpenShift Service Mesh Operator의 경우 기본값을 수락합니다.

      Jaeger, Kiali 및 Red Hat OpenShift Service Mesh는 openshift-operators 네임스페이스에 설치됩니다. OpenShift Elasticsearch Operator는 openshift-operators-redhat 네임스페이스에 설치됩니다.

  6. 설치를 클릭합니다. 목록의 다음 Operator에 대한 단계를 반복하기 전에 Operator가 설치될 때까지 기다립니다.
  7. 4개의 Operator를 모두 설치한 후 Operator 설치된 Operator를 클릭하여 Operator가 설치되었는지 확인합니다.

2.5.6. Red Hat OpenShift Service Mesh Control Plane 배포

ServiceMeshControlPlane 리소스는 설치 중에 사용할 구성을 정의합니다. Red Hat에서 제공하는 기본 구성을 배포하거나 비즈니스 요구에 맞게 ServiceMeshControlPlane 파일을 사용자 지정할 수 있습니다.

OpenShift Container Platform 웹 콘솔을 사용하거나 oc 클라이언트 도구를 사용하는 명령줄에서 Service Mesh Control Plane을 배포할 수 있습니다.

2.5.6.1. 웹 콘솔에서 컨트롤 플레인 배포

웹 콘솔을 사용하여 Red Hat OpenShift Service Mesh Control Plane을 배포하려면 다음 절차를 따르십시오.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
  • Red Hat OpenShift Service Mesh 설치를 사용자 지정하는 방법에 대한 지침을 검토하십시오.
  • cluster-admin 역할이 있는 계정.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. istio-system이라는 프로젝트를 생성합니다.

    1. 프로젝트로 이동합니다.
    2. 프로젝트 만들기를 클릭합니다.
    3. 이름 필드에 istio-system을 입력합니다.
    4. 생성을 클릭합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. 필요한 경우 프로젝트 메뉴에서 istio-system을 선택합니다. Operator가 새 프로젝트에 복사될 때까지 몇 분 정도 기다려야 할 수 있습니다.
  5. Red Hat OpenShift Service Mesh Operator를 클릭합니다. 제공된 API에서 Operator는 두 가지 리소스 유형을 생성할 수 있는 링크를 제공합니다.

    • ServiceMeshControlPlane 리소스
    • ServiceMeshMemberRoll 리소스
  6. Istio Service Mesh Control Plane에서 ServiceMeshControlPlane 만들기를 클릭합니다.
  7. Service Mesh Control Plane 페이지에서 필요에 따라 기본 ServiceMeshControlPlane 템플릿에 대한 YAML을 수정합니다.

    참고

    컨트롤 플레인 사용자 지정에 대한 자세한 내용은 Red Hat OpenShift Service Mesh 설치 사용자 지정을 참조하십시오. 프로덕션의 경우 기본 Jaeger 템플릿을 변경해야 합니다.

  8. 생성을 클릭하여 컨트롤 플레인을 생성합니다. Operator는 구성 매개변수를 기반으로 pods, 서비스 및 Service Mesh Control Plane 구성 요소를 생성합니다.
  9. Istio Service Mesh Control Plane 탭을 클릭합니다.
  10. 새 컨트롤 플레인의 이름을 클릭합니다.
  11. 리소스 탭을 클릭하여 Operator가 생성 및 구성된 Red Hat OpenShift Service Mesh Control Plane 리소스를 확인합니다.

2.5.6.2. CLI에서 컨트롤 플레인 배포

Red Hat OpenShift Service Mesh Control Plane에 명령줄을 배포하려면 다음 절차를 따르십시오.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
  • Red Hat OpenShift Service Mesh 설치를 사용자 지정하는 방법에 대한 지침을 검토하십시오.
  • cluster-admin 역할이 있는 계정.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform CLI에 로그인합니다.

    $ oc login https://{HOSTNAME}:6443
  2. istio-system이라는 프로젝트를 생성합니다.

    $ oc new-project istio-system
  3. “Red Hat OpenShift Service Mesh 설치 사용자 지정”에서 확인된 예제를 사용하여 istio-installation.yaml이라는 ServiceMeshControlPlane 파일을 생성합니다. 필요에 따라, 사용 사례와 일치하도록 사용자 지정할 수 있습니다. 프로덕션 배포의 경우 기본 Jaeger 템플릿을 변경해야 합니다.
  4. 다음 명령을 실행하여 컨트롤 플레인을 배포합니다.

    $ oc create -n istio-system -f istio-installation.yaml
  5. 다음 명령을 실행하여 컨트롤 플레인 설치 상태를 확인합니다.

    $ oc get smcp -n istio-system

    STATUS 열이 InstallSuccessful인 경우 설치가 성공적으로 완료되었습니다.

    NAME            READY   STATUS              TEMPLATE   VERSION   AGE
    basic-install   9/9     InstallSuccessful   default    v1.1      4m25s
  6. 다음 명령을 실행하여 설치 프로세스 중에 Pod의 진행 상황을 확인합니다.

    $ oc get pods -n istio-system -w

    출력은 다음과 유사합니다.

    출력 예

    NAME                                     READY   STATUS             RESTARTS   AGE
    grafana-7bf5764d9d-2b2f6                 2/2     Running            0          28h
    istio-citadel-576b9c5bbd-z84z4           1/1     Running            0          28h
    istio-egressgateway-5476bc4656-r4zdv     1/1     Running            0          28h
    istio-galley-7d57b47bb7-lqdxv            1/1     Running            0          28h
    istio-ingressgateway-dbb8f7f46-ct6n5     1/1     Running            0          28h
    istio-pilot-546bf69578-ccg5x             2/2     Running            0          28h
    istio-policy-77fd498655-7pvjw            2/2     Running            0          28h
    istio-sidecar-injector-df45bd899-ctxdt   1/1     Running            0          28h
    istio-telemetry-66f697d6d5-cj28l         2/2     Running            0          28h
    jaeger-896945cbc-7lqrr                   2/2     Running            0          11h
    kiali-78d9c5b87c-snjzh                   1/1     Running            0          22h
    prometheus-6dff867c97-gr2n5              2/2     Running            0          28h

멀티 테넌트 설치의 경우, Red Hat OpenShift Service Mesh는 클러스터 내에서 여러 개의 독립적인 컨트롤 플레인을 지원합니다. ServiceMeshControlPlane 템플릿을 사용하여 재사용 가능한 구성을 생성할 수 있습니다. 자세한 내용은 컨트롤 플레인 템플릿 생성을 참조하십시오.

2.5.7. Red Hat OpenShift Service Mesh 멤버 롤 생성

ServiceMeshMemberRoll은 컨트롤 플레인에 속하는 프로젝트를 나열합니다. ServiceMeshMemberRoll에 나열된 프로젝트만 컨트롤 플레인의 영향을 받습니다. 특정 컨트롤 플레인 배포의 멤버 롤에 추가할 때까지 프로젝트는 서비스 메시에 속하지 않습니다.

ServiceMeshControlPlane과 동일한 프로젝트에서 default라는 ServiceMeshMemberRoll 리소스를 생성해야 합니다(예: istio-system ).

2.5.7.1. 웹 콘솔에서 멤버 롤 생성

웹 콘솔에서 서비스 메시 멤버 롤에 하나 이상의 프로젝트를 추가할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 서비스 메시에 추가할 기존 프로젝트 목록.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 메시에 대한 서비스가 없거나 처음부터 시작하는 경우 프로젝트를 생성합니다. istio-system과 달라야 합니다.

    1. 프로젝트로 이동합니다.
    2. 이름 필드에 이름을 입력합니다.
    3. 생성을 클릭합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. 프로젝트 메뉴를 클릭하고 ServiceMeshControlPlane 리소스가 목록에서 배포되는 프로젝트를 선택합니다(예: istio-system ).
  5. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  6. Istio Service Mesh 멤버 롤 탭을 클릭합니다.
  7. ServiceMeshMemberRoll 생성을클릭합니다.
  8. Members(구성원 )를 클릭한 다음 Value(값 ) 필드에 프로젝트 이름을 입력합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  9. 생성을 클릭합니다.

2.5.7.2. CLI에서 멤버 롤 생성

명령줄에서 ServiceMeshMemberRoll에 프로젝트를 추가할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 서비스 메시에 추가할 프로젝트 목록.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.

    $ oc login https://{HOSTNAME}:6443
  2. 메시에 대한 서비스가 없거나 처음부터 시작하는 경우 프로젝트를 생성합니다. istio-system과 달라야 합니다.

    $ oc new-project {your-project}
  3. 프로젝트를 멤버로 추가하려면 다음 예제 YAML을 수정합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.

    servicemeshmemberroll-default.yaml 예

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

  4. 다음 명령을 실행하여 istio-system 네임스페이스에 ServiceMeshMemberRoll 리소스를 업로드하고 만듭니다.

    $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  5. 다음 명령을 실행하여 ServiceMeshMemberRoll이 성공적으로 생성되었는지 확인합니다.

    $ oc get smmr -n istio-system default

    STATUS 열이 Configured이면 설치가 성공적으로 완료되었습니다.

2.5.8. 서비스 메시에서 프로젝트 추가 또는 제거

웹 콘솔을 사용하여 기존 Service Mesh ServiceMeshMemberRoll 리소스에서 프로젝트를 추가하거나 제거할 수 있습니다.

  • 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  • 해당 ServiceMeshControlPlane 리소스가 삭제되면 ServiceMeshMemberRoll 리소스가 삭제됩니다.

2.5.8.1. 웹 콘솔을 사용하여 멤버 롤에서 프로젝트 추가 또는 제거

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 기존 ServiceMeshMemberRoll 리소스.
  • ServiceMeshMemberRoll 리소스를 사용한 프로젝트의 이름.
  • 메시에서 추가하거나 삭제하려는 프로젝트의 이름.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operators설치된 Operator로 이동합니다.
  3. 프로젝트 메뉴를 클릭하고 ServiceMeshControlPlane 리소스가 목록에서 배포되는 프로젝트를 선택합니다(예: istio-system ).
  4. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  5. Istio Service Mesh 멤버 롤 탭을 클릭합니다.
  6. default 링크를 클릭합니다.
  7. YAML 탭을 클릭합니다.
  8. YAML을 수정하여 프로젝트를 멤버로 추가하거나 제거합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.
  9. 저장을 클릭합니다.
  10. 새로 고침을 클릭합니다.

2.5.8.2. CLI를 사용하여 멤버 롤에서 프로젝트 추가 또는 제거

명령줄을 사용하여 기존 서비스 메시 멤버 롤을 수정할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh Operator 설치 및 검증.
  • 기존 ServiceMeshMemberRoll 리소스.
  • ServiceMeshMemberRoll 리소스를 사용한 프로젝트의 이름.
  • 메시에서 추가하거나 삭제하려는 프로젝트의 이름.
  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. ServiceMeshMemberRoll 리소스를 편집합니다.

    $ oc edit smmr -n <controlplane-namespace>
  3. YAML을 수정하여 프로젝트를 멤버로 추가하거나 제거합니다. 여러 프로젝트를 추가할 수 있지만 프로젝트는 하나ServiceMeshMemberRoll 리소스에만 속할 수 있습니다.

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

2.5.9. 수동 업데이트

수동으로 업데이트하는 경우 OLM(Operator Lifecycle Manager)은 클러스터에서 Operator의 설치, 업그레이드 및 역할 기반 액세스 제어(RBAC)를 제어합니다. OLM은 OpenShift Container Platform에서 기본적으로 실행됩니다. OLM은 Operator Registry API를 사용하는 CatalogSources를 통해 활용 가능한 Operator와 설치된 Operator의 업그레이드를 쿼리합니다.

  • OpenShift Container Platform의 업그레이드 처리 방법에 대한 자세한 내용은 Operator Lifecycle Manager 문서를 참조하십시오.

2.5.9.1. 애플리케이션 pod 업데이트

Operator를 설치할 때 자동 승인 전략을 선택한 경우 Operator는 컨트롤 플레인을 자동으로 업데이트하지만 애플리케이션을 업데이트하지 않습니다. 기존 애플리케이션은 계속 메시의 일부가 되고, 그에 따라 기능합니다. 애플리케이션 관리자는 사이드카를 업그레이드하려면 애플리케이션을 다시 시작해야 합니다.

배포에서 자동 사이드카 삽입을 사용하는 경우 주석을 추가하거나 수정하여 배포에서 Pod 템플릿을 업데이트할 수 있습니다. 다음 명령을 실행하여 pod를 다시 배포합니다.

$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'

배포에서 자동 사이드카 삽입을 사용하지 않는 경우, 배포 또는 Pod에 지정된 사이드카 컨테이너 이미지를 수정하여 사이드카를 수동으로 업데이트해야 합니다.

2.5.10. 다음 단계

2.6. 서비스 메시에서 보안 사용자 정의

서비스 메시 애플리케이션이 복잡한 마이크로 서비스를 사용하여 구성된 경우 Red Hat OpenShift Service Mesh를 사용하여 해당 서비스 간 통신 보안을 사용자 지정할 수 있습니다. 서비스 메시의 트래픽 관리 기능과 함께 OpenShift Container Platform의 인프라는 애플리케이션의 복잡성을 관리하고 마이크로서비스에 서비스 및 ID 보안을 제공할 수 있습니다.

2.6.1. mTLS(mutual Transport Layer Security) 활성화

mTLS(mutual Transport Layer Security)은 두 당사자가 서로 인증하는 프로토콜입니다. 일부 프로토콜(IKE, SSH)에서는 기본 인증 모드이며, 다른 프로토콜(TLS)에서는 선택적입니다.

mTLS는 애플리케이션이나 서비스 코드에 대한 변경 없이 사용할 수 있습니다. TLS는 서비스 메시 인프라와 두 사이드카 프록시 사이에서 전적으로 처리됩니다.

기본적으로 Red Hat OpenShift Service Mesh가 허용 모드로 설정됩니다. 여기서 서비스 메시의 사이드카는 일반 텍스트 트래픽과 mTLS를 사용하여 암호화된 연결을 모두 허용합니다. 메시의 서비스가 메시 외부 서비스와 통신하는 경우 엄격한 mTLS가 해당 서비스 간의 통신을 중단할 수 있습니다. 워크로드를 서비스 메시로 마이그레이션하는 동안 허용 모드를 사용합니다.

2.6.1.1. 메시에서 엄격한 mTLS 활성화

워크로드가 메시 외부의 서비스와 통신하지 않고 암호화된 연결만 수락하여 통신이 중단되지 않는 경우 메시 전체에서 mTLS를 빠르게 활성화할 수 있습니다. ServiceMeshControlPlane 리소스에서 spec.istio.global.mtls.enabledtrue로 설정합니다. Operator는 필요한 리소스를 생성합니다.

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
spec:
  istio:
    global:
      mtls:
        enabled: true
2.6.1.1.1. 특정 서비스의 수신 연결에 대해 사이드카 구성

정책을 생성하여 개별 서비스 또는 네임스페이스에 대해 mTLS를 구성할 수도 있습니다.

apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: default
  namespace: <NAMESPACE>
spec:
  peers:
    - mtls: {}

2.6.1.2. 발신 연결에 대한 사이드카 구성

메시에서 다른 서비스로 요청을 보낼 때 mTLS를 사용하도록 서비스 메시를 구성하는 대상 규칙을 생성합니다.

apiVersion: "networking.istio.io/v1alpha3"
kind: "DestinationRule"
metadata:
  name: "default"
  namespace: <CONTROL_PLANE_NAMESPACE>>
spec:
  host: "*.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

2.6.1.3. 최소 및 최대 프로토콜 버전 설정

사용자 환경에 서비스 메시의 암호화된 트래픽에 대한 특정 요구 사항이 있는 경우 ServiceMeshControlPlane 리소스에 spec.security.controlPlane.tls.minProtocolVersion 또는 spec.security.controlPlane.tls.maxProtocolVersion을 설정하여 허용되는 암호화 기능을 제어할 수 있습니다. 컨트롤 플레인 리소스에 구성된 해당 값은 TLS를 통해 안전하게 통신할 때 메시 구성 요소에서 사용하는 최소 및 최대 TLS 버전을 정의합니다.

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic-install
  namespace: istio-system
spec:
  security:
    controlPlane:
      tls:
        minProtocolVersion: TLSv1_2
        maxProtocolVersion: TLSv1_3

기본값은 TLS_AUTO이며 TLS 버전을 지정하지 않습니다.

표 2.3. 유효한 값

설명

TLS_AUTO

default

TLSv1_0

TLS 버전 1.0

TLSv1_1

TLS 버전 1.1

TLSv1_2

TLS 버전 1.2

TLSv1_3

TLS 버전 1.3

2.6.2. 암호화 제품군 및 ECDH 곡선 구성

암호화 제품군 및 ECDH(Elliptic-curve Diffie–Hellman) 곡선은 서비스 메시를 보호하는 데 도움이 될 수 있습니다. ServiceMeshControlPlane 리소스에서 spec.istio.global.tls.cipherSuites를 사용하는 암호화 제품군과 spec.istio.global.tls.ecdhCurves를 사용하는 ECDH 곡선을 쉼표로 구분된 목록으로 정의할 수 있습니다. 이러한 속성 중 하나가 비어 있으면 기본값이 사용됩니다.

서비스 메시에서 TLS 1.2 또는 이전 버전을 사용하는 경우 cipherSuites 설정이 적용됩니다. TLS 1.3을 사용할 때는 효과가 없습니다.

우선순위에 따라 암호화 제품군을 쉼표로 구분된 목록으로 설정합니다. 예를 들어 ecdhCurves: CurveP256, CurveP384CurveP256CurveP384보다 높은 우선순위로 설정합니다.

참고

암호화 제품군을 구성할 때 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 또는 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256을 포함해야 합니다. HTTP/2 지원에는 이러한 암호화 제품군 중 하나 이상이 필요합니다.

지원되는 암호화 제품군은 다음과 같습니다.

  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA

지원되는 ECDH 곡선은 다음과 같습니다.

  • CurveP256
  • CurveP384
  • CurveP521
  • X25519

2.6.3. 외부 인증 기관 키 및 인증서 추가

기본적으로 Red Hat OpenShift Service Mesh는 자체 서명된 루트 인증서와 키를 생성하여 이를 사용하여 워크로드 인증서에 서명합니다. 사용자 정의 인증서와 키를 사용하여 사용자 정의 루트 인증서로 워크로드 인증서에 서명할 수도 있습니다. 이 작업은 인증서와 키를 서비스 메시에 연결하는 예제를 보여줍니다.

사전 요구 사항

  • 인증서를 구성하려면 상호 TLS가 활성화된 Red Hat OpenShift Service Mesh를 설치합니다.
  • 이 예제에서는 Maistra 리포지토리의 인증서를 사용합니다. 프로덕션의 경우 인증 기관의 자체 인증서를 사용합니다.
  • Bookinfo 샘플 애플리케이션을 배포하여 이러한 지침으로 결과를 확인합니다.

2.6.3.1. 기존 인증서 및 키 추가

기존 서명(CA) 인증서 및 키를 사용하려면 CA 인증서, 키, 루트 인증서가 포함된 신뢰 파일 체인을 생성해야 합니다. 해당 인증서 각각에 대해 다음과 같은 정확한 파일 이름을 사용해야 합니다. CA 인증서의 이름은 ca-cert.pem이고 키는 ca-key.pem이며 ca-cert.pem에 서명하는 루트 인증서의 이름은 root-cert.pem입니다. 워크로드에서 중개 인증서를 사용하는 경우 cert-chain.pem 파일에 인증서를 지정해야 합니다.

다음 단계에 따라 서비스 메시에 인증서를 추가합니다. Maistra 리포지토리에서 로컬로 예제 인증서를 저장하고 <path>를 인증서 경로로 바꿉니다.

  1. 입력 파일 ca-cert.pem, ca-key.pem, root-cert.pem, cert-chain.pem을 포함하는 시크릿 cacert를 생성합니다.

    $ oc create secret generic cacerts -n istio-system --from-file=<path>/ca-cert.pem \
        --from-file=<path>/ca-key.pem --from-file=<path>/root-cert.pem \
        --from-file=<path>/cert-chain.pem
  2. ServiceMeshControlPlane 리소스에서 spec.security.dataPlane.mtls: truetrue로 설정하고 다음 예제와 같이 certificateAuthority를 구성합니다. 기본 rootCADir/etc/cacerts입니다. 키와 인증서가 기본 위치에 마운트된 경우 privateKey를 설정할 필요가 없습니다. 서비스 메시는 secret-mount 파일에서 인증서와 키를 읽습니다.

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    spec:
      security:
        dataPlane:
          mtls: true
        certificateAuthority:
          type: Istiod
          istiod:
            type: PrivateKey
            privateKey:
              rootCADir:  /etc/cacerts
  3. 워크로드에 새 인증서를 즉시 추가하려면 서비스 메시에서 생성한 istio.*라는 시크릿을 삭제합니다. 이 예제에서는 istio.default 입니다. 서비스 메시는 워크로드에 대한 새 인증서를 발행합니다.

    $ oc delete secret istio.default

2.6.3.2. 인증서 확인

Bookinfo 샘플 애플리케이션을 사용하여 인증서가 올바르게 마운트되었는지 확인합니다. 먼저 마운트된 인증서를 검색합니다. 그런 다음 pod에 마운트된 인증서를 확인합니다.

  1. pod 이름을 변수 RATINGSPOD에 저장합니다.

    $ RATINGSPOD=`oc get pods -l app=ratings -o jsonpath='{.items[0].metadata.name}'`
  2. 다음 명령을 실행하여 프록시에 마운트된 인증서를 검색합니다.

    $ oc exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /var/run/secrets/istio/root-cert.pem > /tmp/pod-root-cert.pem

    /tmp/pod-root-cert.pem 파일에는 Pod로 전달된 루트 인증서가 포함되어 있습니다.

    $ oc exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /etc/certs/cert-chain.pem > /tmp/pod-cert-chain.pem

    /tmp/pod-cert-chain.pem 파일에는 Pod로 전달된 워크로드 인증서와 CA 인증서가 포함되어 있습니다.

  3. 루트 인증서가 Operator가 지정한 것과 동일한지 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ openssl x509 -in <path>/root-cert.pem -text -noout > /tmp/root-cert.crt.txt
    $ openssl x509 -in /tmp/pod-root-cert.pem -text -noout > /tmp/pod-root-cert.crt.txt
    $ diff /tmp/root-cert.crt.txt /tmp/pod-root-cert.crt.txt

    출력 대상이 비어 있을 것으로 예상됩니다.

  4. CA 인증서가 Operator가 지정한 것과 동일한지 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ sed '0,/^-----END CERTIFICATE-----/d' /tmp/pod-cert-chain.pem > /tmp/pod-cert-chain-ca.pem
    $ openssl x509 -in <path>/ca-cert.pem -text -noout > /tmp/ca-cert.crt.txt
    $ openssl x509 -in /tmp/pod-cert-chain-ca.pem -text -noout > /tmp/pod-cert-chain-ca.crt.txt
    $ diff /tmp/ca-cert.crt.txt /tmp/pod-cert-chain-ca.crt.txt

    출력 대상이 비어 있을 것으로 예상됩니다.

  5. 루트 인증서에서 워크로드 인증서로의 인증서 체인을 확인합니다. <path>를 인증서 경로로 교체합니다.

    $ head -n 21 /tmp/pod-cert-chain.pem > /tmp/pod-cert-chain-workload.pem
    $ openssl verify -CAfile <(cat <path>/ca-cert.pem <path>/root-cert.pem) /tmp/pod-cert-chain-workload.pem

    출력 예

    /tmp/pod-cert-chain-workload.pem: OK

2.6.3.3. 인증서 제거

추가한 인증서를 제거하려면 다음 단계를 따르십시오.

  1. 시크릿 cacerts를 제거합니다.

    $ oc delete secret cacerts -n istio-system
  2. ServiceMeshControlPlane 리소스에서 자체 서명된 루트 인증서로 서비스 메시를 재배포합니다.

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    spec:
      dataPlane:
        mtls: true

2.7. 트래픽 관리

Red Hat OpenShift Service Mesh의 서비스 간 트래픽 및 API 호출 흐름을 제어할 수 있습니다. 예를 들어, 서비스 메시의 일부 서비스는 메시 내에서 통신해야 하며 다른 서비스는 숨겨야 할 수 있습니다. 트래픽을 관리하여 특정 백엔드 서비스를 숨기고, 서비스를 노출하며, 테스트 또는 버전 관리 배포를 생성하거나 서비스 세트에 보안 계층을 추가합니다.

이 안내서는 Bookinfo 샘플 애플리케이션을 참조하여 예제 애플리케이션에 라우팅 예제를 제공합니다. Bookinfo 애플리케이션을 설치하여 이러한 라우팅 예제가 어떻게 작동하는지 알아봅니다.

2.7.1. 트래픽 라우팅 및 관리

YAML 파일에서 사용자 지정 리소스 정의를 사용하여 Red Hat OpenShift Service Mesh에 자체 트래픽 구성을 추가하여 서비스 메시를 구성합니다.

2.7.1.1. 가상 서비스의 트래픽 관리

가상 서비스가 있는 Red Hat OpenShift Service Mesh를 통해 여러 버전의 마이크로 서비스로 요청을 동적으로 라우팅할 수 있습니다. 가상 서비스를 사용하면 다음을 수행할 수 있습니다.

  • 단일 가상 서비스를 통해 여러 애플리케이션 서비스를 처리합니다. 예를 들어 메시에서 Kubernetes를 사용하는 경우 특정 네임스페이스의 모든 서비스를 처리하도록 가상 서비스를 구성할 수 있습니다. 가상 서비스를 사용하면 모놀리식 애플리케이션을 원활한 소비자 환경을 통해 별도의 마이크로 서비스로 구성된 서비스로 전환할 수 있습니다.
  • 게이트웨이와 결합하여 트래픽 규칙을 구성하고 수신 및 송신 트래픽을 제어합니다.
2.7.1.1.1. 가상 서비스 구성

요청은 가상 서비스를 사용하여 서비스 메시 내에서 서비스로 라우팅됩니다. 각 가상 서비스는 순서대로 평가되는 라우팅 규칙 세트로 구성됩니다. Red Hat OpenShift Service Mesh는 가상 서비스에 대해 주어진 각 요청을 메시 내의 실제 특정 대상에 연결합니다.

가상 서비스가 없는 Red Hat OpenShift Service Mesh는 모든 서비스 인스턴스 간에 라운드 로빈 로드 밸런싱을 사용하여 트래픽을 배포합니다. 가상 서비스에서는 하나 이상의 호스트 이름에 대한 트래픽 동작을 지정할 수 있습니다. 가상 서비스의 라우팅 규칙은 가상 서비스에 대한 트래픽을 적절한 대상으로 전송하는 방법을 Red Hat OpenShift Service Mesh에 알립니다. 경로 대상은 동일한 서비스 또는 완전히 다른 서비스 버전일 수 있습니다.

프로세스

  1. 다음 예제를 사용하여 애플리케이션에 연결하는 사용자에 따라 Bookinfo 샘플 애플리케이션 서비스의 다양한 버전으로 요청을 라우팅하도록 YAML 파일을 만듭니다.

    예: VirtualService.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - match:
        - headers:
            end-user:
              exact: jason
        route:
        - destination:
            host: reviews
            subset: v2
      - route:
        - destination:
            host: reviews
            subset: v3

  2. 다음 명령을 실행하여 VirtualService.yaml을 적용합니다. 여기서 VirtualService.yaml은 파일 경로입니다.

    $ oc apply -f VirtualService.yaml

2.7.1.2. 가상 호스트 구성

다음 섹션에서는 YAML 파일의 각 필드에 대해 설명하고 가상 서비스에서 가상 호스트를 생성하는 방법을 설명합니다.

2.7.1.2.1. 호스트

hosts 필드에는 라우팅 규칙이 적용되는 가상 서비스의 대상 주소가 나열됩니다. 이는 서비스에 요청을 보내는 데 사용되는 주소입니다.

가상 서비스 호스트 이름은 정규화된 도메인 이름으로 확인되는 IP 주소, DNS 이름 또는 짧은 이름일 수 있습니다.

spec:
  hosts:
  - reviews
2.7.1.2.2. 라우팅 규칙

http 섹션에는 hosts 필드에 지정된 대로 대상에 전송된 HTTP/1.1, HTTP2 및 gRPC 트래픽을 라우팅하기 위한 일치 조건 및 작업을 설명하는 가상 서비스의 라우팅 규칙이 포함되어 있습니다. 라우팅 규칙은 트래픽을 이동할 대상과 지정된 일치 조건으로 구성됩니다.

일치 조건

예제의 첫 번째 라우팅 규칙에는 match 필드로 시작하는 조건이 있습니다. 이 예제에서 이 라우팅은 사용자 jason의 모든 요청에 적용됩니다. headers, end-user, exact 필드를 추가하여 적절한 요청을 선택합니다.

spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
      end-user:
        exact: jason

대상

경로 섹션의 destination 필드는 이 조건과 일치하는 트래픽에 대한 실제 대상을 지정합니다. 가상 서비스의 호스트와 달리 대상 호스트는 Red Hat OpenShift Service Mesh 서비스 레지스트리에 있는 실제 대상이어야 합니다. 프록시가 있는 메시 서비스 또는 서비스 항목을 사용하여 추가된 비 메시 서비스일 수 있습니다. 이 예제에서 호스트 이름은 Kubernetes 서비스 이름입니다.

spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
      end-user:
        exact: jason
    route:
    - destination:
      host: reviews
      subset: v2
2.7.1.2.3. 대상 규칙

대상 규칙은 가상 서비스 라우팅 규칙이 평가된 후에 적용되므로 트래픽의 실제 대상에 적용됩니다. 가상 서비스는 트래픽을 대상으로 라우팅합니다. 대상 규칙은 해당 대상의 트래픽에 발생하는 요소를 설정합니다.

2.7.1.2.3.1. 로드 밸런싱 옵션

기본적으로 Red Hat OpenShift Service Mesh는 풀의 각 서비스 인스턴스가 차례대로 요청을 받는 라운드 로빈 로드 밸런싱 정책을 사용합니다. 또한 Red Hat OpenShift Service Mesh는 특정 서비스 또는 서비스 하위 집합에 대한 요청의 대상 규칙에 지정할 수 있는 다음과 같은 모델을 지원합니다.

  • Random: 요청은 풀의 인스턴스에 무작위로 전달됩니다.
  • Weighted: 요청은 구체적인 비율에 따라 풀의 인스턴스로 전달됩니다.
  • Least requests: 요청은 요청 수가 가장 적은 인스턴스로 전달됩니다.

대상 규칙 예

다음 예제 대상 규칙은 서로 다른 로드 밸런싱 정책을 사용하여 my-svc 대상 서비스에 대해 세 가지 다른 하위 집합을 구성합니다.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3
2.7.1.2.4. 게이트웨이

게이트웨이를 사용하여 메시에 대한 인바운드 및 아웃바운드 트래픽을 관리하여 메시에 들어가거나 나가려는 트래픽을 지정할 수 있습니다. 게이트웨이 구성은 서비스 워크로드와 함께 실행되는 사이드카 Envoy 프록시가 아닌, 메시의 에지에서 실행되는 독립 실행형 Envoy 프록시에 적용됩니다.

Kubernetes Ingress API와 같이 시스템으로 들어오는 트래픽을 제어하는 다른 메커니즘과 달리 Red Hat OpenShift Service Mesh 게이트웨이를 사용하면 트래픽 라우팅의 모든 기능과 유연성을 사용할 수 있습니다. Red Hat OpenShift Service Mesh 게이트웨이 리소스는 Red Hat OpenShift Service Mesh TLS 설정을 노출하고 구성하기 위해 포트와 같은 4-6개의 부하 분산 속성을 계층화할 수 있습니다. 애플리케이션 계층 트래픽 라우팅(L7)을 동일한 API 리소스에 추가하는 대신, 일반 Red Hat OpenShift Service Mesh 가상 서비스를 게이트웨이에 바인딩하고 서비스 메시의 다른 데이터 플레인 트래픽처럼 게이트웨이 트래픽을 관리할 수 있습니다.

게이트웨이는 주로 수신 트래픽을 관리하는 데 사용되지만 송신 게이트웨이를 구성할 수도 있습니다. 송신 게이트웨이를 사용하면 메시를 나가는 트래픽에 대해 전용 종료 노드를 구성할 수 있습니다. 이를 통해 외부 네트워크에 대한 액세스 권한이 있는 서비스를 제한하여 서비스 메시에 보안 제어를 추가할 수 있습니다. 게이트웨이를 사용하여 전적으로 내부 프록시를 구성할 수도 있습니다.

게이트웨이 예제

다음 예는 외부 HTTPS 수신 트래픽에 대한 샘플 게이트웨이 구성을 보여줍니다.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: ext-host-gwy
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
    number: 443
    name: https
    protocol: HTTPS
    hosts:
    - ext-host.example.com
    tls:
      mode: SIMPLE
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key

이 게이트웨이 구성으로 ext-host.example.com의 HTTPS 트래픽을 포트 443의 메시로 허용할 수 있지만 트래픽에 라우팅을 지정하지 않습니다.

라우팅을 지정하고 게이트웨이가 의도한 대로 작동하려면 게이트웨이도 가상 서비스에 바인딩해야 합니다. 다음 예와 같이 가상 서비스의 게이트웨이 필드를 사용하여 이 작업을 수행합니다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: virtual-svc
spec:
  hosts:
  - ext-host.example.com
  gateways:
    - ext-host-gwy

그러면 외부 트래픽에 대한 라우팅 규칙으로 가상 서비스를 구성할 수 있습니다.

2.7.1.2.5. 서비스 항목

서비스 항목은 Red Hat OpenShift Service Mesh가 내부적으로 관리하는 서비스 레지스트리에 항목을 추가합니다. 서비스 항목을 추가한 후 Envoy 프록시는 메시의 서비스인 것처럼 서비스에 트래픽을 전송합니다. 서비스 항목을 사용하면 다음을 수행할 수 있습니다.

  • 서비스 메시 외부에서 실행되는 서비스의 트래픽을 관리합니다.
  • 외부 대상(예: 웹에서 소비된 API) 또는 레거시 인프라의 서비스에 대한 트래픽을 리디렉션하고 전달합니다.
  • 외부 대상에 대한 재시도, 시간 초과 및 오류 삽입 정책을 정의합니다.
  • VM(가상 머신)에서 메시에 VM을 추가하여 메시 서비스를 실행합니다.
참고

Kubernetes에서 다중 클러스터 Red Hat OpenShift Service Mesh 메시를 구성하기 위해 다른 클러스터의 서비스를 메시에 추가합니다.

서비스 항목 예

다음 예제 mesh-external 서비스 항목은 ext-resource 외부 종속성을 Red Hat OpenShift Service Mesh 서비스 레지스트리에 추가합니다.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: svc-entry
spec:
  hosts:
  - ext-svc.example.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS

호스트 필드를 사용하여 외부 리소스를 지정합니다. 완전히 한정하거나 와일드카드 접두사 도메인 이름을 사용할 수 있습니다.

메시의 다른 서비스에 대한 트래픽을 구성하는 것과 동일한 방식으로 서비스 항목에 대한 트래픽을 제어하도록 가상 서비스 및 대상 규칙을 구성할 수 있습니다. 예를 들어 다음 대상 규칙은 서비스 항목을 사용하여 구성된 ext-svc.example.com 외부 서비스에 대한 연결을 보호하기 위해 상호 TLS를 사용하도록 트래픽 경로를 구성합니다.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ext-res-dr
spec:
  host: ext-svc.example.com
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem

2.7.2. 게이트웨이를 사용하여 수신 구성

수신 게이트웨이는 들어오는 HTTP/TCP 연결을 수신하는 메시의 에지에서 작동하는 로드 밸런서입니다. 노출된 포트와 프로토콜을 구성하지만 트래픽 라우팅 구성은 포함하지 않습니다. 수신 트래픽의 트래픽 라우팅은 내부 서비스 요청과 동일한 방식으로 라우팅 규칙으로 구성됩니다.

다음 단계에서는 게이트웨이를 만들고 Bookinfo 샘플 애플리케이션에서 서비스를 /productpage 및 / login 경로의 외부 트래픽에 노출하도록 VirtualService를 구성하는 방법을 보여줍니다.

프로세스

  1. 게이트웨이를 만들어 트래픽을 수락합니다.

    1. YAML 파일을 생성하고 다음 YAML을 여기에 복사합니다.

      게이트웨이 예제 gateway.yaml

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: bookinfo-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"

    2. YAML 파일을 적용합니다.

      $ oc apply -f gateway.yaml
  2. VirtualService 오브젝트를 만들어 호스트 헤더를 다시 작성합니다.

    1. YAML 파일을 생성하고 다음 YAML을 여기에 복사합니다.

      가상 서비스 예 vs.yaml

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: bookinfo
      spec:
        hosts:
        - "*"
        gateways:
        - bookinfo-gateway
        http:
        - match:
          - uri:
              exact: /productpage
          - uri:
              prefix: /static
          - uri:
              exact: /login
          - uri:
              exact: /logout
          - uri:
              prefix: /api/v1/products
          route:
          - destination:
              host: productpage
              port:
                number: 9080

    2. YAML 파일을 적용합니다.

      $ oc apply -f vs.yaml
  3. 게이트웨이와 VirtualService가 올바르게 설정되었는지 확인합니다.

    1. 게이트웨이 URL을 설정합니다.

      export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
    2. 포트 번호를 설정합니다.

      export TARGET_PORT=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.port.targetPort}')
    3. 명시적으로 노출된 페이지를 테스트합니다.

      curl -s -I "$GATEWAY_URL/productpage"

      예상 결과는 200입니다.

2.7.3. 라우팅 튜토리얼

Service Mesh Bookinfo 샘플 애플리케이션은 각각 여러 가지 버전이 있는 네 개의 마이크로 서비스로 구성됩니다. Bookinfo 샘플 애플리케이션을 설치한 후에는 reviews 마이크로 서비스의 세 가지 버전이 동시에 실행됩니다.

브라우저에서 Bookinfo 앱 /product 페이지에 액세스하여 여러 번 새로 고침하면 도서 검토 출력에 별 등급과 다른 경우가 포함되어 있습니다. 라우팅할 명시적인 기본 서비스 버전이 없으면 서비스 메시는 사용 가능한 모든 버전으로 차례대로 요청을 라우팅합니다.

이 튜토리얼은 모든 트래픽을 마이크로 서비스의 v1(버전 1)으로 라우팅하는 규칙을 적용하는 데 도움이 됩니다. 나중에 HTTP 요청 헤더의 값을 기반으로 트래픽을 라우팅하는 규칙을 적용할 수 있습니다.

사전 요구 사항:

  • 다음 예제에서 작동하도록 Bookinfo 샘플 애플리케이션을 배포하십시오.

2.7.4. 수신 트래픽 관리

Red Hat OpenShift Service Mesh에서 Ingress 게이트웨이를 사용하면 모니터링, 보안 및 경로 규칙과 같은 기능을 사용하여 클러스터에 들어오는 트래픽에 적용할 수 있습니다. 서비스 메시 게이트웨이를 사용하여 서비스 메시 외부에서 서비스를 노출합니다.

2.7.4.1. 수신 IP 및 포트 확인

인그레스 구성은 환경에서 외부 로드 밸런서를 지원하는지 여부에 따라 다릅니다. 외부 로드 밸런서는 클러스터의 수신 IP 및 포트에 설정됩니다. 클러스터의 IP 및 포트가 외부 로드 밸런서에 구성되어 있는지 확인하려면 다음 명령을 실행합니다.

$ oc get svc istio-ingressgateway -n istio-system

해당 명령은 네임스페이스에 있는 각 항목의 NAME, TYPE, CLUSTER-IP, EXTERNAL-IP, PORT(S), AGE를 반환합니다.

EXTERNAL-IP 값이 설정되면 해당 환경에 수신 게이트웨이에 사용할 수 있는 외부 로드 밸런서가 있습니다.

EXTERNAL-IP 값이 <none> 또는 영구적으로 <pending>인 경우, 해당 환경은 수신 게이트웨이에 외부 로드 밸런서를 제공하지 않습니다. 서비스의 노드 포트를 사용하여 게이트웨이에 액세스할 수 있습니다.

환경에 따라 인그레스를 결정합니다. 로드 밸런서가 지원되는 환경의 경우 로드 밸런서를 사용하여 수신 포트를 결정합니다. 로드 밸런서가 지원되지 않는 환경의 경우 로드 밸런서 없이 인그레스 포트를 결정합니다. 수신 포트를 확인한 후 게이트웨이를 사용한 수신 구성을 참조하십시오.

2.7.4.1.1. 로드 밸런서를 사용하여 수신 포트 확인

환경에 외부 로드 밸런서가 있는 경우 다음 지침을 따릅니다.

프로세스

  1. 다음 명령을 실행하여 수신 IP 및 포트를 설정합니다. 이 명령은 터미널에 변수를 설정합니다.

    $ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. 다음 명령을 실행하여 수신 포트를 설정합니다.

    $ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
  3. 다음 명령을 실행하여 보안 수신 포트를 설정합니다.

    $ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
  4. 다음 명령을 실행하여 TCP 수신 포트를 설정합니다.

    $ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].port}')
참고

일부 환경에서는 IP 주소 대신 호스트 이름을 사용하여 로드 밸런서가 노출될 수 있습니다. 이 경우 수신 게이트웨이의 EXTERNAL-IP 값은 IP 주소가 아닙니다. 호스트 이름입니다. 이전 명령은 INGRESS_HOST 환경 변수를 설정하지 못합니다.

이 경우 다음 명령을 사용하여 INGRESS_HOST 값을 수정합니다.

$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
2.7.4.1.2. 로드 밸런서 없이 수신 포트 확인

환경에 외부 로드 밸런서가 없는 경우 수신 포트를 확인하고 대신 노드 포트를 사용합니다.

프로세스

  1. 수신 포트를 설정합니다.

    $ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
  2. 다음 명령을 실행하여 보안 수신 포트를 설정합니다.

    $ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
  3. 다음 명령을 실행하여 TCP 수신 포트를 설정합니다.

    $ export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')

2.7.5. 자동 경로 생성

Istio 게이트웨이의 OpenShift 경로는 Red Hat OpenShift Service Mesh에서 자동으로 관리됩니다. Istio 게이트웨이가 서비스 메시 내부에서 생성, 업데이트 또는 삭제될 때마다 OpenShift 경로가 생성, 업데이트 또는 삭제됩니다.

2.7.5.1. 자동 경로 생성 활성화

IOR(Istio OpenShift Routing)이라는 Red Hat OpenShift Service Mesh Control Plane 구성 요소는 게이트웨이 경로를 동기화합니다. 컨트롤 플레인 배포의 일부로 IOR을 활성화합니다.

게이트웨이에 TLS 섹션이 포함된 경우 OpenShift 경로는 TLS를 지원하도록 구성됩니다.

  1. ServiceMeshControlPlane리소스에서 ior_enabled 매개변수를 추가하고 true로 설정합니다. 예를 들어, 다음 리소스 스니펫을 참조하십시오.
spec:
  istio:
    gateways:
     istio-egressgateway:
       autoscaleEnabled: false
       autoscaleMin: 1
       autoscaleMax: 5
     istio-ingressgateway:
       autoscaleEnabled: false
       autoscaleMin: 1
       autoscaleMax: 5
       ior_enabled: true

2.7.5.2. 하위 도메인

Red Hat OpenShift Service Mesh 는 하위 도메인으로 경로를 생성하지만 이를 활성화하려면 OpenShift Container Platform을 구성해야 합니다. 하위 도메인(예: *.domain.com)은 지원되지만 기본적으로 아닙니다. 와일드카드 호스트 게이트웨이를 구성하기 전에 OpenShift Container Platform 와일드카드 정책을 구성합니다. 자세한 내용은 "링크" 섹션을 참조하십시오.

다음 게이트웨이가 생성되는 경우:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway1
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - www.bookinfo.com
    - bookinfo.example.com

이제 다음 OpenShift 경로가 자동으로 생성됩니다. 다음 명령을 사용하여 경로가 생성되었는지 확인할 수 있습니다.

$ oc -n <control_plane_namespace> get routes

예상 출력

NAME           HOST/PORT             PATH  SERVICES               PORT  TERMINATION   WILDCARD
gateway1-lvlfn bookinfo.example.com        istio-ingressgateway   <all>               None
gateway1-scqhv www.bookinfo.com            istio-ingressgateway   <all>               None

게이트웨이가 삭제되면 Red Hat OpenShift Service Mesh가 경로를 삭제합니다. 그러나 수동으로 생성된 경로는 Red Hat OpenShift Service Mesh에 의해 수정되지 않습니다.

2.8. Red Hat OpenShift Service Mesh에 애플리케이션 배포

Service Mesh에 애플리케이션을 배포할 때 Istio의 업스트림 커뮤니티 버전과 Red Hat OpenShift Service Mesh 설치 내의 애플리케이션 동작 간의 몇 가지 차이점이 있습니다.

2.8.1. 사전 요구 사항

2.8.2. 컨트롤 플레인 템플릿 생성

ServiceMeshControlPlane 템플릿을 사용하여 재사용 가능한 구성을 생성할 수 있습니다. 개별 사용자는 생성한 템플릿을 자체 구성으로 확장할 수 있습니다. 템플릿은 다른 템플릿의 구성 정보를 상속할 수도 있습니다. 예를 들어, 회계 팀에 대한 계정 컨트롤 플레인과 마케팅 팀에 대한 마케팅 컨트롤 플레인을 생성할 수 있습니다. 개발 템플릿과 프로덕션 템플릿을 생성하는 경우 마케팅 팀과 회계 팀의 구성원은 팀별 사용자 지정을 통해 개발 및 프로덕션 템플릿을 확장할 수 있습니다.

ServiceMeshControlPlane과 동일한 구문을 따르는 컨트롤 플레인 템플릿을 구성하면, 사용자는 계층적으로 설정을 상속합니다. Operator는 Red Hat OpenShift Service Mesh의 기본 설정이 포함된 default 템플릿과 함께 제공됩니다. 사용자 지정 템플릿을 추가하려면 openshift-operators 프로젝트에서 smcp-templates라는 ConfigMap을 생성하고 /usr/local/share/istio-operator/templates에서 Operator 컨테이너에 ConfigMap을 마운트해야 합니다.

2.8.2.1. ConfigMap 생성

다음 절차에 따라 ConfigMap을 생성합니다.

사전 요구 사항

  • Service Mesh Operator 설치 및 검증.
  • cluster-admin 역할이 있는 계정.
  • Operator 배포 위치.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 클러스터 관리자로 로그인합니다.
  2. CLI에서 이 명령을 실행하여 openshift-operators 프로젝트에서 smcp-templates라는 ConfigMap을 생성하고 <templates-directory>를 로컬 디스크의 ServiceMeshControlPlane 파일의 위치로 교체합니다.

    $ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
  3. Operator ClusterServiceVersion 이름을 찾습니다.

    $ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'

    출력 예

    maistra.v1.0.0            Red Hat OpenShift Service Mesh   1.0.0                Succeeded

  4. Operator 클러스터 서비스 버전을 편집하여 Operator에서 smcp-templates ConfigMap을 사용하도록 지시합니다.

    $ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
  5. Operator 배포에 볼륨 마운트 및 볼륨을 추가합니다.

    deployments:
      - name: istio-operator
        spec:
          template:
            spec:
              containers:
                volumeMounts:
                  - name: discovery-cache
                    mountPath: /home/istio-operator/.kube/cache/discovery
                  - name: smcp-templates
                    mountPath: /usr/local/share/istio-operator/templates/
              volumes:
                - name: discovery-cache
                  emptyDir:
                    medium: Memory
                - name: smcp-templates
                  configMap:
                    name: smcp-templates
    ...
  6. 변경 사항을 저장하고 편집기를 종료합니다.
  7. 이제 ServiceMeshControlPlane에서 template 매개변수를 사용하여 템플릿을 지정할 수 있습니다.

    apiVersion: maistra.io/v1
    kind: ServiceMeshControlPlane
    metadata:
      name: minimal-install
    spec:
      template: default

2.8.3. 자동 사이드카 삽입 활성화

애플리케이션을 배포할 때 sidecar.istio.io/inject 주석을 "true"로 설정하여 삽입을 선택해야합니다. 이 설정을 통해 사이드카 삽입이 OpenShift 에코시스템 내 여러 프레임 워크에서 사용되는 builder pod와 같은 다른 OpenShift 기능을 방해하지 않도록 할 수 있습니다.

사전 요구 사항

  • 자동 사이드카 삽입을 활성화하려는 배포를 식별합니다.

프로세스

  1. 편집기에서 애플리케이션의 배포 구성 YAML 파일을 엽니다. 배포를 찾으려면 oc get 명령을 사용합니다. 예를 들어 절전 네임스페이스에서 sleep 이라는 앱의 경우 다음 명령을 사용하여 YAML 형식의 리소스를 확인합니다.

    oc get deployment sleep -o yaml
  2. spec.template.metadata.annotations.sidecar.istio/inject 필드에서 값이 "true"인 구성 YAML에 sidecar.istio.io /inject를 추가합니다. sleep이라는 앱의 예는 다음 예를 참조하십시오.

    절전 테스트 애플리케이션 예 sleep.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: sleep
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true"
          labels:
            app: sleep
        spec:
          containers:
          - name: sleep
            image: curlimages/curl
            command: ["/bin/sleep","3650d"]
            imagePullPolicy: IfNotPresent

  3. 구성 파일을 저장합니다.
  4. 앱을 포함하는 프로젝트에 파일을 다시 추가합니다. 이 예에서 sleep은 sleep 앱과 sleep .yaml이 포함된 프로젝트의 이름입니다.

    $ oc apply -n sleep -f sleep.yaml
  5. 리소스가 업로드되었는지 확인하려면 다음 명령을 실행합니다.

    oc get deployment sleep -o yaml

2.8.4. 주석을 통해 애플리케이션의 프록시에서 환경 변수 설정

injection-template.yaml 파일 배포에 Pod 주석을 추가하여 애플리케이션의 사이드카 프록시에서 환경 변수를 설정할 수 있습니다. 환경 변수가 사이드카에 삽입됩니다.

예: injection-template.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: resource
spec:
  replicas: 7
  selector:
    matchLabels:
      app: resource
  template:
    metadata:
      annotations:
        sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"

주의

maistra.io/ 레이블 및 주석은 Operator에서 리소스를 생성하고 관리한다는 것을 나타내기 때문에 사용자 생성 리소스에 포함되지 않아야 합니다. 자체 리소스를 생성할 때 Operator 생성 리소스에서 콘텐츠를 복사하는 경우, maistra.io/로 시작하는 레이블이나 주석을 포함하지 마십시오. 그렇지 않으면 다음 조정 중에 Operator에 의해 덮어쓰거나 삭제됩니다.

2.8.5. Mixer 정책 시행 업데이트

이전 버전의 Red Hat OpenShift Service Mesh에서는 기본적으로 Mixer의 정책 시행이 활성화되었습니다. 이제 Mixer 정책 시행은 기본적으로 비활성화되었습니다. 정책 작업을 실행하기 전에 활성화해야 합니다.

사전 요구 사항

  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
참고

예에서는 <istio-system>을 컨트롤 플레인 네임스페이스로 사용합니다. 이 값을 SMCP(Service Mesh Control Plane)를 배포한 네임스페이스로 교체합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. 이 명령을 실행하여 현재 Mixer 정책 시행 상태를 확인합니다.

    $ oc get cm -n <istio-system> istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
  3. disablePolicyChecks: true인 경우 Service Mesh ConfigMap을 편집합니다.

    $ oc edit cm -n <istio-system> istio
  4. ConfigMap 내에서 disablePolicyChecks: true를 찾고 값을 false로 변경합니다.
  5. 구성을 저장하고 편집기를 종료합니다.
  6. Mixer 정책 시행 상태를 다시 점검하여 false로 설정되어 있는지 확인합니다.

2.8.5.1. 올바른 네트워크 정책 설정

서비스 메시는 컨트롤 플레인과 멤버 네임스페이스에서 네트워크 정책을 생성하여 트래픽을 허용합니다. 배포하기 전에 다음 조건을 고려하여 OpenShift Container Platform 경로를 통해 이전에 노출된 서비스 메시의 서비스를 확인합니다.

  • Istio가 제대로 작동하려면 서비스 메시로의 트래픽이 항상 ingress-gateway를 통과해야 합니다.
  • 서비스 메시에 없는 별도의 네임스페이스에서 서비스 메시 외부에 서비스를 배포합니다.
  • 서비스 메시 등록 네임스페이스에 배포해야 하는 메시 외 서비스는 해당 배포 maistra.io/expose-route: "true"에 레이블을 지정하여 OpenShift Container Platform 경로가 여전히 작동하도록 해야 합니다.

2.8.6. Bookinfo 예제 애플리케이션

Bookinfo 예제 애플리케이션을 사용하면 OpenShift Container Platform에서 Red Hat OpenShift Service Mesh 2.0.6 설치를 테스트할 수 있습니다.

Bookinfo 애플리케이션은 온라인 서점의 단일 카탈로그 항목과 유사하게 한 권의 책에 대한 정보를 표시합니다. 애플리케이션에는 책, 책 세부 정보(ISBN, 페이지 수 및 기타 정보) 및 도서 리뷰가 포함된 페이지가 표시됩니다.

Bookinfo 애플리케이션은 이러한 마이크로 서비스로 구성됩니다.

  • productpage 마이크로 서비스는 detailsreviews 마이크로 서비스를 호출하여 페이지를 채웁니다.
  • details 마이크로 서비스에는 도서 정보가 포함되어 있습니다.
  • reviews 마이크로 서비스에는 도서 리뷰가 포함되어 있습니다. 이를 ratings 마이크로 서비스라고도 합니다.
  • ratings 마이크로 서비스에는 도서 리뷰와 함께 제공되는 도서 순위 정보가 포함되어 있습니다.

리뷰 마이크로 서비스의 세 가지 버전이 있습니다.

  • 버전 v1에서는 ratings 서비스를 호출하지 않습니다.
  • 버전 v2는 ratings 서비스를 호출하고 각 평가를 1~5개의 검정별로 표시합니다.
  • 버전 v3은 ratings 서비스를 호출하고 각 평가를 1~5개의 빨강별로 표시합니다.

2.8.6.1. Bookinfo 애플리케이션 설치

이 튜토리얼에서는 프로젝트를 생성하고, Bookinfo 애플리케이션을 해당 프로젝트에 배포하고, 서비스 메시에서 실행 중인 애플리케이션을 확인하여 샘플 애플리케이션을 생성하는 방법을 안내합니다.

사전 요구 사항:

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
  • cluster-admin 역할이 있는 계정.
참고

Bookinfo 샘플 애플리케이션은 IBM Z 및 IBM Power Systems에 설치할 수 없습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 cluster-admin 권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. 프로젝트를 클릭합니다.
  3. 프로젝트 만들기를 클릭합니다.
  4. 프로젝트 이름으로 bookinfo를 입력하고, 디스플레이 이름, 설명을 입력한 다음 생성을 클릭합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 생성할 수 있습니다.

      $ oc new-project bookinfo
  5. Operators설치된 Operator를 클릭합니다.
  6. 프로젝트 메뉴를 클릭하고 컨트롤 플레인 네임스페이스를 사용합니다. 이 예제에서는 istio-system을 사용합니다.
  7. Red Hat OpenShift Service Mesh Operator를 클릭합니다.
  8. Istio Service Mesh 멤버 롤 탭을 클릭합니다.

    1. 이미 Istio Service Mesh 멤버 롤을 생성한 경우, 이름을 클릭한 다음 YAML 탭을 클릭하여 YAML 편집기를 엽니다.
    2. ServiceMeshMemberRoll을 생성하지 않은 경우 ServiceMeshMemberRoll 생성을 클릭합니다.
  9. Members(구성원 )를 클릭한 다음 Value(값 ) 필드에 프로젝트 이름을 입력합니다.
  10. 생성을 클릭하여 업데이트된 서비스 메시 멤버 롤을 저장합니다.

    • + 또는 다음 예제를 YAML 파일에 저장합니다.

      Bookinfo ServiceMeshMemberRoll example servicemeshmemberroll-default.yaml

      apiVersion: maistra.io/v1
      kind: ServiceMeshMemberRoll
      metadata:
        name: default
      spec:
        members:
        - bookinfo

      1. 다음 명령을 실행하여 해당 파일을 업로드하고 istio-system 네임스페이스에 ServiceMeshMemberRoll 리소스를 만듭니다.

        $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  11. 다음 명령을 실행하여 ServiceMeshMemberRoll이 성공적으로 생성되었는지 확인합니다.

    $ oc get smmr -n istio-system

    STATUS 열이 Configured이면 설치가 성공적으로 완료되었습니다.

    NAME      READY   STATUS       AGE
    default   1/1     Configured   2m27s
  12. CLI에서 bookinfo.yaml 파일을 적용하여 'bookinfo' 프로젝트에 Bookinfo 애플리케이션을 배포합니다.

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/platform/kube/bookinfo.yaml

    출력은 다음과 유사합니다.

    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
  13. bookinfo-gateway.yaml 파일을 적용하여 수신 게이트웨이를 생성합니다.

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/bookinfo-gateway.yaml

    출력은 다음과 유사합니다.

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
  14. GATEWAY_URL 매개변수 값을 설정합니다.

    참고

    <control_plane_project>를 컨트롤 플레인 프로젝트 이름으로 교체합니다. 이 예제에서 컨트롤 플레인 프로젝트는 istio-system입니다.

    $ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')

2.8.6.2. 기본 대상 규칙 추가

Bookinfo 애플리케이션을 사용하려면 먼저 기본 대상 규칙을 추가해야 합니다. 상호 TLS(Transport layer security) 인증을 활성화했는지 여부에 따라 사전 구성된 YAML 파일이 두 개 있습니다.

프로세스

  1. 대상 규칙을 추가하려면 다음 명령 중 하나를 실행합니다.

    • 상호 TLS를 활성화하지 않은 경우:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/destination-rule-all.yaml
    • 상호 TLS를 활성화한 경우:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/destination-rule-all-mtls.yaml

      출력은 다음과 유사합니다.

      destinationrule.networking.istio.io/productpage created
      destinationrule.networking.istio.io/reviews created
      destinationrule.networking.istio.io/ratings created
      destinationrule.networking.istio.io/details created

2.8.6.3. Bookinfo 설치 확인

샘플 Bookinfo 애플리케이션이 성공적으로 배포되었는지 확인하려면 다음 단계를 수행합니다.

사전 요구 사항

  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
  • Bookinfo 샘플 애플리케이션을 설치하는 단계를 완료합니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. 이 명령으로 모든 Pod가 준비되었는지 확인합니다.

    $ oc get pods -n bookinfo

    모든 포드의 상태는 Running이어야 합니다. 출력은 다음과 유사합니다.

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-55b869668-jh7hb        2/2     Running   0          12m
    productpage-v1-6fc77ff794-nsl8r   2/2     Running   0          12m
    ratings-v1-7d7d8d8b56-55scn       2/2     Running   0          12m
    reviews-v1-868597db96-bdxgq       2/2     Running   0          12m
    reviews-v2-5b64f47978-cvssp       2/2     Running   0          12m
    reviews-v3-6dfd49b55b-vcwpf       2/2     Running   0          12m
  3. 다음 명령을 실행하여 제품 페이지의 URL을 검색합니다.

    echo "http://$GATEWAY_URL/productpage"
  4. 웹 브라우저에 출력을 복사하여 붙여넣어 Bookinfo 제품 페이지가 배포되었는지 확인합니다.

2.8.6.4. Bookinfo 애플리케이션 제거

다음 단계에 따라 Bookinfo 애플리케이션을 제거하십시오.

사전 요구 사항

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.
2.8.6.4.1. Bookinfo 프로젝트 삭제

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트를 클릭합니다.
  3. bookinfo 메뉴 kebab 를 클릭한 다음 프로젝트 삭제를 클릭합니다.
  4. 확인 대화 상자에 bookinfo를 입력한 다음 삭제 를 클릭합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 생성할 수 있습니다.

      $ oc delete project bookinfo
2.8.6.4.2. 서비스 메시 멤버 롤에서 Bookinfo 프로젝트를 제거

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operators설치된 Operator를 클릭합니다.
  3. 프로젝트 메뉴를 클릭하고 목록에서 openshift-operators를 선택합니다.
  4. Red Hat OpenShift Service Mesh Operator에 대해 제공된 APIS에서 Istio Service Mesh 멤버 롤 링크를 클릭합니다.
  5. ServiceMeshMemberRoll 메뉴 kebab 를 클릭하고 서비스 메시 멤버 롤 편집을 선택합니다.
  6. 기본 Service Mesh 멤버 롤 YAML을 편집하고 멤버 목록에서 bookinfo를 삭제합니다.

    • 대신 CLI에서 이 명령을 실행하여 bookinfo 프로젝트를 ServiceMeshMemberRoll에서 삭제할 수 있습니다. 이 예에서 istio-system은 컨트롤 플레인 프로젝트의 이름입니다.

      $ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
  7. 저장을 클릭하여 서비스 메시 멤버 롤을 업데이트합니다.

2.8.7. 예제 추적 생성 및 추적 데이터 분석

Jaeger는 오픈 소스 분산 추적 시스템입니다. Jaeger를 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 따르는 추적을 수행할 수 있습니다. Jaeger는 기본적으로 서비스 메시의 일부로 설치됩니다.

이 튜토리얼에서는 서비스 메시 및 Bookinfo 샘플 애플리케이션을 사용하여 Jaeger를 사용하여 분산 추적을 수행하는 방법을 보여줍니다.

사전 요구 사항:

  • OpenShift Container Platform 4.1 이상이 설치되었습니다.
  • Red Hat OpenShift Service Mesh 2.0.6이 설치되었습니다.
  • 설치 중에 Jaeger가 활성화되었습니다.
  • Bookinfo 예제 애플리케이션이 설치되었습니다.

프로세스

  1. Bookinfo 샘플 애플리케이션을 설치한 후 트래픽을 메시로 보냅니다. 다음 명령을 여러 번 입력합니다.

    $ curl "http://$GATEWAY_URL/productpage"

    이 명령은 애플리케이션의 productpage 마이크로 서비스를 방문하는 사용자를 시뮬레이션합니다.

  2. OpenShift Container Platform 콘솔에서 네트워킹경로로 이동하여 위치에 나열된 URL인 Jaeger 경로를 검색합니다.

    • 또는 CLI를 사용하여 경로에 대한 세부 정보를 쿼리합니다. 이 예에서 istio-system은 컨트롤 플레인 네임스페이스입니다.

      $ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
      1. 다음 명령을 입력하여 Jaeger 콘솔의 URL을 표시합니다. 결과를 브라우저에 붙여넣고 해당 URL로 이동합니다.

        echo $JAEGER_URL
  3. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 로그인합니다.
  4. Jaeger 대시보드의 왼쪽 창에 있는 Service (서비스) 메뉴에서 productpage.bookinfo를 선택하고 창 하단에 있는 추적 찾기 버튼을 클릭합니다. 추적 목록이 표시됩니다.
  5. 목록의 추적 중 하나를 클릭하여 해당 추적에 대한 상세 보기를 엽니다. 목록에서 최신 추적인 첫 번째 추적을 클릭하면 /productpage의 최신 새로 고침에 해당하는 세부 정보가 표시됩니다.

2.9. 데이터 시각화 및 관찰 기능

Kiali 콘솔에서 애플리케이션의 토폴로지, 상태 및 지표를 볼 수 있습니다. 서비스에 문제가 있는 경우 Kiali 콘솔은 서비스를 통해 데이터 흐름을 시각화하는 방법을 제공합니다. 추상 애플리케이션, 서비스 및 워크로드를 포함하여 다양한 수준에서 메시 구성 요소에 대한 인사이트를 볼 수 있습니다. 또한 네임스페이스에 대한 대화형 그래프 보기도 실시간으로 제공합니다.

시작하기 전

애플리케이션을 설치한 경우 애플리케이션을 통해 데이터 흐름을 확인할 수 있습니다. 자체 애플리케이션이 설치되어 있지 않은 경우 Bookinfo 샘플 애플리케이션을 설치하여 Red Hat OpenShift Service Mesh에서 관찰 기능이 작동하는 방식을 확인할 수 있습니다.

2.9.1. 서비스 메시 데이터 보기

Kiali Operator는 Red Hat OpenShift Service Mesh에서 수집된 원격 분석 데이터와 함께 작업하여 네임스페이스의 애플리케이션, 서비스 및 워크로드에 대한 그래프 및 실시간 네트워크 다이어그램을 제공합니다.

Kiali 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 있고 서비스 메시에 대해 구성된 프로젝트가 있어야 합니다.

프로세스

  1. 관점 전환 기능을 사용하여 관리자 관점으로 전환하십시오.
  2. Home > Projects(홈 > 프로젝트)를 클릭합니다.
  3. 프로젝트 이름을 클릭합니다. 예를 들어 bookinfo를 클릭합니다.
  4. Launcher(시작기) 섹션에서 Kiali를 클릭합니다.
  5. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 Kiali 콘솔에 로그인합니다.

Kiali 콘솔에 처음 로그인하면 표시 권한이 있는 메시에 모든 네임스페이스가 표시되는 개요 페이지가 나타납니다.

2.9.2. Kiali 콘솔에서 데이터 작업

Kiali 콘솔의 Graph 메뉴에서 다음 그래프 및 보기 툴을 사용하여 서비스 메시를 통해 이동하는 데이터에 대한 심층 정보를 얻을 수 있습니다. 이러한 툴은 서비스 또는 워크로드의 문제를 식별하는 데 도움이 될 수 있습니다.

몇 가지의 그래프를 선택할 수 있습니다.

  • 앱 그래프는 동일한 레이블이 있는 모든 애플리케이션에 대한 집계 워크로드를 보여줍니다.
  • 버전 지정된 앱 그래프는 애플리케이션의 각 버전에 대한 노드를 표시합니다. 모든 버전의 애플리케이션이 함께 그룹화됩니다.
  • 워크로드 그래프는 서비스 메시의 각 워크로드에 대한 노드를 표시합니다. 이 그래프에서는 애플리케이션 및 버전 레이블을 사용할 필요가 없습니다. 애플리케이션에서 버전 레이블을 사용하지 않는 경우 이 그래프를 사용합니다.
  • 서비스 그래프는 메시의 각 서비스에 대한 노드를 표시하지만 그래프에서 모든 애플리케이션과 워크로드를 제외합니다. 높은 수준의 보기를 제공하며 정의된 서비스에 대한 모든 트래픽을 집계합니다.

지표 요약을 보려면 그래프에서 노드 또는 에지를 선택하여 요약 세부 정보 패널에 지표 세부 정보를 표시합니다.

2.9.2.1. 네임스페이스 그래프

네임스페이스 그래프는 네임스페이스의 서비스, 배포 및 워크플로의 맵이며 데이터가 통과하는 방식을 보여주는 화살표입니다.

사전 요구 사항

  • Bookinfo 샘플 애플리케이션을 설치합니다.

프로세스

  1. 다음 명령을 여러 번 입력하여 메시에 트래픽을 보냅니다.

    $ curl "http://$GATEWAY_URL/productpage"

    이 명령은 애플리케이션의 productpage 마이크로 서비스를 방문하는 사용자를 시뮬레이션합니다.

  2. 기본 탐색에서 Graph(그래프 )를 클릭하여 네임스페이스 그래프를 확인합니다.
  3. 네임스페이스 메뉴에서 bookinfo를 선택합니다.

2.10. 3scale Istio 어댑터 사용

3scale Istio Adapter는 Red Hat OpenShift Service Mesh 내에서 실행되는 서비스에 레이블을 지정하고 해당 서비스를 3scale API 관리 솔루션과 통합할 수 있는 선택적 어댑터입니다. Red Hat OpenShift Service Mesh에는 필요하지 않습니다.

2.10.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 계정당 단일 처리기를 사용합니다.

프로세스

  1. 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를 사용하려는 경우 유용할 수 있습니다.

  2. 다음과 같이 3scale 계정에 속하는 서비스의 Deployment(배포) 리소스를 편집하거나 패치합니다.

    1. 유효한 service_id에 해당하는 값을 사용하여 "service-mesh.3scale.net/service-id " 레이블을 추가합니다.
    2. 값을 1단계에서 handler 리소스의 이름으로 사용하여 "service-mesh.3scale.net/credentials" 레이블을 추가합니다.
  3. 서비스를 더 추가할 때마다 2단계를 3scale 계정 자격 증명과 해당 서비스 식별자에 연결합니다.
  4. 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.10.1.1. 3scale 사용자 정의 리소스 생성

어댑터에는 handler, instance, rule 사용자 정의 리소스를 생성할 수 있는 도구가 포함되어 있습니다.

표 2.4. 사용법

옵션설명필수 항목기본값

-h, --help

사용 가능한 옵션에 대한 도움말 출력 생성

아니요

 

--name

이 URL의 고유 이름, 토큰 쌍

 

-n, --namespace

템플릿을 생성할 네임스페이스

아니요

istio-system

-t, --token

3scale 액세스 토큰

 

-u, --url

3scale 관리자 포털 URL

 

--backend-url

3scale 백엔드 URL. 설정하면 시스템 설정에서 읽은 값을 재정의합니다.

아니요

 

-s, --service

3scale API/서비스 ID

아니요

 

--auth

지정을 위한 3scale 인증 패턴(1=API Key, 2=App Id/App Key, 3=OIDC)

아니요

하이브리드

-o, --output

생성된 매니페스트를 저장할 파일

아니요

표준 출력

--version

CLI 버전을 출력하고 즉시 종료합니다.

아니요

 
2.10.1.1.1. URL 예제에서 템플릿 생성
참고

프로세스

  • 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.10.1.2. 배포된 어댑터에서 매니페스트 생성

참고
  • NAME은 3scale로 관리 중인 서비스와 식별하는 데 사용하는 식별자입니다.
  • CREDENTIALS_NAME 참조는 규칙 구성의 match 섹션에 해당하는 식별자입니다. CLI 도구를 사용하는 경우 이름 식별자로 자동 설정됩니다.
  • 해당 값은 특정할 필요가 없습니다. 레이블 값은 규칙의 내용만 일치해야 합니다. 자세한 내용은 어댑터를 통한 라우팅 서비스 트래픽을 참조하십시오.
  1. 이 명령을 실행하여 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}
  2. 터미널에 샘플 출력이 생성됩니다. 필요한 경우 이러한 샘플을 편집하고 oc create 명령을 사용하여 오브젝트를 생성합니다.
  3. 요청이 어댑터에 도달하면 어댑터는 서비스가 3scale의 API에 매핑되는 방식을 알아야 합니다. 다음 두 가지 방법으로 이러한 정보를 제공할 수 있습니다.

    1. 워크로드에 레이블 지장(권장)
    2. 처리기를 service_id로 하드 코딩
  4. 필요한 주석으로 워크로드를 업데이트합니다.

    참고

    처리기에 아직 포함되지 않은 경우, 이 예제에 제공된 서비스 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.10.1.3. 어댑터를 통한 서비스 트래픽 라우팅

3scale 어댑터를 통해 서비스 트래픽을 유도하려면 다음 단계를 따르십시오.

사전 요구 사항

  • 3scale 관리자의 인증 정보 및 서비스 ID

프로세스

  1. kind: rule 리소스의 구성에서 이전에 생성한 destination.labels["service-mesh.3scale.net/credentials"] == "threescale" 규칙과 일치합니다.
  2. 서비스를 통합하기 위해 대상 워크로드 배포에서 위의 레이블을 PodTemplateSpec에 추가합니다. threescale 값은 생성된 처리기의 이름을 나타냅니다. 이 처리기에서는 3scale를 호출하는 데 필요한 액세스 토큰을 저장합니다.
  3. destination.labels["service-mesh.3scale.net/service-id"] == "replace-me" 레이블을 워크로드에 추가하여 요청 시 인스턴스를 통해 서비스 ID를 어댑터에 전달합니다.

2.10.2. 3scale로 통합 설정 구성

3scale 통합 설정을 구성하려면 다음 절차를 따르십시오.

참고

3scale SaaS 고객의 경우, Red Hat OpenShift Service Mesh는 조Early Access 프로그램의 일부로 활성화됩니다.

프로세스

  1. [your_API_name] → 통합으로 이동합니다.
  2. Settings(설정 )를 클릭합니다.
  3. Deployment (배포)에서 Istio 옵션을 선택합니다.

    • Authentication (인증)의 API Key(user_key) 옵션은 기본적으로 선택됩니다.
  4. Update Product (제품 업데이트)를 클릭하여 선택을 저장합니다.
  5. Configuration(구성)을 클릭합니다.
  6. Update Configuration (구성 업데이트)을 클릭합니다.

2.10.3. 캐싱 동작

3scale System API의 응답은 기본적으로 어댑터 내에서 캐시됩니다. 항목이 cacheTTLSeconds 값보다 오래되면 캐시에서 제거됩니다. 또한 기본적으로 캐시된 항목의 자동 새로 고침은 cacheRefreshSeconds 값에 따라 만료되기 몇 초 전에 시도됩니다. 이 값을 cacheTTLSeconds 값보다 높게 설정하여 자동 새로 고침을 비활성화할 수 있습니다.

cacheEntriesMax를 양수가 아닌 값으로 설정하여 캐싱을 완전히 비활성화할 수 있습니다.

새로 고침 프로세스를 사용하면 호스트가 연결할 수 없는 캐시된 값은 만료가 지나면 제거되기 전에 다시 시도됩니다.

2.10.4. 요청 인증

이 릴리스에서는 다음 인증 방법을 지원합니다.

  • 표준 API 키: 식별자와 시크릿 토큰으로 작동하는 임의의 단일 문자열 또는 해시입니다.
  • 애플리케이션 식별자 및 키 쌍: 변경 불가능한 식별자 및 변경 가능한 시크릿 키 문자열입니다.
  • OpenID 인증 방법: JSON 웹 토큰에서 구문 분석된 클라이언트 ID 문자열입니다.

2.10.4.1. 인증 패턴 적용

인증 동작을 구성하려면 다음 인증 방법 예제에 설명된 인스턴스 사용자 정의 리소스를 수정합니다. 다음에서 인증 자격 증명을 허용할 수 있습니다.

  • 요청 헤더
  • 요청 매개변수
  • 요청 헤더 및 쿼리 매개변수 둘 다
참고

헤더에서 값을 지정하는 경우 소문자여야 합니다. 예를 들어 User-Key로 헤더를 보내려면 구성에서 request.headers["user-key"]로 참조되어야 합니다.

2.10.4.1.1. API 키 인증 방법

서비스 메시는 subject 사용자 정의 리소스 매개변수의 user 옵션에 지정된 대로 쿼리 매개변수 및 요청 헤더에서 API 키를 찾습니다. 사용자 정의 리소스 파일에 지정된 순서로 값을 확인합니다. 원하지 않는 옵션을 생략하여 API 키 검색을 쿼리 매개변수 또는 요청 헤더로 제한할 수 있습니다.

이 예에서 서비스 메시는 user_key 쿼리 매개변수에서 API 키를 찾습니다. API 키가 쿼리 매개변수에 없으면 서비스 메시가 user-key 헤더를 확인합니다.

API 키 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

어댑터가 다른 쿼리 매개변수 또는 요청 헤더를 검사하도록 하려면 이름을 적절하게 변경합니다. 예를 들어 "key"라는 쿼리 매개변수에서 API 키를 확인하려면 request.query_params["user_key"]request.query_params["key"]로 변경합니다.

2.10.4.1.2. 애플리케이션 ID 및 애플리케이션 키 쌍 인증 방법

서비스 메시는 subject 사용자 정의 리소스 매개변수의 properties 옵션에 지정된 대로 쿼리 매개변수 및 요청 헤더에서 애플리케이션 ID와 애플리케이션 키를 찾습니다. 애플리케이션 키는 선택 사항입니다. 사용자 정의 리소스 파일에 지정된 순서로 값을 확인합니다. 원하지 않는 옵션을 제외하여 자격 증명 검색을 쿼리 매개변수 또는 요청 헤더로 제한할 수 있습니다.

이 예에서 서비스 메시는 쿼리 매개변수의 애플리케이션 ID 및 애플리케이션 키를 먼저 찾고 필요한 경우 요청 헤더로 이동합니다.

애플리케이션 ID 및 애플리케이션 키 쌍 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

어댑터가 다른 쿼리 매개변수 또는 요청 헤더를 검사하도록 하려면 이름을 적절하게 변경합니다. 예를 들어, identification라는 쿼리 매개변수의 애플리케이션 ID를 확인하려면 request.query_params["app_id"]request.query_params["identification"]로 변경합니다.

2.10.4.1.3. OpenID 인증 방법

OIDC(OpenID Connect) 인증 방법을 사용하려면 subject 필드에서 properties 값을 사용하여 client_id 또는 필요한 경우 app_key로 설정할 수 있습니다.

이전에 설명된 방법을 사용하여 이 오브젝트를 조작할 수 있습니다. 아래 설정 예에서 클라이언트 식별자(애플리케이션 ID)는 azp 레이블 아래에 있는 JSON 웹 토큰(JWT)에서 구문 분석됩니다. 필요에 따라 수정할 수 있습니다.

OpenID 인증 방법 예

  apiVersion: "config.istio.io/v1alpha2"
  kind: instance
  metadata:
    name: threescale-authorization
  spec:
    template: threescale-authorization
    params:
      Subject:
  properties:
          app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
          client_id: request.auth.claims["azp"] | ""
      action:
        path: request.url_path
        method: request.method | "get"
          service: destination.labels["service-mesh.3scale.net/service-id"] | ""

이 통합이 올바르게 작동하려면 클라이언트가 ID 공급자(IdP)에서 생성되도록 OIDC를 3scale에서 수행해야 합니다. 해당 서비스와 동일한 네임스페이스에서 보호하려는 서비스에 대해 요청 권한 부여를 생성해야 합니다. JWT는 요청의 Authorization 헤더로 전달됩니다.

아래에 정의된 샘플 RequestAuthentication에서 issuer, jwksUri, selector를 적절하게 대체합니다.

OpenID 정책 예

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: jwt-example
  namespace: bookinfo
spec:
  selector:
    matchLabels:
      app: productpage
  jwtRules:
  - issuer: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak
    jwksUri: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak/protocol/openid-connect/certs

2.10.4.1.4. 하이브리드 인증 방법

특정 인증 방법을 적용하지 않도록 선택하고, 두 방법에 대해 유효한 자격 증명을 수락할 수 있습니다. API 키와 애플리케이션 ID/애플리케이션 키 쌍이 모두 제공되면 서비스 메시는 API 키를 사용합니다.

이 예제에서 서비스 메시는 쿼리 매개변수에서 API 키를 확인한 다음 요청 헤더를 확인합니다. API 키가 없는 경우 쿼리 매개변수에서 애플리케이션 ID와 키를 확인한 다음 요청 헤더를 확인합니다.

하이브리드 인증 방법 예

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] |
      properties:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
        client_id: request.auth.claims["azp"] | ""
    action:
      path: request.url_path
      method: request.method | "get"
        service: destination.labels["service-mesh.3scale.net/service-id"] | ""

2.10.5. 3scale Adapter 지표

기본적으로 어댑터는 /metrics 끝점의 포트 8080에서 공개되는 다양한 Prometheus 지표를 보고합니다. 이러한 지표는 어댑터와 3scale 간의 상호 작용 수행 방식에 대한 인사이트를 제공합니다. 이 서비스는 Prometheus에서 자동으로 검색 및 스크랩하도록 레이블이 지정됩니다.

2.10.6. 3scale Istio 어댑터 확인

3scale Istio 어댑터가 예상대로 작동하는지 확인해야 할 수 있습니다. 어댑터가 작동하지 않는 경우 다음 단계를 사용하여 문제를 해결합니다.

프로세스

  1. 컨트롤 플레인 네임스페이스에서 3scale-adapter Pod가 실행 중인지 확인합니다.

    $ oc get pods -n <istio-system>
  2. 3scale-adapter Pod에서 버전과 같이 자체 부팅에 대한 정보를 출력했는지 확인합니다.

    $ oc logs <istio-system>
  3. 3scale 어댑터 통합으로 보호되는 서비스에 대한 요청을 수행할 때 항상 올바른 자격 증명이 없는 요청을 시도하여 실패하는지 확인합니다. 3scale 어댑터 로그를 확인하여 추가 정보를 수집합니다.

2.10.7. 3scale Istio 어댑터 문제 해결 체크리스트

3scale Istio 어댑터를 설치하는 관리자는 통합이 제대로 작동하지 않을 수 있는 여러 시나리오가 있습니다. 다음 목록을 사용하여 설치 문제를 해결합니다.

  • 잘못된 YAML 들여쓰기.
  • 누락된 YAML 섹션.
  • YAML 변경 사항을 클러스터에 적용하는 것을 잊어버리셨습니까.
  • service-mesh.3scale.net/credentials 키를 사용하여 서비스 워크로드의 레이블을 지정하는 것을 잊어버리십시오.
  • 서비스 워크로드에 service_id가 포함되지 않은 핸들러를 사용할 때 service-mesh.3scale.net/service-id 레이블을 지정하는 것을 잊어서 계정당 재사용할 수 있습니다.
  • Rule 사용자 지정 리소스는 잘못된 핸들러 또는 인스턴스 사용자 지정 리소스를 가리키거나 참조에 해당 네임스페이스 접미사가 없습니다.
  • Rule 사용자 정의 리소스 일치 섹션은 구성 중인 서비스와 일치하지 않거나 현재 실행 중이거나 존재하지 않는 대상 워크로드를 가리킬 수 없습니다.
  • 핸들러의 3scale 관리 포털의 잘못된 액세스 토큰 또는 URL입니다.
  • 인스턴스 사용자 정의 리소스의 params/subject/properties 섹션은 쿼리 매개 변수, 헤더 및 권한 부여 클레임과 같은 잘못된 위치를 지정하기 때문에 app_id, app_key 또는 client_id에 대한 올바른 매개 변수를 나열하지 못합니다.
  • 실제로 어댑터 컨테이너 이미지에 있음을 인식하지 않고 구성 생성기를 사용하지 못하고 oc exec를 호출해야 합니다.

2.11. Red Hat OpenShift Service Mesh 삭제

기존 OpenShift Container Platform 인스턴스에서 Red Hat OpenShift Service Mesh를 제거하려면 Operator를 제거하기 전에 컨트롤 플레인을 제거하십시오.

2.11.1. Red Hat OpenShift Service Mesh Control Plane 제거

기존 OpenShift Container Platform 인스턴스에서 Service Mesh를 설치 제거하려면 먼저 컨트롤 플레인 및 Operator를 삭제해야 합니다. 그런 다음 명령을 실행하여 남은 리소스를 수동으로 제거해야 합니다.

2.11.1.1. 웹 콘솔에서 컨트롤 플레인 제거

웹 콘솔을 사용하여 Red Hat OpenShift Service Mesh Control Plane을 제거할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트 메뉴를 클릭하고 목록에서 istio-system 프로젝트를 선택합니다.
  3. Operators설치된 Operator로 이동합니다.
  4. 제공된 API에서 Service Mesh Control Plane 을 클릭합니다.
  5. ServiceMeshControlPlane 메뉴 kebab 를 클릭합니다.
  6. Service Mesh Control Plane 삭제를 클릭합니다.
  7. 확인 대화 상자에서 삭제를 클릭하여 ServiceMeshControlPlane을 삭제합니다.

2.11.1.2. CLI에서 컨트롤 플레인 제거

CLI를 사용하여 Red Hat OpenShift Service Mesh Control Plane을 제거할 수 있습니다.

프로세스

  1. OpenShift Container Platform CLI에 로그인합니다.
  2. 이 명령을 실행하여 설치된 ServiceMeshControlPlane의 이름을 검색합니다.

    $ oc get smcp -n istio-system
  3. <name_of_custom_resource>을 이전 명령의 출력으로 바꾸고, 이 명령을 실행하여 사용자 정의 리소스를 삭제합니다.

    $ oc delete smcp -n istio-system <name_of_custom_resource>

2.11.2. 설치된 Operator 제거

Red Hat OpenShift Service Mesh를 성공적으로 제거하려면 Operator를 제거해야 합니다. Red Hat OpenShift Service Mesh Operator를 제거한 후 Kiali Operator, Jaeger Operator 및 OpenShift Elasticsearch Operator를 제거해야 합니다.

2.11.2.1. Operator 제거

Red Hat OpenShift Service Mesh를 구성하는 Operator를 제거하려면 다음 절차를 따르십시오. 다음 각 Operator에 대해 단계를 반복합니다.

  • Red Hat OpenShift Service Mesh
  • Kiali
  • Jaeger
  • OpenShift Elasticsearch

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Operator설치된 Operator 페이지에서 스크롤하거나 이름별 필터링에 키워드를 입력하여 각 Operator를 찾습니다. 그런 다음 Operator 이름을 클릭합니다.
  3. Operator 세부 정보 페이지의 작업 메뉴에서 Operator 설치 제거를 선택합니다. 프롬프트에 따라 각 Operator를 제거합니다.

2.11.2.2. Operator 리소스 정리

OpenShift 콘솔을 사용하여 Red Hat OpenShift Service Mesh Operator를 제거한 후 남은 리소스를 수동으로 제거하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 클러스터 관리 권한이 있는 계정.
  • oc라고도 하는 OpenShift Container Platform 명령줄 인터페이스(CLI)에 액세스합니다.

프로세스

  1. OpenShift Container Platform CLI에 클러스터 관리자로 로그인합니다.
  2. Operator를 제거한 후 다음 명령을 실행하여 리소스를 정리합니다. 서비스 메시 없이 Jaeger를 독립형 서비스로 계속 사용하려면 Jaeger 리소스를 삭제하지 마십시오.

    참고

    Operator는 기본적으로 openshift-operators 네임스페이스에 설치됩니다. 다른 네임스페이스에 Operator를 설치한 경우 openshift-operators를 Red Hat OpenShift Service Mesh Operator가 설치된 프로젝트의 이름으로 교체합니다.

    $ oc delete validatingwebhookconfiguration/openshift-operators.servicemesh-resources.maistra.io
    $ oc delete mutatingwebhookconfigurations/openshift-operators.servicemesh-resources.maistra.io
    $ oc delete -n openshift-operators daemonset/istio-node
    $ oc delete clusterrole/istio-admin clusterrole/istio-cni clusterrolebinding/istio-cni
    $ oc delete clusterrole istio-view istio-edit
    $ oc delete clusterrole jaegers.jaegertracing.io-v1-admin jaegers.jaegertracing.io-v1-crdview jaegers.jaegertracing.io-v1-edit jaegers.jaegertracing.io-v1-view
    $ oc get crds -o name | grep '.*\.istio\.io' | xargs -r -n 1 oc delete
    $ oc get crds -o name | grep '.*\.maistra\.io' | xargs -r -n 1 oc delete
    $ oc get crds -o name | grep '.*\.kiali\.io' | xargs -r -n 1 oc delete
    $ oc delete crds jaegers.jaegertracing.io
    $ oc delete svc admission-controller -n <operator-project>
    $ oc delete project <istio-system-project>

법적 공지

Copyright © 2021 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.