Code Engine 아키텍처 및 워크로드 격리에 대해 알아보기

IBM Cloud® Code Engine은 12가지 요소 앱, 함수 및 일괄처리 작업을 원스톱 통합 지원 시스템(one-stop-shop)으로 통합하는 IBM Cloud 플랫폼입니다. 제어 플레인, 샤드(세트) 및 라우팅 계층의 세 가지 주요 구성 요소로 구성되는 멀티 테넌트 시스템입니다. 제어 플레인 및 샤드는 별도의 다중 구역 Kubernetes 클러스터로 실현됩니다. 다음 다이어그램은 아키텍처의 그래픽 개요를 제공합니다.

Code Engine 아키텍처 다이어그램 아키텍처 다이어그램 아키텍처 다이어그램
Code Engine

Code Engine은 IBM Cloud Kubernetes Service 클러스터를 기반으로 하며 IBM Cloud Kubernetes Service의 컴포넌트 및 워크로드 격리에 의존합니다. 자세한 정보는 IBM Cloud Kubernetes ServiceVPC 클러스터 아키텍처를 참조하십시오.

모든 컴포넌트는 IBM에서 관리 및 소유하고 IBM Cloud 계정에서 실행됩니다. 각 클러스터는 고유 VPC에서 실행되고 다른 클러스터와 구분됩니다.

Code Engine 제어 플레인은 모든 Code Engine 사용자 간에 공유되고 Kubernetes 클러스터를 실제 멀티 테넌트 시스템으로 만드는 컴포넌트를 실행합니다. 제어 플레인은 배치된 네 개의 마이크로서비스로 구성됩니다.

Code Engine 컨트롤 플레인 마이크로서비스
컴포넌트 용도
리소스 브로커 Code Engine 리소스 제어기에서 IBM Cloud 프로젝트 리소스를 작성 및 삭제하고 샤드에 프로젝트의 배치를 요청합니다.
프로젝트 배치 제어기 샤드를 선택하고 샤드에서 프로젝트의 작성, 삭제 및 격리를 요청합니다.
API 서버 선택된 프로젝트에 대한 대상 정보(KUBECONFIG 파일)를 제공합니다. 또한 IAM 액세스 정책 검사를 수행하고 감사 레코드를 작성합니다.
Kube API proxy 각 API 요청을 적절한 샤드 클러스터에 프록시하고, IAM 정책 검사를 수행하고, 감사 레코드를 작성합니다.

샤드에는 빌드, 일괄처리 작업 또는 앱과 같은 고객 워크로드가 실행됩니다. 그러므로 샤드 클러스터에는 고객 워크로드를 제어하도록 다음 마이크로서비스가 실행됩니다.

샤드 클러스터 마이크로서비스
컴포넌트 용도
프로젝트 격리 제어기 Code Engine 프로젝트 리소스에 해당하는 Kubernetes 네임스페이스를 관리하고 격리합니다. 역할 기반 액세스 제어(RBAC), 팟(Pod) 보안 정책, 리소스 할당량 및 네트워크 정책과 같은 격리 측면이 적용되는지 모니터하고 확인합니다.
프로젝트 도메인 및 인증서 제어기 프로젝트의 라우트 엔드포인트에 대한 도메인 및 인증서를 관리합니다. 엔드포인트는 DNS 항목 및 와일드카드 인증서로 구성됩니다.
Knative 및 Istio 라이프사이클 애플리케이션을 관리합니다. Knative는 애플리케이션 스케일링을 수행합니다. Istio는 트래픽을 애플리케이션의 적절한 개정 및 컨테이너로 라우팅합니다.
일괄처리 제어기 작업 및 작업 실행에 대한 라이프사이클 및 컨테이너를 관리합니다.
빌드 제어기 빌드 및 빌드 실행에 대한 라이프사이클 및 컨테이너를 관리합니다.
서비스 바인딩 및 IBM Cloud 연산자 애플리케이션 및 작업에 IBM Cloud 서비스를 바인딩하는 것과 관련된 시크릿의 라이프사이클을 관리합니다.
IBM Cloud Object Storage 이벤트 소스 제어기 IBM Cloud Object Storage 서비스에서 이벤트 구독의 라이프사이클을 관리합니다.
클러스터 노드 오토스케일러 용량 요구사항에 따라 작업자 노드를 추가하고 제거하여 샤드를 스케일링합니다.
IBM Cloud Monitoring 서비스 메트릭을 IBM Cloud Monitoring에 전송합니다. 이러한 메트릭에 대한 자세한 정보는 Code Engine에 대한 모니터링을 참조하십시오.
IBM® Cloud Logs 플랫폼 로그 및 메트릭을 IBM Cloud Logs에 전달합니다. 자세한 정보는 Code Engine에 대한 이벤트 감사를 참조하십시오.

Code Engine 워크로드 격리

Code Engine은 테넌트가 동일한 네트워크 및 컴퓨팅 인프라를 공유하는 다중 테넌트 지역 서비스입니다. 특히 네트워크 및 컴퓨팅 인프라는 공유 리소스이며 일부 관리 컴포넌트는 모든 테넌트에 공통입니다. Code Engine은 다음 제어를 구현하여 테넌트를 분리합니다.

  • Code Engine 프로젝트 리소스는 IBM Cloud 다중 구역 지역에서 실행되는 보안 Kubernetes 환경 내에서 분리됩니다.
  • Code Engine 프로젝트 및 포함 리소스입니다. 예를 들면, 공유 관리 컴포넌트를 사용하는 공유 클러스터에서 실행되는 애플리케이션, 빌드 및 작업입니다.
  • 프로젝트 리소스에 대한 액세스를 분리하기 위해 Code Engine은 apiserverkube-api-proxy 컴포넌트 내에서 여러 레벨의 인증 및 권한 검사를 수행합니다(위의 표 참조).
    • IAM 인증 및 액세스 정책 검사는 프로젝트 레벨에서 수행됩니다.
    • 기본 Kubernetes API에 대한 멀티테넌트 액세스를 관리하기 위해 API 서버에 직접 액세스할 수 없습니다. 대신 액세스를 위해 Code Engine 사용자 정의 Kube-api-proxy API를 사용하십시오.
    • 역할 기반 액세스 제어 검사는 권한이 부여된 사용자만 프로젝트 리소스에 대한 특정 오퍼레이션을 수행할 수 있도록 리소스 레벨에서 수행됩니다.
  • IAM 내의 Code Engine 프로젝트 리소스에 대한 권한은 manager, reader 또는 writer 역할을 사용자에게 지정하여 고객에 의해 제어됩니다.
  • 고객 워크로드를 제한하기 위해 Code Engine은 다음 개념을 적용합니다.
    • 다양한 Linux 격리 기술을 통한 컨테이너 격리. 이러한 기술은 컨테이너의 권한 상승을 방지하고 제한된 시스템 권한 세트를 사용하도록 컨테이너를 제한하는 여러 계층의 보안을 보장합니다.
    • 과도한 리소스 사용을 방지하기 위한 리소스 할당량 및 LimitRange
    • 환경 내의 네트워크 플로우를 제어하는 네트워크 정책
  • 공유 멀티 테넌트 컴포넌트는 KubeDNS에서 역방향 검색을 사용하지 않도록 설정하는 등의 방법으로 보호됩니다.
  • Blast 반경을 제한하기 위해 각 샤드 클러스터는 고유한 VPC에서 실행되고, 다른 샤드 VPC로부터 격리됩니다.
  • DDOS 보호는 추가 비용 없이 Cloud Internet Services (CIS)를 통해 고객 애플리케이션을 포함한 모든 엔드포인트에 대해 자동으로 사용으로 설정됩니다. DDoS 보호는 시스템 상호 연결(OSI) 계층 3 및 계층 4(TCP/IP) 프로토콜 공격에는 적용되지만 계층 7( HTTP ) 공격에는 적용되지 않습니다. DDoS 보호를 참조하세요.
  • WAF(웹 애플리케이션 방화벽) 규칙이 필요한 경우 자체 IBM Cloud Internet Services ( CIS ) 인스턴스 또는 타사 게이트웨이 서비스를 사용자 지정 도메인을 사용하여 Code Engine 엔드포인트 앞에 구성하고 이 인스턴스에서 웹 애플리케이션 방화벽을 사용 설정하세요.