要約ネットワーク ポリシーを通じてネットワーク セキュリティを強化すると、システムにほとんど影響を与えることなく、実装および保守のコストを大幅に削減できます。 特に、eBPF テクノロジーをベースとする Cilium は、カーネルのスケーラビリティ不足の問題を解決し、カーネル レベルでのワークロードに対して安全で信頼性が高く、監視可能なネットワーク接続を提供します。 背景Kubernetes ネットワークにセキュリティリスクが伴うのはなぜでしょうか? クラスター内のポッドはデフォルトでは分離されていないため、ポッドはネットワークを介して相互に通信できます。 これは問題を引き起こします。例えば、データの機密性により、サービスBはサービスAなどの特定のサービスからのアクセスのみを許可し、サービスCはサービスBにアクセスできない場合があります。サービスCがサービスBにアクセスできないようにするための解決策はいくつかあります。
上記の両方のオプションには、それぞれ長所と短所があります。
ネットワーク層から始めて、インフラの下位層におけるソリューションの探求を続けましょう。KubernetesはNetworkPolicy[1]を提供しており、「ネットワークレベルの分離」を実現できます。 アプリケーション例NetworkPolicyスキームの詳細なデモンストレーションを行う前に、デモンストレーションに使用したサンプルアプリケーションを紹介しましょう。Ciliumのインタラクティブチュートリアル「Cilium入門」[2]で使用されている「スターウォーズ」シナリオを使用します。 スターウォーズファンならおそらくご存知の3つのアプリケーションをご紹介します。
図に示すように、3つのアプリケーションを識別するために、orgとclassというラベルを使用しました。これら2つのラベルは、ネットワークポリシーを適用する際に負荷を識別するために使用されます。 # アプリ.yaml Kubernetes ネットワークポリシーより詳細な情報は公式ドキュメント[3]から入手できます。ここでは設定を直接示します。 # ネイティブ/ ネットワークポリシー.yaml
次にテストしてみましょう。 テストまず環境を準備します。Kubernetes環境としてK3s[4]を使用します。ただし、K3sのデフォルトのCNIプラグインであるFlannelはネットワークポリシーをサポートしていないため、プラグインを変更する必要があります。ここでは、K3s + CalicoソリューションであるCalico[5]を選択します。 まず、単一ノード クラスターを作成します。 curl - sfL https : // .k3s .ioを取得| K3S_KUBECONFIG_MODE = "644" INSTALL_K3S_EXEC = "--flannel-backend=none --cluster-cidr=10.42.0.0/16 --disable-network-policy --disable=traefik" sh - この時点では、Calico をまだインストールする必要があるため、すべての Pod は保留状態になっています。 kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml Calico が正常に実行されると、すべての Pod も正常に実行されます。 次のステップは、アプリケーションをデプロイすることです。 kubectl apply -fアプリ.yaml 戦略を実行する前に、次のコマンドを実行して、戦闘機がデス・スターに着陸できるかどうかを確認します。 kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing 結果は、両方のタイプの「戦闘機」(ポッド負荷)がデススター サービスにアクセスできることを示しています。 この時点で、ネットワーク ポリシーが実行されます。 kubectl apply -fネイティブ/ネットワークポリシー.yaml 再度「ログイン」しようとすると、xwing ログイン要求はそこで停止します (終了するには ctrl+c を使用するか、要求に --connect-timeout 2 を追加する必要があります)。 考えるKubernetesネットワークポリシーを使用し、ネットワークレベルでサービスにホワイトリスト機能を追加することで、目的を達成しました。このソリューションは変更コストを一切発生せず、システムへの影響もほとんどありませんでした。 シリウムの物語は、彼が登場する前に終わってしまった?続きを読もう。 当社のサービスでは、ホットアップデートや再起動といった管理操作を実行するためにシステムから呼び出される管理エンドポイントを公開することがあります。これらのエンドポイントは、通常のサービスから呼び出されてはなりません。そうしないと、深刻な影響が生じる可能性があります。 たとえば、次の例では、tiefighter は deathstar の管理エンドポイント /exhaust-port にアクセスします。 kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port パニック エラーが発生しました。ポッドを確認すると、dealthstar がダウンしていることがわかります。 Kubernetes ネットワーク ポリシーはレイヤー L3 と L4 でのみ機能し、レイヤー L7 では効果がありません。 まだCiliumを取り出す必要があります。 繊毛ネットワークポリシーCiliumはLinuxカーネル、ネットワーク、その他関連知識の多くの側面を網羅しているため、その実装原理を説明すると非常に長くなります。そのため、この記事では公式サイトからの紹介のみを抜粋しています。実装については、時間のある時に別の記事で執筆する予定です。 繊毛の紹介Cilium[6]は、革新的なカーネルテクノロジーeBPF[7]を搭載した、コンテナワークロード(クラウドネイティブ)間のネットワーク接続を提供、保護、監視するために使用されるオープンソースソフトウェアです。 eBPF とは何ですか?Linuxカーネルは、監視/可観測性、ネットワーク、セキュリティ機能を実装する理想的な環境として常に利用されてきました。しかし、これらのタスクにはカーネルソースコードの変更やカーネルモジュールのロードが必要であり、最終的には既存の抽象化の上に新たな抽象化が重ねられることになるため、容易ではありません。eBPFは、カーネルソースコードの変更やカーネルモジュールのロードなしに、サンドボックスプログラムをカーネル内で実行できる革新的なテクノロジーです。 Linux カーネルをプログラム可能にすることで、システムの複雑さを増大させたり、パフォーマンスやセキュリティを犠牲にしたりすることなく、既存の(新しい抽象化レイヤーを追加するのではなく)抽象化レイヤーに基づいて、よりスマートで機能豊富なインフラストラクチャ ソフトウェアを作成できるようになります。 Cilium のネットワーク戦略を見てみましょう。 #cilium /ネットワークポリシー- L4.yaml ネットワーク戦略はKubernetesのネイティブネットワーク戦略とそれほど変わりませんし、前回の紹介ですでに理解しているので、直接テストに移りましょう。 テストCilium自体がCNIを実装しているため、以前のクラスターは使用できなくなりました。まず、クラスターをアンインストールします。 k3s -アンインストール.sh 同じコマンドを使用して、単一ノード クラスターを作成します。 curl - sfL https : // .k3s .ioを取得| K3S_KUBECONFIG_MODE = "644" INSTALL_K3S_EXEC = "--flannel-backend=none --cluster-cidr=10.42.0.0/16 --disable-network-policy --disable=traefik" sh - 次に、Cilium CLI をインストールします。 curl - L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz{,.sha256sum} クラスターに Cilium をインストールします。 繊毛インストール Cilium が正常に実行されるのを待機しています: 繊毛の状態 アプリケーションの展開: kubectl apply -fアプリ.yaml アプリケーションの起動後にサービス呼び出しをテストします。 kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing L4 ネットワーク ポリシーを実行します。 kubectl 適用- f cilium /ネットワークポリシー- L4.yaml デス・スターに再度「ログイン」しようとしたとき、Xウイング戦闘機はまだログインできず、L4 レイヤー ルールが有効になっていることが示されました。 レイヤー L7 のルールをもう一度試してみましょう。 #cilium /ネットワークポリシー- L7.yaml 実行ルール: kubectl 適用- f cilium /ネットワークポリシー- L7.yaml 今回は、Tiefighter を使用して、デス・スターの管理インターフェースを呼び出します。 kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port 今回は、「アクセスが拒否されました」というメッセージが返され、レイヤー 7 のルールが有効になっていることが示されました。 |
CiliumでKubernetesネットワークセキュリティを強化する
関連するおすすめ記事
-
2010 年のベスト オープンソース エンタープライズ アプリケーション 9 選
-
Alibaba のオープンソース TransmittableThreaLocal の原理と使用方法を理解するための包括的なガイド。
-
組み込みプロジェクトでオープンソース プロジェクトを使用する場合、どのような問題を考慮する必要がありますか?
-
Linux の父の目覚め?Nvidia が GPU カーネル ドライバーをオープンソース化という前例のない動きを見せ、ネットユーザー: こんなの見たことない!
-
Godot 4.2 リリース: オープンソース ゲーム エンジンを次のレベルへ
-
Sigil を使用して Linux 上で EPUB ファイルを作成および編集する