Kubernetes 애플리케이션에서 Oracle Cloud Infrastructure Service Mesh를 활성화합니다.
Oracle Cloud Infrastructure(OCI) 고객들은 마이크로서비스 아키텍처로 전환하는 추세가 갈수록 늘어나고 있으며, 이와 함께 새로운 도전 과제도 함께 제공되고 있습니다. 마이크로서비스 아키텍처에서 모놀리식 애플리케이션은 API를 사용하여 네트워크를 통해 통신하는 소형 마이크로서비스로 분류됩니다. 이로 인해 네트워크 트래픽이 급증하고 아키텍처의 복잡성과 전체 공격 표면이 증가합니다.
- 마이크로서비스 트래픽 플로우를 제어할 수 있습니다.
- 애플리케이션에 대한 가시성을 제공합니다.
- 마이크로서비스가 애플리케이션 코드를 변경하지 않고도 안전하게 연결할 수 있습니다.
OCI 서비스 메시 기능
- 보안 관련 정책 시행
OCI Service Mesh는 액세스 정책을 사용하여 액세스 규칙을 정의합니다. 액세스 정책은 마이크로서비스 간 통신을 시행하고 애플리케이션 내부 및 외부에서 발생하는 검증된 요청만 허용합니다. 액세스 정책은 외부 서비스에 대한 허용된 통신을 정의하는 데도 사용됩니다.
- 제로 트러스트
OCI Service Mesh는 모든 마이크로서비스 전반에서 제로 트러스트 보안 아키텍처를 자동으로 구현합니다. 마이크로서비스 간 데이터는 암호화됩니다. 통신 시작 시 마이크로서비스 간 식별이 필요합니다. 두 당사자는 자격 증명을 자신의 신원 정보와 교환해야 합니다. 이를 통해 서비스가 서로를 식별하여 상호 작용 권한이 있는지 확인할 수 있습니다. 이 기능은 Oracle Cloud Infrastructure Certificates(OCI Certificates) 서비스 및 Oracle Key Management Cloud Service를 사용해 인증서 및 키를 관리하는 자동화된 인증서 및 키 순환 기능을 갖춘 상호 TLS를 통해 구현됩니다.
- 트래픽 변동
OCI Service Mesh를 사용하면 카나리아 배포를 수행할 수 있습니다. 새 버전의 코드를 운용 환경에 게시할 때는 트래픽의 일부만 운용에 도달하도록 허용합니다. 이 기능을 사용하면 신속하게 배포할 수 있으며 애플리케이션 방해를 최소화할 수 있습니다. 메시 내의 모든 마이크로서비스 간 통신을 제어하는 라우팅 규칙을 정의할 수 있습니다. 트래픽의 일부를 특정 버전의 서비스로 라우팅할 수 있습니다.
- 모니터 및 로깅
OCI Service Mesh는 모든 마이크로서비스 간 통신이 이를 통과해야 하므로 원격 측정 정보를 제공할 수 있는 독보적인 위치에 있습니다. 이를 통해 서비스 메시는 소스, 대상, 프로토콜, URL, 기간, 상태 코드, 대기 시간, 로깅 및 기타 상세 통계와 같은 원격 측정 데이터를 캡처할 수 있습니다. 로깅 정보를 Oracle Cloud Infrastructure Logging(OCI Logging) 서비스로 내보낼 수 있습니다. OCI Service Mesh는 두 가지 유형의 로그(오류 로그 및 트래픽 로그)를 제공합니다. 이러한 로그를 사용하여 404 또는 505개의 문제를 디버깅하거나 로그 기반 통계를 생성할 수 있습니다. 지표 및 원격 측정 데이터를 Prometheus로 내보내고 Grafana로 시각화할 수 있습니다. 둘 다 OKE 클러스터에 직접 배치할 수 있습니다.
구조
Oracle Cloud Infrastructure Service Mesh(OCI Service Mesh)는 사이드카 모델을 사용합니다. 이 아키텍처는 네트워크 기능을 네트워크 프록시로 구현하는 코드를 캡슐화한 다음 사이드카 프록시로 재지정될 서비스의 트래픽을 사용합니다. 그것은 오토바이에 부착 된 사이드카처럼 프록시가 각 응용 프로그램에 부착되어 있기 때문에 사이드카라고합니다. OKE에서 애플리케이션 컨테이너는 프록시 사이드카 컨테이너와 함께 동일한 포드에 있습니다. 동일한 포드에 있으므로 동일한 네트워크 네임스페이스와 IP 주소를 공유하므로 컨테이너가 "localhost"를 통해 통신할 수 있습니다.
- 제어 플레인
OCI Service Mesh 제어 플레인은 트래픽을 라우팅하기 위해 전체 프록시 모음을 관리하고 구성합니다. 원격 측정의 전달, 상태 검사, 로드 밸런싱, 인증, 권한 부여 및 집계를 처리합니다. 제어 플레인에서는 OCI 인증서 서비스 및 OCI 키 관리 서비스와 상호 작용하여 각 프록시의 인증서를 제공합니다.
- 데이터 플레인
데이터 평면은 환경에 배치된 사이드카 프록시 모음으로 구성되며, 응용 프로그램의 보안, 네트워크 기능 및 관찰 가능성을 담당합니다. 또한 모든 메시 트래픽에 대한 원격 측정을 수집하고 보고합니다. Envoy 프록시는 OCI Service Mesh의 데이터 플레인에 사용됩니다.
다음 다이어그램은 이 참조 아키텍처를 보여 줍니다.
oci_service_mesh_oke_arch-oracle.zip
이 참조 아키텍처는 세 개의 서비스가 포함된 OKE 클러스터에 배치된 응용 프로그램을 보여줍니다. 애플리케이션이 배치된 네임스페이스가 "메시화"되었습니다. "메시화된" 네임스페이스는 네임스페이스 내에 배치된 서비스가 서비스 메시의 일부가 되고 배치된 각각의 새 포드가 환경 프록시 컨테이너와 함께 주입됨을 나타냅니다. 각 Pod가 배치될 때 구성 및 인증서는 OCI Service Mesh 제어 플레인에 의해 각 프록시 컨테이너로 전송됩니다. OCI Service Mesh 제어 평면은 OCI Certificates 서비스 및 Oracle Key Management Cloud Service와 통신하여 각 프록시의 인증서를 받습니다.
애플리케이션에 대한 외부 액세스를 제공하기 위해 수신 게이트웨이가 배치됩니다. 수신 게이트웨이는 OCI Service Mesh 데이터 플레인에 속하며 OCI Service Mesh 제어 플레인에서 구성 및 인증서를 수신하는 환경 프록시이기도 합니다.
대상 서비스를 사용하여 서비스 검색, 트래픽 암호화 및 인증을 수행하는 것은 프록시 컨테이너의 책임입니다. 프록시 컨테이너는 또한 트래픽이 서로 다른 서비스 버전 간에 분산되고 액세스 정책을 적용하는 방법과 같은 네트워크 정책을 적용합니다. 수신 게이트웨이는 서비스 메시 외부의 트래픽에 대해 동일한 기능을 수행합니다.
Prometheus 및 Grafana는 서비스 메시의 일부가 아닌 별도의 네임스페이스에 있는 OKE 클러스터 내에 배치됩니다. 서비스 메시 데이터 플레인은 대기 시간, 장애, 요청, 원격 측정과 같은 주요 운영 통계를 Prometheus 배포로 전송합니다. Grafana는 Prometheus 배포에서 데이터를 가져오므로 시각화를 위한 대시보드를 생성하는 데 사용할 수 있습니다.
OCI Service Mesh는 OCI Logging 서비스와 통합되며, 서비스 메시가 생성될 때 로깅을 활성화할 수 있습니다. OCI Service Mesh는 두 가지 유형의 로그(오류 로그 및 트래픽 로그)를 제공합니다. 이러한 로그는 404 또는 505개의 문제를 디버깅하거나 로그 기반 통계를 생성하는 데 사용할 수 있습니다.
이 아키텍처에는 다음과 같은 OCI 서비스가 포함됩니다.
- OCI Kubernetes Engine(OKE)
가용성이 높고 확장 가능한 프로덕션 지원 Kubernetes 클러스터를 제공하여 컨테이너화된 애플리케이션을 클라우드에 배포합니다.
- 로드 밸런서
OKE 클러스터의 수신 게이트웨이에 대한 액세스를 제공합니다. 수신은 OKE 클러스터의 요청된 서비스로 트래픽을 보냅니다.
- 인증 기관
OCI Service Mesh 서비스에 대한 TLS 인증서를 관리합니다.
- 키 관리
인증 기관 서비스에서 사용되는 키를 관리합니다.
구조에는 다음과 같은 구성 요소가 있습니다.
- 지역
Oracle Cloud Infrastructure 리전은 가용성 도메인이라고 하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).
- VCN(가상 클라우드 네트워크) 및 서브넷
VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷 생성 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
- 보안 목록
각 서브넷에 대해 서브넷에 들어오고 나가도록 허용해야 하는 트래픽의 소스, 대상 및 유형을 지정하는 보안 규칙을 생성할 수 있습니다.
OCI 서비스 메시 리소스
Kubernetes 리소스 | 설명 |
메시 | 최상위 레벨의 메시는 애플리케이션의 모든 마이크로서비스에 대한 논리적 컨테이너입니다. |
가상 서비스 | 가상 서비스는 서비스 메시에서 마이크로서비스의 논리적 표현입니다. |
가상 배치 | 가상 배치는 가상 서비스로 그룹화할 수 있는 배치의 논리적 표현입니다. 이렇게 하면 가상 서비스가 여러 버전의 마이크로서비스 간에 트래픽을 분산할 수 있습니다. Kubernetes 마이크로서비스는 클러스터에서 별도의 배포인 여러 버전을 가질 수 있습니다. |
가상 배치 바인딩 | 가상 바인딩은 일련의 포드를 가상 배치에 연관시키는 데 사용됩니다. |
가상 서비스 경로 테이블 | 가상 경로 테이블은 프로토콜 및 경로를 기반으로 가상 서비스의 가상 배치 간에 트래픽이 분산되는 방법을 정의합니다. 각 가상 서비스에는 가상 경로 테이블이 있습니다. |
수신 게이트웨이 배치 | 수신 게이트웨이 배치는 메시로 들어오는 트래픽에 대해 로드 밸런서 역할을 하는 수신 포드를 생성합니다. |
수신 게이트웨이 | 수신 게이트웨이는 메시로의 수신 트래픽을 관리합니다. 수신 게이트웨이는 모든 수신 및 송신 트래픽에 암호화가 필요한지 여부와 같이 외부 트래픽이 메시와 통신하는 방식에 대한 규칙 집합을 정의합니다. 이러한 규칙은 수신 게이트웨이 배치에 적용됩니다. |
수신 게이트웨이 경로 테이블 | 수신 게이트웨이 경로 테이블은 수신 게이트웨이 배치와 연관됩니다. 경로 테이블은 수신 게이트웨이 배치에서 액세스할 수 있는 메시 내의 가상 서비스를 정의합니다. |
액세스 정책 | 액세스 정책은 메시의 마이크로서비스와 외부 애플리케이션 간의 허용된 통신을 정의하는 설정된 규칙입니다. |
다음 다이어그램은 구성된 OCI Service Mesh 리소스(액세스 정책, 수신 게이트웨이, 가상 서비스 및 가상 배포)를 애플리케이션 리소스에 매핑하는 방법을 보여 줍니다. K8s 서비스, K8s 서비스 로드 밸런서, 배포 및 Pods.
권장사항
- VCN
VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.
프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.
VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.
서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.
- 로드 밸런서 대역폭
로드 밸런서를 생성하는 동안 고정 대역폭을 제공하는 미리 정의된 구성을 선택하거나, 대역폭 범위를 설정하고 서비스가 트래픽 패턴에 따라 대역폭을 자동으로 확장하도록 하는 사용자 정의(유연한) 구성을 지정할 수 있습니다. 두 접근 방법 중 하나를 사용하면 로드 밸런서를 생성한 후 언제든지 구성을 변경할 수 있습니다.
고려사항
이 참조 아키텍처를 배치할 때는 다음 옵션을 고려하십시오.
- 비용
OKE 클러스터에서 OCI Service Mesh의 제어 평면에는 요금이 부과되지 않습니다. 서비스 메시 데이터 플레인에 대한 프록시 컨테이너의 리소스 활용에 대한 비용이 고객에게 청구됩니다. 그러나 실제로 고객은 이미 OKE 클러스터의 노드 풀에 대한 리소스에 대한 비용을 지불하고 있으며, 프록시 컨테이너의 활용률이 100% 이상 노드 풀의 활용률을 푸시하지 않는 한, 마이크로서비스 아키텍처에 OCI Service Mesh를 추가하는 데는 추가 비용이 부과되지 않습니다.
- 가용성
OCI Service Mesh의 제어 평면은 항상 고가용성으로 배포됩니다.