OCI Kubernetes Engine仮想ノードを使用したサーバーレスKubernetesのデプロイ

Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes EngineまたはOKE)には、管理対象ノードと仮想ノードという様々な操作モードが用意されています。Oracle Cloud Infrastructure (OCI)はコントロール・プレーンを管理しますが、操作モードを選択します。管理対象ノードでは、テナンシ内のノードをプロビジョニングし、ワーカー・ノードのアップグレード、スケーリング、パッチ適用などのメンテナンス操作を担当します。OCIは、これらの操作のための自動化されたステップを提供しますが、操作を開始するのはお客様次第です。OCIは、仮想ノードを使用して、OCIテナンシ内の実際のノードのソフトウェア抽象化をデプロイ、監視および管理します。サーバーレスKubernetesエクスペリエンスに仮想ノードを使用して、ノード・インフラストラクチャの管理、スケーリング、アップグレードおよびトラブルシューティングの運用オーバーヘッドなしで、ワークロード、ポッドおよびアプリケーション・ロジックに集中したい場合に、コンテナ化されたアプリケーションを大規模に実行します。

どちらの操作モードでも、最もミッションクリティカルな基本アプリケーションをサポートできます。仮想ノードを使用すると、Kubernetesの操作が簡素化され、最高の価格性能が得られます。管理対象ノードと仮想ノードとのトレードオフは、管理対象ノードとのトレードオフです。ノード・インフラストラクチャをより詳細に制御できます。HostPortおよびHostNetworkを使用するようにKubernetesリソースを構成するか、アプリケーションまたはツールに必要なDaemonSetsおよびその他のオプションを実行できます。ほとんどのユースケースでは、これらのオプションは必要ありません。

仮想ノードは、コンテナの実行および管理を微調整する必要がない場合に最も意味があります。アプリケーションで、仮想ノードで使用できないノード・インフラストラクチャの構成が必要な場合は、管理対象ノードを使用します。

アーキテクチャ

このアーキテクチャは、仮想ノードを持つOCI Kubernetes Engine (OKE)クラスタにデプロイされたアプリケーション・サーバーを示しています。仮想ノードを使用すると、顧客のテナンシ内の別のサブネットにデプロイされたOracle MySQL Database Serviceデータベースで(CRUD)操作を実行、作成、読取り、更新および削除できます。アプリケーション・サーバーには、Kubernetesイングレス・コントローラにマップするロード・バランサ・サービスを介して外部からアクセスします。アプリケーションには、Oracle Cloud Infrastructure Vaultに格納されているOracle MySQL Database Serviceにアクセスするためのパスワードが必要です。

OKEクラスタをOCI Vaultと統合するには、外部シークレット・オペレータがOKEクラスタにデプロイされます。これにより、データベースのパスワードを保持するためにOCI VaultにマップするSecretStoreリソースを定義できます。SecretStoreリソースがマップされると、OKEクラスタはKubernetesシークレットとしてパスワードにアクセスできます。OCI Vaultから読み取る権限を持つOCI Identity and Access Managementロールでは、ポッドがシークレットにアクセスできます。ロールは、ポッドの定義で使用されるKubernetesサービス・アカウントに関連付けられ、OCI Vaultからの読取りへのアクセス権を付与します。

次の図は、このリファレンス・アーキテクチャを示しています。

k8n-virtual-nodes.pngの説明が続きます
図k8n-virtual-nodes.pngの説明

k8n-virtual-nodes-oracle.zip

このアーキテクチャには、次のコンポーネントがあります。

  • Tenancy

    テナンシは、Oracle Cloud Infrastructureのサインアップ時にOracle Cloud内でOracleによって設定される、セキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は1つのテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、1つのテナンシは1つのサブスクリプションに関連付けられ、1つのサブスクリプションには通常、1つのテナンシのみが含まれます。

  • リージョン

    Oracle Cloud Infrastructureリージョンとは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的領域です。リージョンは他のリージョンから独立し、長距離の場合は(複数の国または大陸にまたがって)分離できます。

  • コンパートメント

    コンパートメントは、Oracle Cloud Infrastructureテナンシ内のクロスリージョン論理パーティションです。Oracle Cloudでのリソースの編成、リソースへのアクセスの制御、および使用割当ての設定には、コンパートメントを使用します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。

  • 可用性ドメイン

    可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害は、リージョン内の他の可用性ドメインには影響しません。

  • フォルト・ドメイン

    フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、電源とハードウェアは独立しています。複数のフォルト・ドメインにリソースを分散する場合、アプリケーションは、物理サーバーの障害、システム・メンテナンスおよびフォルト・ドメイン内の電源障害を許容できます。

  • 仮想クラウド・ネットワーク(VCN)およびサブネット

    VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。従来のデータ・センター・ネットワークと同様に、VCNを使用するとネットワーク環境を制御できます。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。

  • ロード・バランサ

    Oracle Cloud Infrastructure Load Balancingサービスは、単一のエントリ・ポイントからバックエンドの複数のサーバーへの自動トラフィック分散を提供します。

  • インターネット・ゲートウェイ

    インターネット・ゲートウェイは、VCN内のパブリック・サブネットとパブリック・インターネット間のトラフィックを許可します。

  • ネットワークアドレス変換(NAT)ゲートウェイ

    NATゲートウェイを使用すると、VCN内のプライベート・リソースは、受信インターネット接続にこれらのリソースを公開することなく、インターネット上のホストにアクセスできます。

  • サービス・ゲートウェイ

    サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and does not traverse the internet.

  • ボールト

    Oracle Cloud Infrastructure Vaultでは、データを保護する暗号化キーと、クラウド内のリソースへのアクセスを保護するために使用するシークレット資格証明を集中管理できます。Vaultサービスを使用して、ボールト、キーおよびシークレットを作成および管理できます。

  • レジストリ

    Oracle Cloud Infrastructure Registryは、本番ワークフローを簡素化できる、Oracle管理のレジストリです。レジストリを使用すると、Dockerイメージなどの開発アーティファクトを簡単に格納、共有および管理できます。Oracle Cloud Infrastructureの高可用性とスケーラビリティのアーキテクチャにより、アプリケーションを確実にデプロイして管理できます。

  • セキュリティ・リスト

    サブネットごとに、サブネット内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。

  • ルート表

    仮想ルート表には、通常ゲートウェイを介して、サブネットからVCN外部の宛先にトラフィックをルーティングするルールが含まれます。

  • OCI Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes EngineまたはOKE)は、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションで必要なコンピュート・リソースを指定すると、KubernetesエンジンがそれらをOracle Cloud Infrastructureの既存のテナンシにプロビジョニングします。OKEは、Kubernetesを使用して、ホストのクラスタにわたるコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。

  • Oracle MySQL Database Service

    Oracle MySQL Database ServiceはフルマネージドのOracle Cloud Infrastructure (OCI)データベース・サービスで、開発者はセキュアなクラウド・ネイティブ・アプリケーションを迅速に開発およびデプロイできます。Oracle MySQL Database Serviceは、OCIおよびMySQLエンジニアリング・チームによって100%構築、管理、およびサポートされています。

    Oracle MySQL Database Serviceには、統合された高パフォーマンス分析エンジン(HeatWave)があり、運用MySQLデータベースに対して高度なリアルタイム分析を直接実行できます。

  • イングレス・コントローラ

    イングレス・コントローラ(ing)は、Kubernetesクラスタで実行され、イングレス・リソースを管理するコンポーネントです。外部ネットワークからトラフィックを受信し、正しいサービスにルーティングし、ロード・バランシングとSSL終了を実行します。イングレス・コントローラは、通常、クラスタ内の個別のポッドとして実行され、管理対象のサービスとは独立してスケーリングできます。

  • Kubernetesシークレット

    Kubernetesシークレットには、認証トークン、パスワード、SSHキーなどの機密構成データを含めることができます。シークレットを使用すると、機密データを制御し、権限のないユーザーにデータを公開するリスクを軽減できます。Oracle Container Engine for Kubernetesは、保存されているKubernetesシークレットの暗号化をサポートしています。

  • 外部シークレット・オペレータ

    Kubernetes外部シークレット・オペレータは、Oracle Container Engine for KubernetesOracle Cloud Infrastructure Vaultと統合します。オペレータは、外部APIから情報を読み取り、値をKubernetesシークレットに自動的に注入します。

  • SecretStore

    Kubernetesクラスタ・コントロール・プレーンは、機密構成データ(認証トークン、証明書、資格証明など)をKubernetesシークレット・オブジェクトとしてetcdに格納します。Etcdは、Kubernetesがクラスタの調整および状態管理に使用するオープン・ソースの分散キー/値ストアです。Container Engine for Kubernetesによって作成されたKubernetesクラスタでは、etcdは、Oracle Cloud Infrastructure Block Volumesサービスのブロック・ストレージ・ボリュームとの間でデータの書込みと読取りを行います。デフォルトでは、Oracleは、etcdおよびKubernetesシークレットを含む、保存中のブロック・ボリュームのデータを暗号化します。Oracleは、このデフォルトの暗号化をマスター暗号化キーを使用して管理し、操作を必要としません。マスター暗号化キーとその使用方法をさらに制御するには、マスター暗号化キーをOracleで管理するのではなく、自分で管理することを選択できます。

    新しいクラスタを作成する場合、Oracle Key Management Cloud Serviceを使用して、etcdのKubernetesシークレットを暗号化するように指定できます。

  • ポスト

    ポッドは、1つ以上のコンテナとその共有記憶域のグループであり、これらをどのように一緒に実行するかに関する特定のオプションです。一般に、ポッド内のコンテナは同じネットワークとメモリー領域を共有し、記憶域の共有ボリュームにアクセスできます。これらの共有リソースにより、ポッド内のコンテナは、単一の論理ホストにインストールされているようにシームレスな方法で内部的に通信できます。

  • 仮想ノード

    仮想ノードは、実際のノードのソフトウェア抽象化です。仮想ノードはOCIのテナンシにデプロイされ、OCIによって完全に監視および管理されます。

レコメンデーション

次の推奨事項を開始点として使用します。 お客様の要件は、ここで説明するアーキテクチャとは異なる場合があります。
  • VCN

    VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。

    プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを、セキュリティ境界として機能できる同じサブネットにアタッチします。

    リージョナル・サブネットを使用します。

  • ネットワーク・セキュリティ・グループ(NSG)

    NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGでは、VCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。

    NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGでは、VCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。

  • ロード・バランサの帯域幅

    ロード・バランサの作成時に、固定帯域幅を提供する事前定義済のシェイプを選択するか、帯域幅範囲を設定するカスタム(フレキシブル)シェイプを指定して、トラフィック・パターンに基づいて帯域幅を自動的にスケーリングできます。どちらの方法でも、ロード・バランサの作成後にいつでもシェイプを変更できます。

考慮事項

仮想ノードを操作する場合は、次の点を考慮してください。

仮想ノードから開始するには、まず仮想ノード・プールを使用してOCI Kubernetes Engineクラスタを作成するか、既存のKubernetes Engine (OKE)クラスタに仮想ノード・プールを追加する必要があります。

  • 仮想ノードのシェイプと配置を選択します。
    • シェイプによって、プロセッサのタイプと、各ポッドに割り当てることができるCPUおよびメモリー・リソースの量が決まります。各ポッドは、選択したシェイプのメモリーおよびCPU制限まで割り当てることができます。

    • 仮想ノードは、Horizontal Pod Autoscaler (HPA)の構成でポッドをスケーリングします。ノードAutoscalerを構成する必要はありません。

    • 仮想ノードは、高可用性(HA)のニーズに最も適した特定のアベイラビリティ・ドメインおよびフォルト・ドメインに配置できます。冗長性の最大レベルについては、OKEクラスタの可用性ドメイン内の各フォルト・ドメインに仮想ノードを配置します。

    • Kubernetesノード・ラベルを使用して、仮想ノードでのポッドの配置を指定します。ノード間でポッドの均等配分を取得するには、PodTopologySpread制約を使用します。

  • 仮想ノードは、VCNネイティブ・ポッド・ネットワークを使用します。クラスタで使用可能なポッドの数は、サブネットで使用可能なIPアドレスの数によって制限されます。

    • ネイティブ・ポッド・ネットワーキングは、VCNのサブネットにネイティブなIPアドレスをすべてのポッドに提供します。これにより、各ポッドは、VCNフロー・ログ、ルーティング・ポリシー、VTAP、セキュリティ・グループなどの組込みOCIネットワーク・セキュリティ機能の利点を享受できます。
    • 使用するポッドおよびノードの数を許可し、拡張の余地を提供するサブネット範囲の使用を検討してください。
    • ネットワーク・セキュリティ・グループ(NSG)を定義して、ポッドからのイングレスおよびエグレスが可能なトラフィックのタイプを制限します。
    • VCNフロー・ログを使用して、ポッド間のすべてのネットワーク・トラフィックを検査するか、VTAPを使用してネットワーク・トラフィックを取得します。
  • 仮想ノードのポッドには、ワークロード・アイデンティティを持つ他のOCIサービスへのアクセス権が付与されます。

    ポッドがOCI内の他のサービスへのアクセスを必要とする場合があります。

    • ワークロード・アイデンティティを使用して、仮想ノードのポッドに権限を付与します。ワークロード・アイデンティティは、OCI Identity and Access Managementロールを、ポッドに割り当てられたKubernetesサービス・アカウントに関連付けます。
  • 仮想ノードは、ポッドのハイパーバイザ・レベルの分離を提供します。

    セキュリティの脆弱性により、コンテナ内の悪意のあるプロセスが「エスケープ」され、ノードのカーネルに影響を及ぼす可能性があり、ノードが停止する可能性があります。悪意のあるコードは、メモリやストレージ内のデータにアクセスし、データを漏洩させることもできます。抽出されたデータは、マルチテナント環境の別のテナントに属している可能性があります。

    • 仮想ノードは、ポッドのハイパーバイザ・レベルの分離を提供します。ポッドは、コンピュート、メモリーおよびネットワークをクラスタ内の他のポッドと共有せず、悪意のあるコードによって発生する別のテナントに属する停止されたノードまたは漏洩したデータの可能性を軽減します。

確認

  • Author: Chiping Hwang