Code Engine 아키텍처 및 워크로드 격리에 대해 알아보기
IBM Cloud® Code Engine은 12가지 요소 앱, 함수 및 일괄처리 작업을 원스톱 통합 지원 시스템(one-stop-shop)으로 통합하는 IBM Cloud 플랫폼입니다. 제어 플레인, 샤드(세트) 및 라우팅 계층의 세 가지 주요 구성 요소로 구성되는 멀티 테넌트 시스템입니다. 제어 플레인 및 샤드는 별도의 다중 구역 Kubernetes 클러스터로 실현됩니다. 다음 다이어그램은 아키텍처의 그래픽 개요를 제공합니다.
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 리소스 제어기에서 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은
apiserver및kube-api-proxy컴포넌트 내에서 여러 레벨의 인증 및 권한 검사를 수행합니다(위의 표 참조).- IAM 인증 및 액세스 정책 검사는 프로젝트 레벨에서 수행됩니다.
- 기본 Kubernetes API에 대한 멀티테넌트 액세스를 관리하기 위해 API 서버에 직접 액세스할 수 없습니다. 대신 액세스를 위해 Code Engine 사용자 정의
Kube-api-proxyAPI를 사용하십시오. - 역할 기반 액세스 제어 검사는 권한이 부여된 사용자만 프로젝트 리소스에 대한 특정 오퍼레이션을 수행할 수 있도록 리소스 레벨에서 수행됩니다.
- 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 엔드포인트 앞에 구성하고 이 인스턴스에서 웹 애플리케이션 방화벽을 사용 설정하세요.