---
# System prepended metadata

title: KubernetesのNetworkPolicy

---

# KubernetesのNetworkPolicy

## NetworkPolicyとは

Kubernetesクラスタ内でPod同士が通信する際のトラフィックルールを定義する。
Namespace間の通信を行なわせないようにしたり、特定のPod間だけ通信を許可できるようにしたりする。
IngressとEgressから成り立っていて、Ingressはインバウンド方向、Egressはアウトバウンド方向のトラフィックを制御する。

NetworkPolicyのサンプルYAML
```yaml=
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: sample-networkpolicy
  namespace: sample-network # NetworkPolicyを作成するNamespace
spec:
  podSelector:
    # 対象のPod
  policyTypes:
  - Ingress # Ingressルールを作成する場合は明示
  - Egress # Egressルールを作成する場合は明示
  ingress:
  - from:
      # Ingressルールを記述
    ports:
      # Ingressルールで許可する受信ポート番号とプロトコルを記述
  egress:
  - from:
      # Egressルールを記述
    ports:
      # Egressルールで許可する宛先ポート番号とプロトコルを記述
```

## アクセス制御

アクセス制御を行なう場合は、ホワイトリスト方式かブラックリスト方式が一般的。

* ホワイトリスト方式：特定のトラフィックだけを許可
* ブラックリスト方式：特定のトラフィックだけを遮断

全てのトラフィックを遮断する場合のNetworkPolicy(ホワイトリスト方式で利用)
```yaml=
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-networkpolicy
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
```

全てのトラフィックを許可する場合のNetworkPolicy(ブラックリスト方式で利用)
```yaml=
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-networkpolicy
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - {}
  egress:
  - {}
```