優れた可視性と適用のための Kubernetes または OpenShift エージェントのインストール

Kubernetes または OpenShift の概要

コンテナ オーケストレーション プラットフォームにより、ネットワークポリシー、ポッド セキュリティ ポリシー、ロールベース アクセス コントロール(RBAC)などのセキュリティポリシーを定義して適用し、コンテナ化されたアプリケーションのセキュリティをさらに強化できます。Cisco Secure Workload は、Kubernetes を使用して、コンテナ化されたアプリケーションの展開、スケーリング、および管理を自動化します。コンテナ化されたワークロードの状態とパフォーマンスを詳細に可視化します。一方、OpenShift は Kubernetes 上に構築され、強化されたセキュリティ、開発者ツール、管理機能などのエンタープライズ グレードの機能が追加されています。

主なコンセプト

  • 名前空間 :名前空間は、クラスタを複数の仮想サブクラスタに分割する論理的な方法です。

  • ポッド:ポッドは、作成または展開できる Kubernetes オブジェクトモデルの最小ユニットです。ポッドは、クラスタ内で実行中のプロセスの単一インスタンスを表し、1 つ以上のコンテナを含めることができます。

  • ノード: ノードは、コンテナでアプリケーションを実行する、クラスタ内の物理または仮想マシンです。各ノードは、Kubernetes コントロールプレーンによって管理されます。

  • サービス:サービスは、ポッドにアクセスするためのポッドとポリシーの論理的なセットを定義します。サービスにより、依存ポッド間の分離が可能になり、マイクロサービス アーキテクチャの管理が容易になります。

  • サイドカー コンテナ:Kubernetes のサイドカー コンテナは、同じポッド内のメイン アプリケーション コンテナとともに実行される追加のコンテナです。この設定により、サイドカー コンテナはネットワーク、ストレージ、およびライフサイクルをメイン コンテナと共有でき、緊密に連携できます。

  • Service Mesh:Kubernetes の Service Meshは、マイクロサービス通信を管理し、高度なトラフィック管理およびモニタリング機能とともにセキュリティ、信頼性、およびオブザーバビリティを向上させます。

制御ペイン コンポーネント

UI を介して Kubernetes コントロール パネルにアクセスするか、CLI から Kubectl コマンドを使用してアクセスできます。

  • API サーバー:API サーバーは、Kubernetes API を公開する中央管理エンティティであり、内部および外部のすべての要求を処理し、コントロール プレーンのフロントエンドとして機能します。

  • スケジューラ: スケジューラは、リソース要件、制約、および可用性に基づいて、ポッドをノードに割り当てる役割を担います。

  • コントローラマネージャ:クラスタの望ましい状態が実際の状態と一致するようにクラスタの状態を調整するさまざまなコントローラを実行します。

  • etcd:etcd は、Kubernetes がすべてのクラスタ データ ストレージのニーズに使用する分散 Key-Value ストアです。

ノード コンポーネント

  • kubelet:kubelet は、ポッド内のコンテナが実行されていることを確認し、コントロール プレーンにそのステータスを報告する各ノードのエージェントです。

  • kube-proxy:kube-proxy は、ネットワーク ルールを管理してトラフィックを分散する各ノード上のネットワークプロキシであり、サービスにアクセス可能で接続が適切なポッドに到達するようにします。

  • コンテナランタイム:コンテナ ランタイムは、コンテナの実行を担当するソフトウェアです。

Cisco Secure Workload への Kubernetes/OpenShift の展開

展開は、次の 4 つの主要なコンポーネントで構成されています。

  1. オンプレミスの Cisco Secure Workload クラスタ、または SaaS でホストされている Cisco Secure Workload テナントのいずれかにある [制御(Control)] ペインまたは [管理(Management)] ペイン

  2. 管理プレーン内に確立される Cisco Secure Workload Orchestrator またはコネクタは、EKS、AKS、GKE、OpenShift、または管理対象外の Kubernetes の Kubernetes クラスタ API と連携します。この相互作用により、ポッドとサービス メタデータの可視性が向上し、ポッド ID、注釈、ラベルなどの詳細が提供されます。詳細については、 「Kubernetes/OpenShift」を参照してください。

  3. Kubernetes デーモンセットは、 セキュリティ対策を目的として Kubernetes または OpenShift クラスタに展開されます。DaemonSet は、各 Kubernetes または OpenShift ノードでの Cisco Secure Workload エージェントまたはポッドの継続的な動作を保証します。詳細については、「Install Kubernetes or OpenShift Agents for Deep Visibility and Enforcement」を参照してください。

  4. 脆弱性スキャナ をアクティブにすると、Kubernetes ノード内のいずれかのポッドでスキャンが開始されます。このスキャナは、Kubernetes または OpenShift クラスタ内のすべてのコンテナ イメージを監視し、識別された CVE をコントロール プレーンまたは管理プレーンに報告します。

要件および前提条件

オペレーティングシステムのサポート情報については、エージェントの OS サポートマトリックスを参照してください。

要件

  • インストールスクリプトには、クラスタノードで特権エージェントポッドを起動するための Kubernetes または OpenShift 管理者のログイン情報が必要です。

  • Cisco Secure Workload エンティティは、tetration 名前空間に作成されます。

  • ノードまたはポッドのセキュリティポリシーは、特権モードのポッドを許可する必要があります。

  • busybox:1.33 イメージは、事前にインストールされているか、Docker Hub からダウンロード可能である必要があります。

  • containerd ランタイムでは、config_path が設定されていない場合は、config.toml(デフォルトの場所:/etc/containerd/config.toml)を次のように変更します。
    
    ```
        [plugins."io.containerd.grpc.v1.cri".registry]
        config_path = "/etc/containerd/certs.d"
     ```

    containerd デーモンを再起動します。

  • Kubernetes または OpenShift コントロールプレーンノードで実行するには、-toleration フラグを使用して、Secure Workload ポッドの容認を渡すことができます。通常渡される許容は、通常、ポッドがコントロールプレーンノードで実行されないようにする NoSchedule 容認です。

  • Windows ワーカーノードの場合:

    • サポートされている Windows ワーカー ノード コンテナ ランタイム:ContainerD。

    • containerD の設定:次の containerd の変更を設定します。
      
      ```
          [plugins."io.containerd.grpc.v1.cri".registry]
          config_path = "/etc/containerd/certs.d"
       ```

      registry.mirrors の下の設定を削除します。デフォルト設定ファイルの場所は C:\Program Files\containerd\config.toml です。

      設定の変更後に、containerd デーモンを再起動します。

    • イメージ mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0 は、Windows ワーカーノードに事前にインストールされているかダウンロード可能である必要があります。

    • 新しいバージョンにアップグレードする既存の Kubernetes エージェントには、Windows DaemonSet エージェントが自動的に含まれます。ただし、以前のスクリプトでは、Windows DaemonSet エージェントはアンインストールされません。Windows DaemonSet エージェントをアンインストールするには、最新のインストーラスクリプトをダウンロードしてください。

    • サポート対象:

      • Microsoft Windows Server 2022

      • Windows Server 2019

      • Kubernetes 1.27 以降

ポリシー適用の要件

IPVS ベースの kube-proxy モードは、OpenShift ではサポートされません。

これらのエージェントは、[ルールの保持(Preserve Rules)] オプションを有効にして設定する必要があります。詳細については、「エージェント設定プロファイルの作成」を参照してください。

適用が適切に機能するためには、インストールされている CNI プラグインが次の条件を満たす必要があります。

  • すべてのノードとポッド間にフラットなアドレス空間(IP ネットワーク)を提供すること。クラスタ内通信のためにソースポッド IP をマスカレードするネットワークプラグインはサポートされていません。

  • Secure Workload 適用エージェントが使用する Linux iptables ルールまたはマークに干渉しないこと(マークビット 21 および 20 は、NodePort サービスのトラフィックを許可および拒否するために使用されます)

次の CNI プラグインは、上記の要件を満たすことがテストされています。

  • 次の Felix 設定を持つ Calico (3.13):(ChainInsertMode: Append, Ipta- blesRefreshInterval: 0) または (ChainInsertMode: Insert, IptablesFilterAllowAction: Return, IptablesMangleAllowAction: Return, IptablesRefreshInterval: 0)。その他のオプションは、そのデフォルト値を使用します。

これらのオプションの設定に関する詳細については、Felix 設定リファレンスを参照してください。

エージェント スクリプト インストーラ方式を使用した Kubernetes または OpenShift エージェントのインストール


Note


エージェント スクリプト インストーラ方式では、後から含まれるノードにエージェントが自動的にインストールされます。


Procedure


Step 1

エージェントのインストール方式に移動するには、次の手順を実行します。

  • 初めてのユーザーの場合は、クイックスタートウィザードを起動し、[エージェントのインストール(Install Agents)] をクリックします。

  • ナビゲーションウィンドウで、[管理(Manage)] > [エージェント(Agents)] の順にクリックし、[インストーラ(Installer)] タブを選択します。

Step 2

[エージェントスクリプトインストーラ(Agent Script Installer)] をクリックします。

Step 3

[プラットフォームの選択(Select Platform)] ドロップダウンメニューから、[Kubernetes] を選択します。

サポートされている Kubernetes または OpenShift プラットフォームを表示するには、[サポートされているプラットフォームの表示(Show Supported Platforms)] をクリックします。

Step 4

エージェントをインストールするテナントを選択します。

Note

 

Cisco Secure Workload SaaS クラスタでは、テナントを選択する必要はありません。

Step 5

Cisco Secure Workload との通信に HTTP プロキシが必要な場合は、[はい(Yes)] を選択し、有効なプロキシ URL を入力します。

Step 6

[ダウンロード(Download)] をクリックし、ファイルをローカルディスクに保存します。

Step 7

Kubernetes API サーバーにアクセスでき、デフォルトのコンテキスト、クラスタ、ユーザーとしての管理権限を持つ kubectl 構成ファイルが存在する Linux マシンで、インストーラスクリプトを実行します。

インストーラは、デフォルトの場所(~/.kube/config)からファイルの読み取りを試みますが、--kubeconfig コマンドを使用して設定ファイルの場所を明示的に指定できます。


インストールスクリプトに、インストールされた Cisco Secure Workload エージェントの DaemonSet とポッドを確認するための説明が示されます。


Note


ダウンロード前にエージェント インストーラ ページで構成された HTTP プロキシは、Cisco Secure Workload エージェントが Cisco Secure Workload クラスタに接続する方法のみを制御します。Kubernetes または OpenShift ノードのコンテナランタイムでは、独自のプロキシ設定が使用されるため、この設定はこれらのノードによる Docker イメージの取得方法には影響しません。Docker イメージが Cisco Secure Workload クラスタから取得されない場合は、コンテナのイメージプルプロセスをデバッグし、適切な HTTP プロキシを追加します。


Istio サービスメッシュによる優れた可視性と適用

Cisco Secure Workload は、Istio Service Mesh で有効になっている Kubernetes または OpenShift クラスタ内で実行されているすべてのアプリケーションの包括的な可視性と適用を提供します。

次に、これらのアプリケーションを効果的にセグメンテーションするための主要なコンポーネントとガイドラインを示します。

サービス メッシュ サイドカー

サービス メッシュは、アプリケーション コンテナとともに展開されたサイドカー プロキシを使用して、ネットワーク トラフィックを代行受信および管理します。アプリケーションと同じネットワーク名前空間を共有するこれらのサイドカーは、すべての着信および発信のネットワーク通信を仲介します。

トラフィックの適用

  • サービス メッシュ対応アプリケーションのセグメンテーション ポリシーを実装する場合、サイドカー プロキシが使用する追加のポートを考慮することが重要です。これらのポートは、アプリケーションのネットワーク トラフィックの管理と保護において重要な役割を果たします。

  • サービス メッシュが失われず、利用可能な状態を維持するためには、セグメンテーション ポリシーにサイドカー プロキシによって使用されるポートのルールが明示的に含まれていることを確認してください。

サイドカー プロキシでサポートされるポートとプロトコル

サービス メッシュ対応アプリケーションにセグメンテーション ポリシーを適用するときに、次のポートを含めます。

ポート

プロトコル

説明

15000

TCP

Envoy 管理ポート(コマンド/診断)

15001

TCP

Envoy のアウトバウンド

15004

HTTP

デバッグ ポート

15006

TCP

Envoy インバウンド

15008

HTTP2

HBONE mTLS トンネル ポート

15020

HTTP

Istio エージェント、Envoy、およびアプリケーションからマージされた Prometheus テレメトリ

15021

HTTP

正常性チェック

15053

DNS

DNS ポート(キャプチャが有効になっている場合)

15090

HTTP

Envoy Prometheus テレメトリ


Note


上記のポートは、エンベイサイドカープロキシ通信のために Istio が使用するデフォルトのポートです。これらのポートが Istio グローバルサービスメッシュ構成の設定で更新されている場合は、アプリケーションで更新されたポートを使用します。


サービス メッシュ コントロール プレーンでサポートされるポートとプロトコル

コントロール プレーンをセグメント化する際は、次のポートとプロトコルを使用します。

ポート

プロトコル

説明

443

HTTPS

ウェブフック servie ポート

8080

HTTP

デバッグ インターフェイス(廃止、コンテナ ポートのみ)

15010

GRPC

XDS および CA サービス(プレーンテキスト、セキュア ネットワーク向けのみ)

15012

GRPC

XDS および CA サービス(TLS および mTLS、実稼働環境での使用を推奨)

15014

HTTP

コントロール プレーンのモニタリング

15017

HTTPS

ウェブフック コンテナ ポート、443 から転送