IBM Cloud Docs
Code Engine のアーキテクチャーとワークロードの分離について

Code Engine のアーキテクチャーとワークロードの分離について

IBM Cloud® Code Engine は、コンテナー・イメージ、12 ファクター・アプリ、機能、およびバッチ・ジョブをワンストップ・ショップとしてまとめて提供する IBM Cloud プラットフォームです。 これは、コントロール・プレーン、シャード (1 つまたは 1 セット)、およびルーティング・レイヤーという 3 つの主要なビルディング・ブロックで構成されるマルチテナント・システムです。 コントロール・プレーンとシャードは、別々のマルチゾーン Kubernetes クラスターとして実現されます。 以下の図は、アーキテクチャーの概要を表したものです。

Code Engine のアーキテクチャー図
図 1. Code Engineアーキテクチャー図

Code Engine は IBM Cloud Kubernetes Service クラスターを基盤とし、IBM Cloud Kubernetes Service のコンポーネントとワークロード分離に依存しています。 詳しくは、IBM Cloud Kubernetes Service VPC クラスターのアーキテクチャーを参照してください。

すべてのコンポーネントは IBM が管理および所有し、IBM Cloud アカウントで実行されます。 各クラスターは独自の VPC で実行され、他のクラスターから分離されています。

Code Engine のコントロール・プレーンが実行するコンポーネントは、すべての Code Engine ユーザー間で共有されます。これによって、この Kubernetes クラスターは真のマルチテナント・システムとなります。 コントロール・プレーンは、デプロイされた 4 つのマイクロサービスで構成されます。

表 1. Code Engine コントロール・プレーン・マイクロサービス
コンポーネント 目的
リソース・ブローカー Code Engine リソース・コントローラーで IBM Cloud プロジェクト・リソースを作成および削除し、シャードへのプロジェクトの配置を要求します。
プロジェクト配置コントローラー シャードを選択し、シャード上でのプロジェクトの作成、削除、および分離を要求します。
API サーバー 選択されたプロジェクトのターゲット情報 (KUBECONFIG ファイル) を提供します。 また、IAM アクセス・ポリシー・チェックを実行し、監査レコードを作成します。
Kube API proxy 各 API 要求を適切なシャード・クラスターに中継し、IAM ポリシー・チェックを実行して、監査レコードを作成します。

シャードは、ビルド、バッチ・ジョブ、アプリなどのお客様のワークロードを実行します。 そのため、シャード・クラスターでは、お客様のワークロードを制御する以下のマイクロサービスが実行されます。

表 2. シャード・クラスター・マイクロサービス
コンポーネント 目的
プロジェクト分離コントローラー Code Engine プロジェクト・リソースに対応する Kubernetes 名前空間を管理および分離します。 これは、RBAC (役割ベースのアクセス制御)、ポッド・セキュリティー・ポリシー、リソース割り当て量、ネットワーク・ポリシーなどの分離の側面をモニターして保証します。
プロジェクト・ドメインと証明書のコントローラー プロジェクトの経路エンドポイントのドメインと証明書を管理します。 エンドポイントは、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® Log Analysis プラットフォームのログとメトリックを IBM Log Analysis に転送します。 詳しくは、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-proxy API を使用してください。
    • リソース・レベルで役割ベース・アクセス制御のチェックが実行され、許可されたユーザーにのみ、プロジェクト・リソースに対する特定の操作の実行が許可されます。
  • 許可は、お客様が IAM で Code Engine プロジェクト・リソースに対する managerreader、または writer の役割をユーザーに割り当てて管理します。
  • お客様のワークロードを制限するために、Code Engine では以下の概念を採用しています。
    • Linux のさまざまな分離手法によるコンテナーの分離。 これらの手法による多層セキュリティーで、コンテナーの特権昇格を防止し、限られたシステム特権のみを使用するようにコンテナーを制限しています。
    • 割り当て量および LimitRange: リソースの過剰使用を防止します。
    • 環境内のネットワーク・フローを制御するためのネットワーク・ポリシー。
  • 共有のマルチテナント・コンポーネントは、例えば KubeDNS でリバース・ルックアップを無効にするなどの方法で保護されています。
  • 影響範囲を制限するために、各シャード・クラスターは、他のシャード VPC から分離された独自の VPC で実行されます。
  • DDoS 保護は、お客様のアプリケーションを含むすべてのエンドポイントに対して、追加コストなしで Cloud Internet Services (CIS) を介して自動的に有効になります。 DDoS 保護は、システム相互接続 (OSI) レイヤー 3 およびレイヤー 4 (TCP/IP) プロトコル攻撃をカバーしますが、レイヤー 7 (HTTP) 攻撃はカバーしません。 DDoS 保護 を参照してください。