4.2. ネットワークポリシーの作成
namespace のネットワークポリシーを作成できます。
4.2.1. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
4.2.2. CLI を使用したネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの namespace に許可される Ingress または Egress ネットワークトラフィックを記述する詳細なルールを定義するには、ネットワークポリシーを作成できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
ポリシールールを作成します。
<policy_name>.yaml
ファイルを作成します。touch <policy_name>.yaml
$ touch <policy_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーファイル名を指定します。
作成したばかりのファイルで、以下の例のようなネットワークポリシーを定義します。
すべての namespace のすべての Pod から Ingress を拒否します。
これは基本的なポリシーであり、他のネットワークポリシーの設定によって許可されたクロス Pod トラフィック以外のすべてのクロス Pod ネットワーキングをブロックします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ namespace のすべての Pod から Ingress を許可します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定の namespace から 1 つの Pod への上りトラフィックを許可する
このポリシーは、
namespacey
で実行されている Pod からpod-a
ラベルを持つ Pod へのトラフィックを許可します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ネットワークポリシーオブジェクトを作成するには、以下のコマンドを入力します。成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーファイル名を指定します。
<namespace>
- オプションのパラメーター。現在の namespace 以外の namespace にオブジェクトを定義した場合、namespace を指定してパラメーターを指定します。
成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
4.2.3. デフォルトの全拒否ネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
このポリシーは、デプロイされた他のネットワークポリシーの設定によって許可されたネットワークトラフィックと、ホストネットワークを使用する Pod 間のトラフィック以外のすべての Pod 間ネットワークをブロックします。この手順では、my-project
namespace に deny-by-default
ポリシーを適用することにより、強力な拒否ポリシーを強制します。
トラフィック通信を許可する NetworkPolicy
カスタムリソース (CR) を設定しない場合、次のポリシーによってクラスター全体で通信問題が発生する可能性があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
すべての namespace におけるすべての Pod からの Ingress を拒否する
deny-by-default
ポリシーを定義する次の YAML を作成します。YAML をdeny-by-default.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
4.2.4. 外部クライアントからのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
deny-by-default
ポリシーを設定すると、外部クライアントからラベル app=web
を持つ Pod へのトラフィックを許可するポリシーの設定に進むことができます。
firewalld ルールは、NetworkPolicy
が適用される前に実行されます。
この手順に従って、パブリックインターネットから直接、またはロードバランサーを使用して Pod にアクセスすることにより、外部サービスを許可するポリシーを設定します。トラフィックは、ラベル app=web
を持つ Pod にのみ許可されます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
パブリックインターネットからのトラフィックが直接、またはロードバランサーを使用して Pod にアクセスできるようにするポリシーを作成します。YAML を
web-allow-external.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
4.2.5. すべての namespace からアプリケーションへのトラフィックを許可するネットワークポリシーを作成する リンクのコピーリンクがクリップボードにコピーされました!
この手順に従って、すべての namespace 内のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを設定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
すべての namespace のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを作成します。YAML を
web-allow-all-namespaces.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトでは、ポリシーオブジェクトに
namespaceSelector
パラメーターを指定しないと、namespace は選択されません。これは、ポリシーがネットワークポリシーがデプロイされる namespace からのトラフィックのみを許可することを意味します。次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
検証
次のコマンドを入力して、
default
namespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをsecondary
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、サービスが要求を許可していることを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.6. namespace からアプリケーションへのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
特定の namespace からラベル app=web
を持つ Pod へのトラフィックを許可するポリシーを設定するには、次の手順に従います。以下の場合にこれを行うことができます。
- 実稼働データベースへのトラフィックを、運用ワークロードがデプロイされている namespace のみに制限します。
- 特定の namespace にデプロイされた監視ツールを有効にして、現在の namespace からメトリクスをスクレイピングします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
ラベルが
purpose=production
の特定の namespace 内にあるすべての Pod からのトラフィックを許可するポリシーを作成します。YAML をweb-allow-prod.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
検証
次のコマンドを入力して、
default
namespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prod
namespace を作成します。oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prod
namespace にラベルを付けます。oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
dev
namespace を作成します。oc create namespace dev
$ oc create namespace dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
dev
namespace にラベルを付けます。oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをdev
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、ブロックされた要求の理由を確認します。たとえば、予期される出力状態は
wget: download timed out
となっています。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをprod
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、リクエストが許可されていることを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow