第9章 ネットワーク・セキュリティとサービス・メッシュ ネットワーク、ネットワーク・セキュリティ、サービスメッシュ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Kubernetesクラスタは、事実上、接続されたシステムのクラスタにわたる分散システムのマネージャーである。このため、接続されたシステム同士がどのように通信するかが極めて重要になるが、そのカギを握るのがネットワーク接続だ。Kubernetesが管理する分散サービス間の通信をどのように促進するかを理解することは、サービス間通信を効果的に適用するために重要だ。
この章では、Kubernetesがネットワークに課す原則、およびこれらの概念をさまざまな状況で適用する際のベストプラクティスに焦点を当てる。ネットワークに関する議論では、通常、セキュリティも一緒に議論される。ネットワークセキュリティの境界がネットワークレイヤーで制御されるという伝統的なモデルは、Kubernetesの分散システムという新しい世界にも存在しないわけではないが、その実装方法や提供される機能は若干変化する。Kubernetesはネットワーク・セキュリティ・ポリシーのためのネイティブAPIをもたらすが、それは昔のファイアウォール規則と不気味なほど似ている。
この章の最後のセクションでは、サービスメッシュの新しく恐ろしい世界を掘り下げていく。怖い」という言葉は冗談で使われているが、Kubernetesのサービスメッシュ技術に関しては、まさにワイルドウエストだ。
Kubernetesネットワークの原則
Kubernetesがどのように基礎となるネットワークを使用してサービス間の通信を促進しているかを理解することは、アプリケーションアーキテクチャを効果的に計画する方法を理解する上で非常に重要だ。通常、ネットワーキングのトピックは、ほとんどの人に大きな頭痛の種を与え始める。これはコンテナネットワーキングのレッスンというより、ベストプラクティスのガイダンスなので、かなりシンプルにするつもりだ。幸いなことに、Kubernetesはネットワークに関するいくつかの規則を定めている。この規則には、異なるコンポーネント間で通信がどのように動作することが期待されているかが概説されている。それぞれの規則を詳しく見ていこう:
- 同一Pod内のコンテナ間通信
-
同じPod内のすべてのコンテナは、同じネットワークスペースを共有する。これにより、コンテナ間のローカルホスト通信が効果的に可能になる。また、同じポッド内のコンテナは異なるポートを公開する必要がある。これはLinuxの名前空間とDockerネットワーキングの力を使って行われ、ポッドのネットワーキングをホストすることだけを行う一時停止コンテナをすべてのポッドで使用することで、これらのコンテナが同じローカルネットワーク上にあることを可能にする。図9-1は、コンテナAがlocalhostとコンテナがリッスンしているポート番号を使用してコンテナBと直接通信できる方法を示している。
図9-1. コンテナ間のイントラポッド・コミュニケーション
- ポッド間コミュニケーション
-
すべてのPod( )は、ネットワークアドレス変換(NAT)なしで互いに通信する必要がある。つまり、受信側のポッドに表示されるポッドのIPアドレスは、送信側の実際のIPアドレスである。これは、使用するネットワークプラグインによって異なる方法で処理されるが、これについてはこの章の後のほうで詳しく説明する。この規則は、同じノード上のPod間でも、同じクラスタ内の異なるノード上のPod間でも同じである。これは、ノードがNATを介さずに直接ポッドと通信できることにも及ぶ。これにより、ホスト・ベースのエージェントまたはシステム・デーモンが必要に応じてポッドに通信できるようになる。 ...