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

Container Service for Kubernetes:ネットワークセキュリティ

最終更新日:Mar 26, 2026

Container Service for Kubernetes (ACK) のネットワークセキュリティは、通信可能なサービスを制限することと、交換されるデータを暗号化すること、という 2 つの課題に対応します。ACK は、Kubernetes ネットワークポリシー、Virtual Private Cloud (VPC) セキュリティグループ、および Service Mesh (ASM) と TLS によるトラフィック暗号化を提供し、これらの両方に対応します。

このページでは、以下の内容について説明します。

トラフィック制御

トラフィックの暗号化

ネットワークポリシー

デフォルトでは、Kubernetes クラスター内のすべての Pod は相互に通信できます。本番環境のワークロードでは、ネットワークポリシーを定義して、名前空間内および名前空間をまたがる Pod 間のトラフィックである東西トラフィックを制御します。

重要

Terway ネットワークプラグインを使用しているクラスターのみが Kubernetes ネットワークポリシーをサポートします。クラスターに 100 を超えるノードがある場合、ネットワークポリシープロキシによって Kubernetes コントロールプレーンの負荷が増加する可能性があります。詳細については、「Terway モードの大規模な ACK クラスターにおける NetworkPolicy 機能のパフォーマンス向上」をご参照ください。

ネットワークポリシーは、Pod セレクターとラベルを使用して、送信元と送信先の Pod を識別します。ルールは、IP アドレス、ポート、プロトコルによってスコープを定義することもできます。

参考資料と視覚化ツールは、以下をご参照ください。

デフォルトの deny-all ポリシーの作成

ロールベースのアクセス制御 (RBAC) と同様に、ネットワークポリシーにも最小権限の原則を適用します。まず、名前空間からのすべてのインバウンドおよびアウトバウンドトラフィックを拒否し、その後、必要なトラフィックのみを許可する明示的なルールを追加します。

以下のポリシーは、default 名前空間のすべての Ingress および Egress トラフィックを拒否します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

すべての名前空間にわたるグローバルな拒否ポリシーを作成するには、Kubernetes ネイティブの NetworkPolicy の代わりに Calico を使用します。

DNS クエリの許可

deny-all ポリシーをデプロイすると、Pod は DNS を解決できなくなります。Pod が UDP ポート 53 で CoreDNS に到達できるようにする Egress ルールを追加します。

  1. ポリシーがセレクターで参照できるように、kube-system 名前空間にラベルを付けます。

    kubectl label namespace kube-system name=kube-system
  2. 以下のネットワークポリシーを適用します。

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-dns-access
      namespace: default
    spec:
      podSelector:
        matchLabels: {}
      policyTypes:
      - Egress
      egress:
      - to:
        - namespaceSelector:
            matchLabels:
              name: kube-system
        ports:
        - protocol: UDP
          port: 53
    重要

    Kubernetes ネットワークポリシーの完全な仕様については、「Network Policies」をご参照ください。

特定の Pod からのトラフィックの許可

Pod セレクターを使用して、特定のサービスに到達できる Pod を制限します。一般的なユースケースは以下の通りです。

  • 特定のマイクロサービスのみがアプリケーションにアクセスできるようにする

  • 特定のアプリケーションのみがデータベースにアクセスできるようにする

以下の例では、API サーバー Pod と、app=bookstore ラベルを持つ Pod にアクセスを制限するネットワークポリシーを作成します。

  1. app=bookstorerole=api ラベルを持つ Pod を作成します。

    kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80
  2. 以下のネットワークポリシーを適用します。

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: api-allow
    spec:
      podSelector:
        matchLabels:
          app: bookstore
          role: api
      ingress:
      - from:
          - podSelector:
              matchLabels:
                app: bookstore
  3. app=bookstore ラベルを持たない Pod がブロックされることを確認します。

    kubectl run test-$RANDOM --rm -i -t --image=alpine -- sh

    期待される出力:

    / # wget -qO- --timeout=2 http://apiserver
    wget: download timed out
  4. app=bookstore ラベルを持つ Pod が接続できることを確認します。

    kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh

    期待される出力:

    / # wget -qO- --timeout=2 http://apiserver
    <!DOCTYPE html>
    <html><head>

カスタムの名前空間内ルールの追加

名前空間内の Pod 間の通信を許可した後、その名前空間内の特定の Pod 間のアクセスを制限するためのターゲットルールを追加します。例とテンプレートについては、「Kubernetes Network Policy Recipes」をご参照ください。

トラフィックの監視と分析

Alibaba Cloud Virtual Private Cloud (VPC) のフローログは、Elastic Network Interface (ENI) のインバウンドおよびアウトバウンドトラフィックを記録します。フローログは、以下の目的で使用します。

  • アクセス制御リスト (ACL) ルールの検証

  • Pod を含むリソース間のネットワークトラフィックの監視

  • ネットワーク接続問題のトラブルシューティング

設定の詳細については、「フローログの概要」をご参照ください。

セキュリティグループ

ACK クラスターを作成すると、クラスター内のすべてのノード間の通信を許可するセキュリティグループが自動的に作成されます。セキュリティグループは、マスターノードとワーカーノード間、ワーカーノードと他の VPC リソース間、およびワーカーノードと外部 IP アドレス間のトラフィックをノードレベルで制御します。

最小権限の原則に従うために、インバウンドおよびアウトバウンドルールを追加して、デフォルトのセキュリティグループを強化します。詳細については、「クラスターセキュリティグループに推奨されるインバウンドおよびアウトバウンドルール」をご参照ください。

設定ガイダンスについては、「さまざまなシナリオでのセキュリティグループの設定」および「セキュリティグループの設定」をご参照ください。

ネットワークポリシーとセキュリティグループの使い分け

ネットワークポリシーセキュリティグループ
制御対象Pod 間および Pod と外部間のトラフィック (レイヤー 3/4)ノード間およびノードと VPC リソース間のトラフィック
範囲名前空間および Pod レベルクラスターノードレベル
要件Terway ネットワークプラグインすべての ACK クラスター
使用条件特定のワークロード間の東西トラフィックを制限する場合ノードと他のクラウドリソース (データベース、他の VPC インスタンス) 間のアクセスを制御する場合

階層的なセキュリティを実現するために、両方を使用します。ネットワークポリシーでワークロードを相互に分離し、セキュリティグループでノードがクラスター外に到達できる範囲を制御します。

データ転送の暗号化

Service Mesh (ASM)

Service Mesh (ASM) は、mTLS (相互 Transport Layer Security) を使用してサービス間のトラフィックを暗号化します。認証に加えて、ASM は以下もサポートしています。

  • Envoy Secret Discovery Service (SDS) による動的な証明書読み込みにより、サービスゲートウェイが HTTPS をサポート

  • Application High Availability Service (AHAS) との統合によるトラフィック管理

  • トレーシング分析との統合による分散トレーシング。トレースマッピング、サービス呼び出しのカウント、トレーストポロジー、アプリケーション依存関係分析を提供し、開発者が分散アプリケーションアーキテクチャのパフォーマンスボトルネックを特定・診断できるようにします。

ASM の概要については、「ASM とは?」をご参照ください。ゲートウェイレベルで HTTPS を設定するには、「イングレスゲートウェイを使用して HTTPS を有効化する」をご参照ください。

ASM の境界を越えてアプリケーションをトレースするには、「OpenTelemetry 向けマネージドサービスを使用して ASM インスタンス内外のアプリケーションをトレースする」をご参照ください。

Ingress の TLS

Kubernetes Ingress を介して公開されるすべてのサービスで HTTPS を有効にします。Kubernetes Secret を使用して TLS 証明書を保存し、Ingress リソースでそれを参照します。詳細については、「Secret を使用して TLS を構成し HTTPS アクセスを有効にする」をご参照ください。

参考資料