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

Container Service for Kubernetes:ACK GlobalNetworkPolicy の使用

最終更新日:Nov 09, 2025

Kubernetes NetworkPolicy は、ラベルセレクターを使用して Pod レベルでネットワークポリシーを定義します。ACK GlobalNetworkPolicy はこの機能をクラスターレベルに拡張し、クラスター全体のネットワークポリシーを管理できるようにします。このトピックでは、ACK GlobalNetworkPolicy を使用して、クラスターに詳細なネットワークセキュリティポリシーを実装する方法について説明します。

前提条件

ステップ 1: Poseidon コンポーネントのインストール

Poseidon は、標準の Kubernetes NetworkPolicy 機能をサポートするコンテナーネットワークポリシーコンポーネントです。

バージョン 0.5.1 以降の Poseidon コンポーネントをインストールし、ACK NetworkPolicy 機能を有効にします。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

  3. [コンポーネント管理] ページで、[ネットワーク] タブをクリックします。[Poseidon] コンポーネントカードの右下隅にある [インストール] をクリックします。

  4. [Poseidon のインストール] ダイアログボックスで、[ACK NetworkPolicy の有効化] を選択し、[確認] をクリックします。

ステップ 2: ACK GlobalNetworkPolicy の使用

ACK GlobalNetworkPolicy の定義と使用方法は、Kubernetes NetworkPolicy のものと似ています。デフォルトでは、特に指定しない限り、そのルールはクラスター内のすべてのノードと Pod に適用されます。

構文

ACK GlobalNetworkPolicy の基本的な構造は次のとおりです。

apiVersion: network.alibabacloud.com/v1beta2
kind: GlobalNetworkPolicy
metadata:
  name: example
spec:
  podSelector:      # ポリシーが適用される Pod。デフォルト: すべての Pod。
    matchLabels:
      foo: bar      # ラベル foo:bar を持つ Pod を選択します。
  namespaceSelector:   # ポリシーが適用される名前空間。デフォルト: すべての名前空間。このルールと podSelector は AND 演算子を使用して評価されます。
    matchLabels:
      foo: bar      # ラベル foo:bar を持つ名前空間を選択します。
  policyTypes:      # ポリシーが適用されるトラフィックの種類。
    - Ingress       # インバウンドトラフィックに適用されます。
    - Egress        # アウトバウンドトラフィックに適用されます。
  ingress: []       # Ingress ルール。
  egress: []        # Egress ルール。

制限

単一のクラスター内のルールには、次の制限が適用されます。

  • GlobalNetworkPolicy リソースの数は 100 未満である必要があります。

  • 単一の GlobalNetworkPolicy 内の ingress および egress ルールの数は 20 未満である必要があります。

  • 単一の ingress または egress ルール内の ports の数は 10 未満である必要があります。

Ingress および Egress ルール

ingress および egress ルールは、NetworkPolicy で許可されるトラフィックソースと宛先を定義します。両方のルールタイプは同じ構造を持っています。これらは、許可される通信範囲を指定するために from ( ingress の場合) と to ( egress の場合) を使用します。

apiVersion: network.alibabacloud.com/v1beta2
kind: GlobalNetworkPolicy
metadata:
  name: example                          # ポリシー名
spec:
  podSelector: {}                       
  namespaceSelector: null                     
  policyTypes:
    - Ingress                            # ポリシーには ingress ルールが含まれます。
    - Egress                             # ポリシーには egress ルールが含まれます。
  ingress:
    - from:
        - namespaceSelector:             # 一致するラベルを持つ名前空間内の Pod からのインバウンドトラフィックを許可します。
            matchLabels:
              foo: bar
          podSelector:                   # 一致するラベルを持つ Pod からのインバウンドトラフィックを許可します。
            matchLabels:
              foo: bar
        ports:
          - protocol: TCP                # TCP トラフィックを許可します。有効な値は TCP と UDP です。
            port: 443                    # ポート 443 でのトラフィックを許可します。
    - from:
        - ipBlock:                       # クラスター外からのインバウンドリクエストが許可される CIDR 範囲を定義します。
            cidr: "172.16.0.0/16"
            except:
              - "172.16.1.0/24"          # クラスター外の許可されたインバウンドソースから CIDR 範囲 "172.16.1.0/24" を除外します。
  egress:
    - to:
        - namespaceSelector:             # 一致するラベルを持つ名前空間内の Pod へのアウトバウンドトラフィックを許可します。
            matchLabels:
              foo: bar
          podSelector:                   # 一致するラベルを持つ Pod へのアウトバウンドトラフィックを許可します。
            matchLabels:
              foo: bar
    - to:
        - ipBlock:                       # クラスター外の宛先へのアウトバウンドトラフィックが許可される CIDR 範囲を定義します。
            cidr: "172.16.0.0/16"
            except:
              - "172.16.1.0/24"          # クラスター外の許可されたアウトバウンド宛先から CIDR 範囲 "172.16.1.0/24" を除外します。

フィールド

説明

ipBlock

クラスター外のトラフィックアドレスを記述する静的な CIDR ブロック。このブロックは、クラスター外のどの IP アドレス範囲がクラスター内の Pod へのトラフィックの送信または Pod からのトラフィックの受信を許可されるかを定義します。

podSelector

ラベルを使用してアドレスを動的に選択します。これは、クラスター内の Pod のアドレスを記述するために使用されます。

同じルール内で ipBlockpodSelector または namespaceSelector と一緒に使用することはできません。次の例に示すように、ipBlockpodSelector を異なるルールに分割してください。

ingress:
  - from:
      - ipBlock:               # 最初のソース条件は ipBlock です。
          cidr: "192.168.0.0/16"
      - podSelector:           # 2 番目のソース条件は podSelector です。
          matchLabels:
            key: value
    ports:
      - protocol: TCP
        port: 80

以下は、フィールドが相互排他的であるため、不正な例です。

不正な例:

ingress:
  - from:
      - ipBlock:                  # CIDR 範囲の定義。
          cidr: "192.168.0.0/16"
        podSelector:              # エラー: 同じエントリ内で ipBlock と一緒に使用することはできません。
          matchLabels:
            key: value
    ports:
      - protocol: TCP
        port: 443

使用例

このトピックの例には、podSelector 構成が含まれています。必要に応じて構成を調整できます。

重要

GlobalNetworkPolicy を構成する際は注意してください。podSelector または namespaceSelector フィールドを指定しない場合、ポリシーはクラスター内のすべての Pod に適用されます。

特定のアプリケーション Pod のすべてのトラフィックを拒否する

次の YAML ファイルは、ラベル foo: bar を持つ Pod にのみ適用される GlobalNetworkPolicy を定義します。このポリシーは、これらの Pod のすべてのインバウンドおよびアウトバウンドネットワークトラフィックを拒否します。

apiVersion: network.alibabacloud.com/v1beta2
kind: GlobalNetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector:
    matchLabels:
      foo: bar
  namespaceSelector: null
  policyTypes:
    - Ingress
    - Egress
  ingress: []
  egress: []

特定のアプリケーション Pod が DNS にアクセスできるようにする

次の YAML ファイルは、ラベル foo: bar を持つ Pod にのみ適用される GlobalNetworkPolicy を定義します。このポリシーにより、これらの Pod はクラスターで実行されている DNS サービスと通信できます。

apiVersion: network.alibabacloud.com/v1beta2
kind: GlobalNetworkPolicy                     
metadata:
  name: allow-dns                            
spec:
  podSelector:                                
    matchLabels:
      foo: bar                                
  namespaceSelector: null                 
  policyTypes:                                
    - Egress
  egress:                                     
    - to:                                 
        - namespaceSelector:              
            matchLabels:
              kubernetes.io/metadata.name: kube-system
          podSelector:
            matchLabels:
              k8s-app: kube-dns