This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.7.6. ネットワークポリシーの設定
クラスター管理者またはプロジェクト管理者として、プロジェクトのネットワークポリシーを設定できます。
7.6.1. ネットワークポリシーについて
					Kubernetes ネットワークポリシーをサポートする Kubernetes Container Network Interface (CNI) プラグインを使用するクラスターでは、ネットワークの分離は NetworkPolicy オブジェクトによって完全に制御されます。
				
OpenShift Container Platform 4.10 では、OpenShift SDN はデフォルトのネットワーク分離モードでのネットワークポリシーの使用をサポートしています。
					OpenShift SDN クラスターネットワークプロバイダーは、egress フィールドで指定された egress ネットワークポリシーをサポートするようになりました。
				
ネットワークポリシーは、ホストのネットワーク namespace には適用されません。ホストネットワークが有効にされている Pod はネットワークポリシールールによる影響を受けません。ただし、ホストネットワークの Pod に接続する Pod はネットワークポリシールールの影響を受ける可能性があります。
ネットワークポリシーは、ローカルホストまたは常駐ノードからのトラフィックをブロックすることはできません。
					デフォルトで、プロジェクトのすべての Pod は他の Pod およびネットワークのエンドポイントからアクセスできます。プロジェクトで 1 つ以上の Pod を分離するには、そのプロジェクトで NetworkPolicy オブジェクトを作成し、許可する着信接続を指定します。プロジェクト管理者は独自のプロジェクト内で NetworkPolicy オブジェクトの作成および削除を実行できます。
				
					Pod が 1 つ以上の NetworkPolicy オブジェクトのセレクターで一致する場合、Pod はそれらの 1 つ以上の NetworkPolicy オブジェクトで許可される接続のみを受け入れます。NetworkPolicy オブジェクトによって選択されていない Pod は完全にアクセス可能です。
				
ネットワークポリシーは、TCP、UDP、および SCTP プロトコルにのみ適用されます。他のプロトコルは影響を受けません。
					以下のサンプル NetworkPolicy オブジェクトは、複数の異なるシナリオをサポートすることを示しています。
				
- すべてのトラフィックを拒否します。 - プロジェクトに deny by default (デフォルトで拒否) を実行させるには、すべての Pod に一致するが、トラフィックを一切許可しない - NetworkPolicyオブジェクトを追加します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- OpenShift Container Platform Ingress コントローラーからの接続のみを許可します。 - プロジェクトで OpenShift Container Platform Ingress コントローラーからの接続のみを許可するには、以下の - NetworkPolicyオブジェクトを追加します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- プロジェクト内の Pod からの接続のみを受け入れます。 - Pod が同じプロジェクト内の他の Pod からの接続を受け入れるが、他のプロジェクトの Pod からの接続を拒否するように設定するには、以下の - NetworkPolicyオブジェクトを追加します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Pod ラベルに基づいて HTTP および HTTPS トラフィックのみを許可します。 - 特定のラベル (以下の例の - role=frontend) の付いた Pod への HTTP および HTTPS アクセスのみを有効にするには、以下と同様の- NetworkPolicyオブジェクトを追加します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- namespace および Pod セレクターの両方を使用して接続を受け入れます。 - namespace と Pod セレクターを組み合わせてネットワークトラフィックのマッチングをするには、以下と同様の - NetworkPolicyオブジェクトを使用できます。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
					NetworkPolicy オブジェクトは加算されるものです。 つまり、複数の NetworkPolicy オブジェクトを組み合わせて複雑なネットワーク要件を満すことができます。
				
					たとえば、先の例で定義された NetworkPolicy オブジェクトの場合、同じプロジェト内に allow-same-namespace と allow-http-and-https ポリシーの両方を定義することができます。これにより、ラベル role=frontend の付いた Pod は各ポリシーで許可されるすべての接続を受け入れます。つまり、同じ namespace の Pod からのすべてのポート、およびすべての namespace の Pod からのポート 80 および 443 での接続を受け入れます。
				
7.6.2. サンプル NetworkPolicy オブジェクト
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
7.6.3. ネットワークポリシーの作成
クラスターの namespace に許可される Ingress または egress ネットワークトラフィックを記述する詳細なルールを定義するには、ネットワークポリシーを作成できます。
						cluster-admin ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
					
前提条件
- 
							クラスターは、NetworkPolicyオブジェクトをサポートするクラスターネットワークプロバイダーを使用している (例:mode: NetworkPolicyが設定された OpenShift SDN ネットワークプロバイダー)。このモードは OpenShiftSDN のデフォルトです。
- 
							OpenShift CLI (oc) がインストールされている。
- 
							admin権限を持つユーザーとしてクラスターにログインしている。
- ネットワークポリシーが適用される 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 を拒否します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 - 同じ namespace のすべての Pod から ingress を許可します。 - 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 を指定します。
 - 出力例 - networkpolicy.networking.k8s.io/default-deny created - networkpolicy.networking.k8s.io/default-deny created- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
						cluster-admin 権限で Web コンソールにログインする場合、YAML で、または Web コンソールのフォームから、クラスターの任意の namespace でネットワークポリシーを直接作成できます。
					
7.6.4. ネットワークポリシーを使用したマルチテナント分離の設定
他のプロジェクト namespace の Pod およびサービスから分離できるようにプロジェクトを設定できます。
前提条件
- 
							クラスターは、NetworkPolicyオブジェクトをサポートするクラスターネットワークプロバイダーを使用している (例:mode: NetworkPolicyが設定された OpenShift SDN ネットワークプロバイダー)。このモードは OpenShiftSDN のデフォルトです。
- 
							OpenShift CLI (oc) がインストールされている。
- 
							admin権限を持つユーザーとしてクラスターにログインしている。
手順
- 以下の - NetworkPolicyオブジェクトを作成します。- allow-from-openshift-ingressという名前のポリシー:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- policy-group.network.openshift.io/ingress: ""は、OpenShift SDN の推奨の namespace セレクターラベルです。- network.openshift.io/policy-group: ingressnamespace セレクターラベルを使用できますが、これはレガシーラベルです。
- allow-from-openshift-monitoringという名前のポリシー。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- allow-same-namespaceという名前のポリシー:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- allow-from-kube-apiserver-operatorという名前のポリシー:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 詳細は、新規の New - kube-apiserver-operatorwebhook controller validating health of webhook を参照してください。
 
- オプション: 以下のコマンドを実行し、ネットワークポリシーオブジェクトが現在のプロジェクトに存在することを確認します。 - oc describe networkpolicy - $ oc describe networkpolicy- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.6.5. 新規プロジェクトのデフォルトネットワークポリシーの作成
					クラスター管理者は、新規プロジェクトの作成時に NetworkPolicy オブジェクトを自動的に含めるように新規プロジェクトテンプレートを変更できます。
				
7.6.6. 新規プロジェクトのテンプレートの変更
クラスター管理者は、デフォルトのプロジェクトテンプレートを変更し、新規プロジェクトをカスタム要件に基づいて作成することができます。
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
手順
- 
							cluster-admin権限を持つユーザーとしてログインしている。
- デフォルトのプロジェクトテンプレートを生成します。 - oc adm create-bootstrap-project-template -o yaml > template.yaml - $ oc adm create-bootstrap-project-template -o yaml > template.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
							オブジェクトを追加するか、既存オブジェクトを変更することにより、テキストエディターで生成される template.yamlファイルを変更します。
- プロジェクトテンプレートは、 - openshift-confignamespace に作成される必要があります。変更したテンプレートを読み込みます。- oc create -f template.yaml -n openshift-config - $ oc create -f template.yaml -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。 - Web コンソールの使用 - 
											Administration Cluster Settings ページに移動します。 
- Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
 
- 
											Administration 
- CLI の使用 - project.config.openshift.io/clusterリソースを編集します。- oc edit project.config.openshift.io/cluster - $ oc edit project.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
 
- specセクションを、- projectRequestTemplateおよび- nameパラメーターを組み込むように更新し、アップロードされたプロジェクトテンプレートの名前を設定します。デフォルト名は- project-requestです。- カスタムプロジェクトテンプレートを含むプロジェクト設定リソース - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 変更を保存した後、変更が正常に適用されたことを確認するために、新しいプロジェクトを作成します。
7.6.6.1. 新規プロジェクトへのネットワークポリシーの追加
						クラスター管理者は、ネットワークポリシーを新規プロジェクトのデフォルトテンプレートに追加できます。OpenShift Container Platform は、プロジェクトのテンプレートに指定されたすべての NetworkPolicy オブジェクトを自動的に作成します。
					
前提条件
- 
								クラスターは、NetworkPolicyオブジェクトをサポートするデフォルトの CNI ネットワークプロバイダーを使用している (例:mode: NetworkPolicyが設定された OpenShift SDN ネットワークプロバイダー)。このモードは OpenShiftSDN のデフォルトです。
- 
								OpenShift CLI (oc) がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてクラスターにログインする。
- 新規プロジェクトのカスタムデフォルトプロジェクトテンプレートを作成している。
手順
- 以下のコマンドを実行して、新規プロジェクトのデフォルトテンプレートを編集します。 - oc edit template <project_template> -n openshift-config - $ oc edit template <project_template> -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - <project_template>を、クラスターに設定したデフォルトテンプレートの名前に置き換えます。デフォルトのテンプレート名は- project-requestです。
- テンプレートでは、各 - NetworkPolicyオブジェクトを要素として- objectsパラメーターに追加します。- objectsパラメーターは、1 つ以上のオブジェクトのコレクションを受け入れます。- 以下の例では、 - objectsパラメーターのコレクションにいくつかの- NetworkPolicyオブジェクトが含まれます。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- オプション: 以下のコマンドを実行して、新規プロジェクトを作成し、ネットワークポリシーオブジェクトが正常に作成されることを確認します。 - 新規プロジェクトを作成します。 - oc new-project <project> - $ oc new-project <project>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- <project>を、作成しているプロジェクトの名前に置き換えます。
 
- 新規プロジェクトテンプレートのネットワークポリシーオブジェクトが新規プロジェクトに存在することを確認します。 - oc get networkpolicy - $ oc get networkpolicy NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow