Azure Kubernetes Service (AKS) でのアプリケーションに対するネットワークの概念
アプリケーション開発に対するコンテナー ベースのマイクロサービス アプローチでは、アプリケーション コンポーネントが連携してそれぞれのタスクを処理します。 Kubernetes は、この連携を可能にするさまざまなリソースを提供します。
- アプリケーションへの接続と内部または外部への公開を実行できます。
- アプリケーションを負荷分散することにより、可用性の高いアプリケーションを構築することができます。
- ポッドとノードへの、またはポッドとノード間のネットワーク トラフィックのフローを制限して、セキュリティを強化できます。
- さらに複雑なアプリケーションの場合は、SSL/TLS 終端または複数のコンポーネントのルーティングのためのイングレス トラフィックを構成できます。
この記事では、AKS 内でアプリケーションにネットワークを提供する主要な概念について説明します。
Kubernetes でのネットワークの基本
Kubernetes では、アプリケーションまたはそのコンポーネントの内部およびそれらの間でのアクセスを管理するために、仮想ネットワーク レイヤーが使われます。
Kubernetes ノードと仮想ネットワーク: Kubernetes ノードは仮想ネットワークに接続されます。 このセットアップにより、ポッド (Kubernetes でのデプロイの基本単位) はインバウンドとアウトバウンド両方の接続が可能になります。
kube-proxy コンポーネント: kube-proxy は各ノードで実行され、必要なネットワーク機能を提供します。
Kubernetes の特定の機能について:
- ロード バランサー: ロード バランサーを使うと、さまざまなリソース間にネットワーク トラフィックを均等に分散できます。
- イングレス コントローラー: これにより、アプリケーション トラフィックの転送に不可欠なレイヤー 7 ルーティングが容易になります。
- エグレス トラフィック制御: Kubernetes を使うと、クラスター ノードからのアウトバウンド トラフィックを管理および制御できます。
- ネットワーク ポリシー: これらのポリシーを使って、ポッド内のネットワーク トラフィックのセキュリティ対策とフィルター処理を実現できます。
Azure プラットフォームのコンテキストでは:
- Azure によって、AKS (Azure Kubernetes Service) クラスターの仮想ネットワークが効率化されます。
- Azure で Kubernetes のロード バランサーを作成すると、対応する Azure ロード バランサー リソースが同時に設定されます。
- ポッドへのネットワーク ポートを開くと、必要なネットワーク セキュリティ グループ規則が Azure によって自動的に構成されます。
- 新しいイングレス ルートが確立されると、Azure は HTTP アプリケーション ルーティング用に外部 DNS 構成を管理することもできます。
Azure 仮想ネットワーク
AKS では、次のネットワーク モデルのいずれかを使うクラスターをデプロイできます。
- オーバーレイ ネットワーク モデル: オーバーレイ ネットワークは、Kubernetes で最も一般的に使用されるネットワーク モデルです。 ポッドには、論理的に分離されたプライベート CIDR の IP アドレスが、AKS ノードがデプロイされている Azure 仮想ネットワーク サブネットから割り当てられます。 このモデルを使用することで、フラット ネットワーク モデルと比較して、スケーラビリティがよりシンプルになり、向上します。
- フラット ネットワーク モデル: AKS のフラット ネットワーク モデルは、AKS ノードと同じ Azure 仮想ネットワークのサブネットから、IP アドレスをポッドに割り当てます。 クラスターから出るトラフィックは SNAT されず、ポッドの IP アドレスは宛先に直接公開されます。 このモデルは、ポッドの IP アドレスを外部サービスに公開するようなシナリオで便利です。
AKS のネットワーク モデルの詳細情報については、「AKS での CNI ネットワーク」を参照してください。
送信 (エグレス) トラフィックを制御する
AKS クラスターは仮想ネットワークにデプロイされ、その仮想ネットワークの外部にあるサービスに対してアウトバウンドの依存関係があります。これは、ほぼ完全に完全修飾ドメイン名 (FQDN) で定義されています。 AKS には複数のアウトバウンド構成オプションがあり、ユーザーはそれを使ってこれらの外部リソースへのアクセス方法をカスタマイズできます。
サポートされている AKS クラスターのアウトバウンド構成の種類について詳しくは、「Azure Kubernetes Service (AKS) で送信の種類を使用してクラスター エグレスをカスタマイズする」をご覧ください。
既定では、AKS クラスターのアウトバウンド (エグレス) インターネット アクセスに制限はなく、実行するノードとサービスは必要に応じて外部リソースにアクセスできます。 必要な場合は、送信トラフィックを制限できます。
クラスターからのアウトバウンド トラフィックを制限する方法について詳しくは、AKS でのクラスター ノードに対するエグレス トラフィックの制御に関する記事をご覧ください。
ネットワーク セキュリティ グループ
ネットワーク セキュリティ グループは、AKS ノードなどの VM のトラフィックをフィルター処理します。 LoadBalancer などのサービスを作成すると、必要なネットワーク セキュリティ グループ規則が Azure プラットフォームによって自動的に構成されます。
AKS クラスター内のポッドに対するトラフィックをフィルター処理するネットワーク セキュリティ グループ規則を手動で構成する必要はありません。 ユーザーは、Kubernetes サービス マニフェストの一部として必要なポートと転送を定義し、適切なルールの作成または更新は Azure プラットフォームに任せることができます。
ネットワーク ポリシーを使用して、ポッドにトラフィックのフィルター規則を自動的に適用することもできます。
詳しくは、「ネットワーク セキュリティ グループによってネットワーク トラフィックをフィルター処理する方法」をご覧ください。
ネットワーク ポリシー
既定では、AKS クラスター内のすべてのポッドは制限なしにトラフィックを送受信できます。 セキュリティ向上のために、次のような、トラフィック フローを制御する規則を定義してください。
- バックエンド アプリケーションは、必要なフロントエンド サービスにのみ公開される。
- データベース コンポーネントは、そこに接続するアプリケーション層からのみアクセスできる。
ネットワーク ポリシーは、ポッド間のトラフィック フローを制御できる、AKS で使用可能な Kubernetes の機能です。 ユーザーは、割り当てられたラベル、名前空間、トラフィック ポートなどの設定に基づいて、ポッドへのトラフィックを許可または拒否できます。 ネットワーク セキュリティ グループが AKS ノードに適している一方で、ネットワーク ポリシーは、ポッドのトラフィック フローを制御するのにより適した、クラウド ネイティブな方法です。 AKS クラスター内でポッドが動的に作成されたときに、必要なネットワーク ポリシーを自動的に適用できます。
詳細については、「Azure Kubernetes Service (AKS) のネットワーク ポリシーを使用したポッド間のトラフィックの保護」を参照してください。
次のステップ
AKS ネットワークの使用を開始するために、Azure CNI オーバーレイまたは Azure CNI を使用して、独自の IP アドレス範囲で AKS クラスターを作成および構成します。
関連付けられているベスト プラクティスについては、AKS でのネットワーク接続とセキュリティに関するベスト プラクティスに関するページを参照してください。
Kubernetes と AKS の中心概念の詳細については、次の記事を参照してください。
Azure Kubernetes Service