すべてのプロダクト
Search
ドキュメントセンター

Cloud Network Well-architected Design Guidelines:ACK のアプリケーション配信ネットワーク設計

最終更新日:Feb 07, 2025

概要

概要

このトピックでは、Kubernetes クラスタのネットワークイングレスの設計方法、特に Service コンポーネントと Ingress コンポーネントの設計方法について説明します。ネットワーク構成では、Kubernetes クラスタ内のサービス間のアクセスと Kubernetes クラスタ内のサービスへのアクセスの効率とセキュリティが非常に重要です。Service コンポーネントと Ingress コンポーネントの設計原則を正しく理解し実装することで、アプリケーションの可用性を高めるだけでなく、システム全体のパフォーマンスと安定性も大幅に向上します。

用語

Kubernetes: Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を自動化するオープンソースのコンテナオーケストレーションエンジンです。このオープンソースプロジェクトは、Cloud Native Computing Foundation ( CNCF ) によってホストされています。

Container Service for Kubernetes ( ACK ): ACK は、世界で初めて Certified Kubernetes Conformance Program に参加したサービスの 1 つです。ACK は、高性能なコンテナ化アプリケーション管理サービスを提供し、企業がコンテナ化アプリケーションのライフサイクルを管理し、クラウドにコンテナ化アプリケーションを効率的にデプロイできるようにします。

Service: Kubernetes では、Service は Pod または Pod のグループをネットワーク経由で公開するのに役立つ抽象化です。Service は、ラベルセレクターに基づいて Pod のグループを識別し、ClusterIP、NodePort、LoadBalancer、ExternalName などの Service タイプに基づいて Pod 間のトラフィック分散を管理します。Service は、Pod への直接アクセスによって発生する問題を効果的に修正し、アプリケーションの高可用性と効率性を確保します。デフォルトでは、Service は TCP プロトコルを使用します。その他のサポートされているプロトコルを使用することもできます。Service は主に東西トラフィックの処理に使用されます。

Ingress: Ingress は、URI、ホスト名、パスなどの Web の概念を理解するプロトコル対応の構成メカニズムを使用して、HTTP または HTTPS サービスを利用できるようにします。Ingress の概念を使用すると、Kubernetes API を使用して定義したルールに基づいて、トラフィックを異なるバックエンドにマッピングできます。Ingress は、負荷分散、SSL 終端、および名前ベースの仮想ホスティングを提供できます。通常、Ingress コントローラーはロードバランサーを使用して Ingress を実行しますが、Ingress コントローラーはエッジルーターまたは追加のフロントエンドを構成してトラフィックの処理を支援することもできます。Ingress は主に南北トラフィックの処理に使用されます。

Container Network Interface ( CNI ) プラグイン: CNI プラグインは、コンテナネットワークの実装を担当します。使用する CNI プラグインによって、Pod への IP アドレスの割り当て方法、オーバーレイネットワークを使用するかどうか、クラスタ内でのトラフィックの転送方法、および Pod へのアクセスの管理方法が決まります。よく知られているオープンソースの CNI プラグインには、Calico、Flannel、Cilium などがあります。ACK は、Terway と Flannel という CNI プラグインを提供しています。Terway と Flannel は異なる機能を提供します。次のセクションでは、Terway と Flannel が提供する機能について説明します。ACK クラスタを作成するときに Terway と Flannel のどちらを選択するかについては、「Terway コンテナネットワークプラグインと Flannel コンテナネットワークプラグインの比較」をご参照ください。

Terway: Terway は Alibaba Cloud によって開発された CNI プラグインです。ACK クラスタの Elastic Compute Service ( ECS ) インスタンスは、Elastic Network Interface ( ENI ) を使用してネットワーク通信を有効にします。Terway は、ノード上の ENI を Pod に割り当てて、Pod 間のネットワーク接続を確立します。したがって、Terway プラグインを使用するクラスタ内の Pod は、クラスタが存在する仮想プライベートクラウド ( VPC ) に接続されます。Terway モードでは、Virtual Extensible Local Area Network ( VXLAN ) などのトンネリング技術でパケットをカプセル化する必要がないため、通信効率が向上します。Terway は、ネットワークパフォーマンスとアクセス制御に高い要件を持つ大規模クラスタに適しています。

Flannel: Flannel はオープンソースの CNI プラグインです。Flannel は、VXLAN などのネットワーク仮想化技術を使用して、Pod 用のオーバーレイネットワークを構築します。Flannel は構成と使用が簡単です。Flannel は NAT ゲートウェイを必要としないため、Terway と比較して、ネットワークパフォーマンスとアクセス制御機能が劣ります。また、Flannel は大規模クラスタをサポートしていません。Flannel は、1,000 ノード以下のクラスタに適しています。ネットワークパフォーマンスとアクセス制御の要件が低いか、クラスタをすばやく作成して使用したい場合は、Flannel プラグインを使用することをお勧めします。

Network Load Balancer ( NLB ): NLB は、Internet of Everything ( IoE ) 時代向けのレイヤー 4 負荷分散サービスです。NLB は超高性能を提供し、オンデマンドで自動的にスケーリングできます。NLB インスタンスは最大 1 億の同時接続をサポートしており、高い同時実行性を必要とするサービスに最適です。

Application Load Balancer ( ALB ): ALB はアプリケーションレイヤーで実行される Alibaba Cloud サービスであり、HTTP、HTTPS、および Quick UDP Internet Connections ( QUIC ) でのトラフィックの分散を最適化するように設計されています。ALB は非常に柔軟性が高く、オンデマンドで大量のレイヤー 7 トラフィックを処理できます。ALB は複雑なルーティングをサポートしています。ALB は他のクラウドネイティブサービスと緊密に統合されており、Alibaba Cloud のクラウドネイティブ Ingress ゲートウェイとして機能するように設計されています。

Elastic IP Address ( EIP ): EIP は、独立したリソースとして購入して保持できるパブリック IP アドレスです。EIP は、仮想プライベートクラウド ( VPC ) 内の ECS インスタンス、セカンダリ ENI、Server Load Balancer ( SLB ) インスタンス、NAT ゲートウェイ、および高可用性仮想 IP アドレス ( HaVip ) に関連付けることができます。

設計原則

Kubernetes の Ingress と Service を設計する際は、これらの設計原則に従って、システムの高可用性、スケーラビリティ、パフォーマンス、可観測性、およびセキュリティを確保します。まず、マルチリージョンまたはマルチゾーンデプロイを選択して高可用性を実装し、ヘルスチェックと自動フェールオーバーを有効にして業務継続性を維持します。次に、動的スケーリングを有効にし、ルーティングポリシーを構成して、スケーリングとトラフィック管理を最適化します。3 番目に、インテリジェントトラフィック管理とピークポリシーを有効にしてパフォーマンスを最適化し、全次元モニタリングシステムとリアルタイムアラートメカニズムを使用してシステムの可観測性を向上させます。最後に、Kubernetes YAML ファイルと自動デプロイツールを使用してカスタム機能を構成し、アクセス制御を有効にしてネットワーク保護を強化します。上記の設計原則は、Kubernetes のための安定した、効率的で安全なアプリケーション配信ネットワークを構築するのに役立ちます。

高信頼性

  • マルチリージョン/マルチゾーンデプロイ:

    • Service: 単一ゾーンの障害が全体的な可用性に影響を与えないように、複数のゾーンに Service をデプロイします。

    • Ingress: マルチリージョンまたはマルチゾーンデプロイをサポートするように Ingress コントローラーを構成します。いずれかのゾーンに障害が発生した場合でも、サービスの継続性と高可用性を維持できます。

  • ヘルスチェックとフェールオーバー:

    • Service: Kubernetes の組み込みヘルスチェック機能を使用して Pod のステータスを監視し、異常な Pod を自動的に削除します。

    • Ingress: Ingress コントローラーのヘルスチェック機能を使用して、バックエンドサービスのヘルスステータスを定期的にチェックし、異常なノードから正常なノードにトラフィックを自動的に切り替えます。

スケーラビリティ

  • きめ細かい水平スケーリング:

    • Service: Service は、ゾーンごとのきめ細かい水平スケーリングをサポートしています。

    • Ingress: パスやホスト名など、ビジネス要件に基づいてトラフィックを分散するように Ingress の複雑なルーティングポリシーを構成します。

パフォーマンスと弾力性

  • 動的トラフィック管理と自動スケーリング:

    • Service と Ingress: セッション管理や重み付きラウンドロビンなどのインテリジェントトラフィック管理ポリシーと Service と Ingress を統合して、システムパフォーマンスを最適化し、ユーザーエクスペリエンスを向上させます。また、Ingress コントローラーと service の自動スケーリングポリシーを構成して、さまざまな時間帯のトラフィック変動に効率的に対応します。

  • ピーク時のパフォーマンス:

    • Service と Ingress: 自動スケーリング機能と Service と Ingress を統合して、リアルタイムのトラフィック量に基づいて容量を動的に調整します。これにより、ピーク時のサービスパフォーマンスが確保され、オフピーク時のコストが削減されます。

可観測性

  • メトリックの収集と表示:

    • Service と Ingress: 包括的なサービスステータスを示すパフォーマンスメトリックを収集して表示します。

  • 異常検出とアラート:

    • Service と Ingress: 自動異常検出およびアラートシステムは、潜在的な問題に迅速に対応し、サービスのダウンタイムを最小限に抑えることができます。

セルフサービス機能

  • ネイティブ互換性と自動デプロイ:

    • Service と Ingress: Kubernetes YAML 定義、管理サービス、および Ingress と互換性があります。Terraform や Resource Orchestration Service ( ROS ) などの Infrastructure as Code ( IaC ) ツールを使用してデプロイを自動化し、O&M 効率を高めることができます。

セキュリティ

  • アクセス制御と暗号化:

    • Service と Ingress: セキュリティグループを使用して、デフォルトで TLS 終端を有効にしてデータ転送を保護し、中間者攻撃 ( MITM ) 攻撃を防ぐことができます。

主要な設計

LoadBalancer Service として NLB を使用し、Ingress として ALB を使用します。

高信頼性

  • マルチリージョン/マルチゾーンデプロイ:

    • Service: NLB は複数レベルのディザスタリカバリをサポートしています。ネットワークトラフィックはバックエンドサーバーのグループに分散され、ディザスタリカバリが可能になります。NLB は、セッション維持とマルチゾーンデプロイもサポートしており、サービスの可用性を確保します。

    • Ingress: ALB インスタンスは、少なくとも 2 つのゾーンにデプロイできます。ゾーン間で障害分離を有効にすることができます。1 つのゾーンがダウンしても、リージョン内の他のゾーンは影響を受けません。

  • ヘルスチェックとフェールオーバー:

    • Service: NLB はヘルスチェックを使用してバックエンドサーバーの可用性をテストします。ヘルスチェックを有効にした後、バックエンドサーバーがヘルスチェックに失敗した場合、NLB はそのバックエンドサーバー宛てのリクエストを他の正常なバックエンドサーバーに自動的に転送します。バックエンドサーバーが再び正常であると宣言されると、NLB はリクエストをそのバックエンドサーバーに自動的に転送します。ヘルスチェックは、サービスの高可用性を確保するための重要な手段です。ヘルスチェックは、ビジネスの全体的な可用性を向上させ、異常なサーバーによって引き起こされる単一障害点 ( SPOF ) を排除します。

    • Ingress: ALB バックエンドサーバーの可用性を監視するために、ALB のサーバーグループのヘルスチェックを構成できます。ヘルスチェックは、異常なバックエンドサーバーをできるだけ早く検出することにより、サービスの可用性を確保します。ヘルスチェックが有効になっている場合、ALB はリクエストを正常なバックエンドサーバーに自動的にルーティングし、指定された間隔ですべてのバックエンドサーバーの可用性をプローブします。バックエンドサーバーは、正常であると宣言される前に、特定の回数 ( N 回 ) ヘルスチェックに合格する必要があります。N はビジネス要件に基づいて指定できます。これにより、ネットワークジッターによって引き起こされるヘルスチェックエラーを防ぎます。

スケーラビリティ

  • きめ細かい水平スケーリング:

    • Service と Ingress: NLB と ALB は手動でスケールアウトできます。NLB と ALB を有効にして、トラフィックを異なるゾーンに分散し、システムの信頼性とパフォーマンスを向上させることができます。

パフォーマンスと弾力性

  • 動的トラフィック管理と自動スケーリング:

    • Service と Ingress: NLB と ALB はドメイン名と仮想 IP アドレス ( VIP ) を使用して、トラフィックを複数のレイヤーのサーバーに分散します。ALB と NLB は、ネットワークトラフィックをサーバーグループに分散してアプリケーションの可用性を向上させ、SPOF によるサービス中断を防ぎます。ALB と NLB は、カスタマイズされたマルチゾーンデプロイとゾーン間の弾力的なスケーリングもサポートしており、個々のゾーンのリソースボトルネックを解消します。

可観測性

  • メトリックの収集と表示:

    • Service と Ingress: CloudMonitor を使用して、ALB と NLB のステータスとメトリックを監視および表示できます。これにより、エラーをすばやく特定できます。コンソール、API、または SDK を使用して、ALB と NLB リソースに関する監視情報を表示できます。ALB と NLB はどちらも Prometheus モニタリングをサポートしています。

  • 異常検出とアラート:

    • Service と Ingress: CloudMonitor をアクティブにした後、CloudMonitor コンソールを使用するか、API 操作を呼び出すか、SDK を使用して、ALB インスタンスと NLB インスタンスのアラートルールを構成できます。

セルフサービス機能

  • ネイティブ互換性と自動デプロイ:

    • Service: Terraform や ROS などの IaC ツールを使用して NLB デプロイを自動化できます。アノテーションを使用して NLB を Service として構成することもできます。

      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例: cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
        name: nginx
        namespace: default
      spec:
        externalTrafficPolicy: Local
        ports:
        - name: tcp
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
        selector:
          app: nginx
        loadBalancerClass: "alibabacloud.com/nlb"
        type: LoadBalancer
    • Ingress: Terraform や ROS などの IaC ツールを使用して ALB デプロイを自動化できます。ALB Ingress をデプロイすることで、API サーバー上の AlbConfig、Ingress、および Service の変更を監視し、既存の AlbConfig を動的に更新できます。Kubernetes クラスタは NGINX Ingress と互換性があります。

セキュリティ

  • アクセス制御と暗号化:

    • Service と Ingress: デフォルトでは、ALB と NLB をセキュリティグループに追加でき、プロトコル、ポート、および IP アドレスに基づくアクセス制御をサポートしています。

    • Ingress: ALB は、HTTP、HTTPS、WebSocket、TLS などのさまざまなプロトコルをサポートしています。

ベストプラクティス

Service 設計

シナリオ

ACK クラスタ内の Pod を Web サーバーとして使用する: ACK クラスタの Pod にアプリケーションをデプロイし、IP アドレスとポートを使用して Service を公開します。

Service タイプの選択

LoadBalancer Service は、ロードバランサーで構成された NodePort Service に似ています。このタイプの Service は、トラフィックを複数の Pod に均等に分散できます。LoadBalancer Service は、パブリック IP アドレスを自動的に提供して、バックエンド Pod を外部アクセスに公開します。LoadBalancer Service は、レイヤー 4 で TCP および UDP リクエストを処理し、レイヤー 7 で HTTP および HTTPS リクエストを管理できます。

NLB の作成または関連付け

  • 既存の NLB インスタンスを選択するか、NLB インスタンスを作成し、その NLB インスタンスを LoadBalancer Service として使用できます。

  • ACK コンソールまたは kubectl ( YAML スクリプト ) を使用して NLB インスタンスを作成または関連付けし、service の関連付け ( NLB へのサーバーグループの追加と同様 ) とポートマッピング ( NLB へのリスナーの追加と同様 ) を構成できます。

  • Service の YAML ファイルにアノテーションを追加して、NLB を構成できます。

NLB クォータ

詳細については、「制限」をご参照ください。

Ingress 設計

ALB Ingress

シナリオ

ALB Ingress は、ACK クラスタ内の Service の統合イングレスとして機能します。NGINX Ingress と比較して、ALB Ingress は完全にホストされています。ALB Ingress を手動で維持する必要はありません。ALB Ingress は、Kubernetes クラスタ内の Ingress リソースの変更を自動的に検出し、事前定義されたルーティングルールに基づいてトラフィックをバックエンド Service に分散できます。さらに、ALB Ingress は強力な自動スケーリングメカニズムを採用しており、トラフィックの変動に自動的に適応してシステムの安定性を確保します。

仕組み

ALB Ingress に関連する用語:

  • ALB Ingress コントローラー: Ingress リソースを管理するコンポーネント。ALB Ingress コントローラーは API サーバーを使用して Ingress リソースと AlbConfig リソースの変更を動的に取得し、ALB インスタンスを更新します。NGINX Ingress コントローラーとは異なり、ALB Ingress コントローラーは ALB インスタンスのコントロールプレーンです。ALB インスタンスを管理しますが、トラフィックは分散しません。トラフィックは ALB インスタンスによって分散されます。ALB Ingress コントローラーは、クラスタ内の API サーバーを使用して Ingress リソースの変更を動的に取得し、Ingress ルーティングルールに基づいて ALB インスタンスを更新します。

  • AlbConfig: AlbConfig は、ALB Ingress コントローラーによって作成されたカスタムリソース定義 ( CRD ) です。AlbConfig のパラメーターは、ALB インスタンスの構成を定義します。各 AlbConfig は 1 つの ALB インスタンスに対応します。ALB インスタンスは、トラフィックをバックエンド Service に分散するためのイングレスとして機能します。ALB Ingress は ALB によって完全にホストされています。NGINX Ingress コントローラーと比較して、ALB Ingress は O&M 不要で非常に柔軟性があります。

  • IngressClass: IngressClass は、Ingress と AlbConfig の関連付けを定義します。

  • Ingress: Ingress は、外部トラフィックルーティングルールとアクセス制御ルールを定義するリソースオブジェクトです。ALB Ingress コントローラーは Ingress リソースの変更を監視し、ALB インスタンスを更新してトラフィックを分散します。

  • Service: Kubernetes では、Pod は変化する一時的なリソースです。Service は、同じ機能を提供する Pod への統合イングレスです。他のアプリケーションまたは Service は、Pod の変更を気にすることなく、Service の仮想 IP アドレスとポートを介して Pod と通信できます。Service の詳細については、「Service 管理」をご参照ください。

ALB クォータ

詳細については、「ALB クォータの計算方法」をご参照ください。

NLB + Nginx Ingress

シナリオ

オープンソースの NGINX を Ingress コントローラーとして使用し、Kubernetes クラスタの Pod にデプロイします。フロントエンドは NLB を使用してトラフィックを Pod に分散します。このアーキテクチャでは、NLB と NGINX を組み合わせて、レイヤー 7 トラフィックのための効率的で信頼性の高いイングレスシステムを構築します。

NLB クォータ

詳細については、「制限」をご参照ください。

ALB Ingress と NGINX Ingress の比較

ディメンション

Nginx Ingress

ALB Ingress

ポジショニング

  • セルフマネージド O&M を必要とするセルフマネージドコンポーネント。

  • ビジネス要件に基づいて NGINX Ingress をカスタマイズできます。

  • Alibaba Cloud 上のフルマネージドコンポーネント。超高容量、自動スケーリング、高信頼性、および自動 O&M をサポートしています。

  • さまざまな機能と複数のクラウドサービスとの緊密な統合をサポートしています。

  • LoadBalancer Service として使用できます。これにより、Pod が ALB Ingress によって占有されないため、負荷分散コストとクラスタコストが削減されます。

パフォーマンス

  • システムと NGINX パラメーターを微調整するには、手動構成が必要です。

  • 複製された Pod の数とリソース制限を適切に構成する必要があります。

  • インスタンスあたり 100 万クエリ/秒 ( QPS ) をサポートしています。

  • インスタンスあたり数千万の接続をサポートしています。

  • デフォルトで SSL ハードウェアアクセラレーションが使用されます。

構成

  • 証明書を更新するときにプロセスの再読み込みが必要です。これは持続的接続に影響します。

  • 証明書以外の更新は、Lua ホットアップデートを実行することで完了します。Lua プラグインは、更新中にプロセスを再読み込みする必要があります。

  • API 操作を呼び出すことによる動的構成をサポートしており、適時性を大幅に向上させます。

  • 再読み込みなしのローリングデプロイをサポートしており、持続的接続を介したロスレスデータ転送を保証します。

機能

  • HTTP プロトコルと HTTPS プロトコルをサポートしています。

  • ドメイン名、URL、または HTTP ヘッダーに基づくルーティング、カナリーリリース、およびブルーグリーンデプロイメントをサポートしています。

  • HTTP、HTTPS、QUIC、WebSocket、WebSocket Secure ( WSS )、gRPC プロトコルをサポートしています。

  • ヘッダー、Cookie、重み、ルート優先順位、双方向転送ルール、カナリーリリース、ブルーグリーンデプロイメントと組み合わせて、さまざまな転送条件と操作をサポートしています。

セキュリティ

  • HTTPS プロトコルをサポートしています。

  • ブラックリストとホワイトリストをサポートしています。

  • エンドツーエンド HTTPS、複数のサーバ名表示 ( SNI ) 証明書、Rivest-Shamir-Adleman ( RSA )/楕円曲線暗号 ( ECC ) 証明書、TLS 1.3、および TLS 暗号スイートをサポートしています。

  • デフォルトで DDoS 対策と統合されています。WAF 保護はワンクリックで有効にできます。アクセス制御リスト ( ACL ) ブラックリストとホワイトリストがサポートされています。

  • 制御コンテナは転送コンテナから分離されており、共有コンテナによるセキュリティリスクを防ぎます。

O&M

  • お客様によって管理および保守されます。

  • インスタンスタイプを選択し、パラメーターを微調整するには、手動構成が必要です。

  • HPA を構成してリソースをスケーリングできます。

  • 高いサービスレベル契約 ( SLA ) で完全に管理され、メンテナンスフリーです。

  • インスタンスタイプを選択する必要がなく、超高容量を提供します。

  • ワークロードの変動に基づく自動スケーリングをサポートしています。

シナリオ

ALB Ingress シナリオ

  • カナリーリリース、ブルーグリーンデプロイメント、A/B テスト: 新しいバージョンをデプロイするときに、カナリーリリース、ブルーグリーンデプロイメント、または A/B テストを実行してリスクを軽減し、ユーザーエクスペリエンスを確保できます。このような戦略により、HTTP ヘッダー、Cookie、または重みに基づいて、既存のバージョンから新しいバージョンにトラフィックが正確に移行されます。たとえば、リクエストの特定の割合を新しいバージョンに移行し、本番環境でのパフォーマンスを観察できます。これにより、ほとんどのユーザーのスムーズなエクスペリエンスが保証されます。

  • IoT: IoT 技術の発展に伴い、ホームオートメーションデバイスから産業オートメーションシステムまで、IoT に接続されるデバイスの数が劇的に増加しています。各アプリケーションは、数百万の HTTP、HTTPS、HTTP/2 接続を管理する必要がある場合があります。このような場合、バックエンドアーキテクチャは、同時接続を処理し、多数のクライアントを効率的に管理および維持し、各デバイスへのタイムリーで正確なデータ転送を保証するための超高機能を備えている必要があります。

  • ゲームと金融: ゲームサービスと金融サービスの場合、1 ミリ秒のレイテンシでも大きな損失につながる可能性があります。したがって、ゲームサービスと金融サービスは、API リクエストの応答効率と安定性を非常に重視しています。Alibaba Cloud はハードウェアアクセラレーション技術を提供し、SLA によって保証される高いアップタイムをサポートすることで、応答時間を大幅に短縮し、システムの信頼性とセキュリティを向上させます。このような最適化は、ユーザーエクスペリエンスを確保し、金融取引のセキュリティと効率性を向上させるためにビジネス上不可欠です。

  • テレワーク: テレワークの要件が高まるにつれて、WebSocket と WSS の重要性が増しています。WebSocket と WSS を使用すると、サーバーはクライアントへの持続的接続を維持でき、リアルタイムの双方向通信をサポートできます。変化する作業環境に適応するために、システムはローリングアップデートをサポートするように設計されています。これにより、構成の更新中に再読み込みが不要になります。これにより、持続的接続間のシームレスな切り替えと継続的なデータ転送が保証され、よりスムーズなユーザーエクスペリエンスが提供されます。