ネットワークセキュリティー
OpenShift Container Platform におけるネットワークトラフィックの保護とネットワークポリシーの適用
概要
第1章 ネットワークポリシー API について リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes は、ネットワークセキュリティーの強化に使用できる 2 つの機能を提供します。機能の 1 つは、ユーザーによるネットワークポリシーの適用を可能にする NetworkPolicy
API です。これは主にアプリケーション開発者と namespace テナント向けの機能で、namespace スコープのポリシーを作成して namespace を保護することを目的としています。
2 番目の機能は AdminNetworkPolicy
で、AdminNetworkPolicy
(ANP) API と BaselineAdminNetworkPolicy
(BANP) API の 2 つの API で構成されています。ANP と BANP は、クラスターおよびネットワーク管理者向けの機能で、クラスタースコープのポリシーを作成してクラスター全体を保護することを目的としています。クラスター管理者は、ANP を使用すると、NetworkPolicy
オブジェクトよりも優先されるオーバーライド不可能なポリシーを適用できます。BANP を使用すると、NetworkPolicy
オブジェクトを使用して必要に応じてユーザーがオーバーライドできるオプションのクラスタースコープのネットワークポリシールールをセットアップおよび適用できます。ANP、BANP、およびネットワークポリシーを一緒に使用すると、管理者がクラスターのセキュリティー保護に使用できる完全なマルチテナント分離を実現できます。
OpenShift Container Platform の OVN-Kubernetes CNI は、アクセス制御リスト (ACL) の階層を使用してこれらのネットワークポリシーを実装し、それらを評価して適用します。ACL は、階層 1 から階層 3 まで降順で評価されます。
階層 1 では AdminNetworkPolicy
(ANP) オブジェクトを評価します。階層 2 では NetworkPolicy
オブジェクトを評価します。階層 3 では BaselineAdminNetworkPolicy
(BANP) オブジェクトを評価します。
最初に ANP が評価されます。一致が ANP allow
または deny
ルールである場合、クラスター内の既存の NetworkPolicy
および BaselineAdminNetworkPolicy
(BANP) オブジェクトは評価からスキップされます。一致が ANP の pass
ルールの場合、評価が ACL 階層 1 から階層 2 に進み、そこで NetworkPolicy
ポリシーが評価されます。トラフィックに一致する NetworkPolicy
がない場合、評価は Tier 2 ACL から Tier 3 ACL に移動し、そこで BANP が評価されます。
1.1. AdminNetworkPolicy と NetworkPolicy カスタムリソースの主な違い リンクのコピーリンクがクリップボードにコピーされました!
次の表は、クラスタースコープの AdminNetworkPolicy
API と namespace スコープの NetworkPolicy
API の主な違いを説明しています。
ポリシーの要素 | AdminNetworkPolicy | NetworkPolicy |
---|---|---|
対象ユーザー | クラスター管理者または同等の権限 | namespace の所有者 |
スコープ | クラスター | namespace |
トラフィックのドロップ |
明示的な |
ポリシー作成時に暗黙的に |
トラフィックの委譲 |
| 該当なし |
トラフィックの許可 |
明示的に | すべてのルールに対するデフォルトのアクションは allow です。 |
ポリシー内のルールの優先順位 | ANP 内で表示される順序によって異なります。ルールの位置が高いほど、優先順位が高くなります。 | ルールは加算的です。 |
ポリシーの優先順位 |
ANP 間では、 | ポリシー間にポリシー順序はありません。 |
機能の優先順位 | 最初に Tier 1 ACL を介して評価され、最後に BANP が Tier 3 ACL を介して評価されます。 | ANP の後、BANP の前に適用され、ACL の Tier 2 で評価されます。 |
Pod 選択の一致 | namespace 間で異なるルールを適用できます。 | 1 つの namespace 内の Pod に異なるルールを適用できます。 |
クラスターの Egress トラフィック |
|
受け入れられた CIDR 構文とともに |
クラスター Ingress トラフィック | サポート対象外 | サポート対象外 |
完全修飾ドメイン名 (FQDN) ピアサポート | サポート対象外 | サポート対象外 |
namespace セレクター |
|
|
第2章 管理ネットワークポリシー リンクのコピーリンクがクリップボードにコピーされました!
2.1. OVN-Kubernetes AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
2.1.1. AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy
(ANP) は、クラスタースコープのカスタムリソース定義 (CRD) です。OpenShift Container Platform 管理者は、namespace を作成する前にネットワークポリシーを作成することで、ANP を使用してネットワークを保護できます。さらに、NetworkPolicy
オブジェクトによってオーバーライドできないネットワークポリシーをクラスタースコープのレベルで作成できます。
AdminNetworkPolicy
オブジェクトと NetworkPolicy
オブジェクトの主な違いは、前者は管理者用でクラスタースコープであるのに対し、後者はテナント所有者用で namespace スコープであることです。
ANP を使用すると、管理者は以下を指定できます。
-
評価の順序を決定する
priority
値。値が小さいほど優先度が高くなります。 - ポリシーが適用される namespace (または namespace のセット) で構成される Pod のセット。
-
subject
へのすべての Ingress トラフィックに適用される Ingress ルールのリスト。 -
subject
からのすべての Egress トラフィックに適用される Egress ルールのリスト。
AdminNetworkPolicy の例
例2.1 ANP の YAML ファイルの例
- 1
- ANP の名前を指定します。
- 2
spec.priority
フィールドは、0 - 99
の値を受け入れ、クラスター内で最大 100 個の ANP をサポートします。範囲は最低値から最高値の順に読み取られるため、値が低いほど優先度が高くなります。同じ優先度で ANP を作成すると、どのポリシーが優先されるか保証されません。そのため、優先順位が意図したものになるように、異なる優先度で ANP を設定してください。- 3
- ANP リソースを適用する namespace を指定します。
- 4
- ANP には Ingress ルールと Egress ルールの両方があります。
spec.ingress
フィールドの ANP ルールは、action
フィールドのPass
、Deny
、およびAllow
の値を受け入れます。 - 5
ingress.name
の名前を指定します。- 6
namespaceSelector.matchLabels
によって選択された namespace 内の Pod を Ingress ピアとして選択するには、podSelector.matchLabels
を指定します。- 7
- ANP には、Ingress と Egress ルールの両方があります。
spec.egress
フィールドの ANP ルールは、action
フィールドのPass
、Deny
、およびAllow
の値を受け入れます。
2.1.1.1. ルールの AdminNetworkPolicy アクション リンクのコピーリンクがクリップボードにコピーされました!
管理者は、AdminNetworkPolicy
ルールの action
フィールドに Allow
、Deny
、または Pass
を設定できます。OVN-Kubernetes は階層型 ACL を使用してネットワークトラフィックルールを評価するため、ANP を使用すると、非常に強力なポリシールールを設定できます。このポリシールールを変更するには、管理者がルールを変更、削除するか、より高い優先度のルールを設定してオーバーライドする必要があります。
AdminNetworkPolicy の Allow の例
優先度 9 で定義されている次の ANP は、monitoring
namespace からクラスター内の任意のテナント (他のすべての namespace) への Ingress トラフィックをすべて許可します。
例2.2 強力な Allow
ANP の YAML ファイルの例
これは、関係者全員がオーバーライドできない強力な Allow
ANP の例です。テナントは、NetworkPolicy
オブジェクトを使用してテナント自体の監視をブロックすることはできません。また、監視を実行するテナントが監視の対象を決定することもできません。
AdminNetworkPolicy の Deny の例
優先度 5 で定義されている次の ANP は、monitoring
namespace から制限付きテナント (security: restricted
ラベルを持つ namespace) への Ingress トラフィックをすべてブロックします。
例2.3 強力な Deny
ANP の YAML ファイルの例
これは、関係者全員がオーバーライドできない強力な Deny
ANP です。制限付きテナントの所有者は、トラフィックの監視を許可する権限を自分自身に付与できません。また、インフラストラクチャーの監視サービスは、これらの機密性の高い namespace から何も収集できません。
強力な Allow
の例と組み合わせると、block-monitoring
ANP は (Allow の例よりも) 優先度の値が低いため優先順位が高くなり、これにより制限付きテナントが監視されることはなくなります。
AdminNetworkPolicy の Pass の例
優先度 7 で定義されている次の ANP は、monitoring
namespace から内部インフラストラクチャーテナント (security: internal
ラベルを持つ namespace) への Ingress トラフィックをすべて ACL の階層 2 に渡し、トラフィックが namespace の NetworkPolicy
オブジェクトによって評価されるようにします。
例2.4 強力な Pass
ANP の YAML ファイルの例
この例は、テナント所有者によって定義された NetworkPolicy
オブジェクトに決定を委譲する強力な Pass
アクション ANP です。この pass-monitoring
ANP により、internal
セキュリティーレベルでグループ化されたすべてのテナント所有者は、インフラストラクチャーの監視サービスによって namespace スコープの NetworkPolicy
オブジェクトを使用してメトリクスを収集する必要があるかどうかを選択できます。
2.2. OVN-Kubernetes BaselineAdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
2.2.1. BaselineAdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
BaselineAdminNetworkPolicy
(BANP) は、クラスタースコープのカスタムリソース定義 (CRD) です。OpenShift Container Platform 管理者は、BANP を使用すると、NetworkPolicy
オブジェクトを使用してユーザーが必要に応じてオーバーライドできるオプションのベースラインネットワークポリシールールを設定および適用できます。BANP のルールアクションは、allow
または deny
です。
BaselineAdminNetworkPolicy
リソースは、クラスターのシングルトンオブジェクトであり、渡されたトラフィックポリシーがクラスター内のどの NetworkPolicy
オブジェクトにも一致しない場合にガードレールポリシーとして使用できます。BANP は、クラスター内トラフィックをデフォルトでブロックするガードレールを提供するデフォルトのセキュリティーモデルとしても使用できます。その場合、ユーザーが NetworkPolicy
オブジェクトを使用して既知のトラフィックを許可する必要があります。BANP リソースを作成するときは、名前として default
を使用する必要があります。
BANP を使用すると、管理者は以下を指定できます。
-
一連の namespace または namespace で構成される
subject
。 -
subject
へのすべての Ingress トラフィックに適用される Ingress ルールのリスト。 -
subject
からのすべての Egress トラフィックに適用される Egress ルールのリスト。
BaselineAdminNetworkPolicy の例
例2.5 BANP の YAML ファイルの例
- 1
- BANP はシングルトンオブジェクトであるため、ポリシー名は
default
にする必要があります。 - 2
- BANP を適用する namespace を指定します。
- 3
- BANP には Ingress ルールと Egress ルールの両方があります。
spec.ingress
フィールドとspec.egress
フィールドの BANP ルールは、action
フィールドのDeny
とAllow
の値を受け入れます。 - 4
ingress.name
の名前を指定します。- 5
- BANP リソースを適用する Pod の選択元の namespace を指定します。
- 6
- BANP リソースを適用する Pod の
podSelector.matchLabels
名を指定します。
BaselineAdminNetworkPolicy の Deny の例
次の BANP シングルトンは、internal
セキュリティーレベルのテナントに着信するすべての Ingress 監視トラフィックに対してデフォルトの拒否ポリシーを設定します。「AdminNetworkPolicy の Pass の例」と組み合わせると、この拒否ポリシーは、ANP pass-monitoring
ポリシーによって渡されるすべての Ingress トラフィックに対するガードレールポリシーとして機能します。
例2.6 Deny
ガードレールルールの YAML ファイルの例
action
フィールドに Pass
値を指定した AdminNetworkPolicy
リソースを BaselineAdminNetworkPolicy
リソースと組み合わせて使用すると、マルチテナントポリシーを作成できます。このマルチテナントポリシーを使用すると、あるテナントのアプリケーションの監視データを収集しながら、別のテナントのデータを収集しないことが可能になります。
管理者が「AdminNetworkPolicy の Pass
アクションの例」と「BaselineAdminNetwork Policy の Deny
の例」の両方を適用すると、BANP の前に評価される NetworkPolicy
リソースを作成するかどうかをテナントが選択できるようになります。
たとえば、テナント 1 が Ingress トラフィックを監視する次の NetworkPolicy
リソースを設定したとします。
例2.7 NetworkPolicy
の例
この場合、テナント 1 のポリシーは、「AdminNetworkPolicy の Pass
アクションの例」の後、security
レベルが internal
のテナントに着信する Ingress 監視トラフィックをすべて拒否する「BaselineAdminNetworkPolicy の Deny
の例」の前に評価されます。テナント 1 の NetworkPolicy
オブジェクトを設定すると、テナント 1 はアプリケーションのデータを収集できるようになります。一方、NetworkPolicy
オブジェクトが設定されていないテナント 2 は、データを収集できません。管理者はデフォルトでは内部のテナントを監視していませんでした。その代わりに BANP を作成し、テナントが NetworkPolicy
オブジェクトを使用して BANP のデフォルト動作をオーバーライドできるようにしました。
2.3. ANP と BANP の監視 リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy
および BaselineAdminNetworkPolicy
リソースには、ポリシーの監視と管理に使用できるメトリクスがあります。メトリクスの詳細は、以下の表を参照してください。
2.3.1. AdminNetworkPolicy のメトリクス リンクのコピーリンクがクリップボードにコピーされました!
名前 | 説明 | 詳細 |
---|---|---|
| 該当なし |
クラスター内の |
| 該当なし |
クラスター内の |
|
|
|
|
|
|
|
|
|
|
|
|
2.4. AdminNetworkPolicy の Egress ノードとネットワークピア リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、nodes
と networks
のピアを説明します。管理者は、このセクションの例を使用して、クラスター内のノースバウンドトラフィックを制御するための AdminNetworkPolicy
と BaselineAdminNetworkPolicy
を設計できます。
2.4.1. AdminNetworkPolicy および BaselineAdminNetworkPolicy のノースバウンドトラフィック制御 リンクのコピーリンクがクリップボードにコピーされました!
ANP と BANP では、East-West トラフィック制御のサポートに加えて、管理者がクラスターから出るノースバウンドトラフィックや、ノードからクラスター内の他のノードに向かうトラフィックを制御することもできます。エンドユーザーは次のことができます。
-
nodes
Egress ピアを使用してクラスターノードへの Egress トラフィック制御を実装する -
nodes
またはnetworks
の Egress ピアを使用して Kubernetes API サーバーへの Egress トラフィック制御を実装する -
networks
ピアを使用してクラスター外の外部宛先への Egress トラフィック制御を実装する
ANP および BANP の場合、nodes
と networks
のピアは Egress ルールに対してのみ指定できます。
2.4.1.1. ノードピアを使用してクラスターノードへの Egress トラフィックを制御する リンクのコピーリンクがクリップボードにコピーされました!
nodes
ピアを使用すると、管理者は Pod からクラスター内のノードへの Egress トラフィックを制御できます。この利点は、クラスターにノードを追加したり、クラスターからノードを削除したりするときにポリシーを変更する必要がないことです。
次の例では、ノードセレクターピアを使用して、restricted
、confidential
、または internal
レベルのセキュリティーを持つ任意の namespace によるポート 6443
上の Kubernetes API サーバーへの Egress トラフィックを許可します。また、セキュリティーレベルが restricted
、confidential
、または internal
のいずれかである namespace からクラスター内のすべてのワーカーノードへのトラフィックも拒否します。
例2.8 nodes
ピアを使用した ANP Allow
Egress の例
2.4.1.2. ネットワークピアを使用して外部の宛先への Egress トラフィックを制御する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、networks
ピアで CIDR 範囲を使用し、Pod から networks
フィールドで指定された CIDR 範囲内の IP アドレスで設定された宛先に送信される Egress トラフィックを制御するポリシーを適用できます。
以下の例では、networks
ピアを使用し、ANP ポリシーと BANP ポリシーを組み合わせて出力トラフィックを制限します。
ANP および BANP の namespace
フィールドで空のセレクター ({}) を使用する場合は注意が必要です。空のセレクターを使用する場合は、OpenShift namespace も選択します。
ANP または BANP Deny
ルールで 0.0.0.0/0
の値を使用する場合は、Deny
を 0.0.0.0/0
に設定する前に、必要な宛先に優先度の高い ANP Allow
ルールを設定する必要があります。
例2.9 networks
ピアを使用した ANP と BANP の例
network-as-egress-peer
ANP と、networks
ピアを使用する default
の BANP を組み合わせると、次の Egress ポリシーが適用されます。
- すべての Pod が、リストされた IP アドレスの外部 DNS サーバーと通信できない。
- すべての Pod が、会社のイントラネットの残りの部分と通信できる。
- すべての Pod が、他の Pod、ノード、およびサービスと通信できる。
-
どの Pod もインターネットと通信できない。最後の ANP
Pass
ルールと強力な BANPDeny
ルールを組み合わせることで、クラスター内のトラフィックを保護するガードレールポリシーが作成されます。
2.4.1.3. ノードピアとネットワークピアを一緒に使用する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ANP および BANP ポリシーで nodes
と networks
ピアを組み合わせることができます。
例2.10 nodes
と networks
ピアの例
2.5. AdminNetworkPolicy のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
2.5.1. ANP の作成の確認 リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy
(ANP) と BaselineAdminNetworkPolicy
(BANP) が正しく作成されていることを確認するには、oc describe anp
または oc describe banp
のコマンドのステータス出力を確認します。
ステータスが良好な場合は、OVN DB plumbing was successful
および SetupSucceeded
と表示されます。
例2.11 正常なステータスの ANP の例
設定が失敗した場合、それぞれのゾーンコントローラーからエラーが報告されます。
例2.12 不正なステータスとエラーメッセージを含む ANP の例
失敗したポリシーのトラブルシューティングに役立つ nbctl
コマンドは、次のセクションを参照してください。
2.5.1.1. ANP および BANP への nbctl コマンドの使用 リンクのコピーリンクがクリップボードにコピーされました!
失敗したセットアップのトラブルシューティングを行うには、まず ACL
、AdressSet
、Port_Group
などの OVN Northbound データベース (nbdb) オブジェクトを確認します。nbdb を表示するには、そのノードの Pod 内にいて、そのノードのデータベース内のオブジェクトを表示する必要があります。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
クラスターで ovn nbctl
コマンドを実行するには、関連するノード上の `nbdb` にリモートシェルを起動する必要があります。
出力を生成するために次のポリシーが使用されました。
例2.13 出力の生成に使用される AdminNetworkPolicy
手順
次のコマンドを実行して、ノード情報を含む Pod をリスト表示します。
oc get pods -n openshift-ovn-kubernetes -owide
$ oc get pods -n openshift-ovn-kubernetes -owide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod に移動してノースバウンドデータベースを確認します。
oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-524dt
$ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-524dt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ACL nbdb を確認するには、次のコマンドを実行します。
ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 詳細は以下のようになります。, cluster-control
-
トラブルシューティングする
AdminNetworkPolicy
の名前を指定します。 - AdminNetworkPolicy
-
AdminNetworkPolicy
またはBaselineAdminNetworkPolicy
のタイプを指定します。
例2.14 ACL の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Ingress および Egress の出力には、ACL のポリシーのロジックが表示されます。たとえば、パケットが指定された
match
と一致するたびにaction
が実行されます。次のコマンドを実行して、ルールの特定の ACL を調べます。
ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Ingress,"k8s.ovn.org/name"=cluster-control,gress-index="1"}'
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Ingress,"k8s.ovn.org/name"=cluster-control,gress-index="1"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 詳細は以下のようになります。,
cluster-control
-
ANP の
名前
を指定します。 Ingress
-
トラフィックの
方向
をIngress
またはEgress
のいずれかのタイプで指定します。 1
- 確認するルールを指定します。
priority
34
のcluster-control
という名前の ANP の例では、Ingress
rule
1 の出力例は次のとおりです。例2.15 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 詳細は以下のようになります。,
nbdb 内のアドレスセットを確認するには、次のコマンドを実行します。
ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例2.16
Address_Set
の出力例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ルールの特定のアドレスセットを調べます。
ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Egress,"k8s.ovn.org/name"=cluster-control,gress-index="5"}'
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Egress,"k8s.ovn.org/name"=cluster-control,gress-index="5"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例2.17
Address_Set
の出力例_uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
_uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、nbdb 内のポートグループを確認します。
ovn-nbctl find Port_Group 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find Port_Group 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例2.18
Port_Group
の出力例_uuid : f50acf71-7488-4b9a-b7b8-c8a024e99d21 acls : [04f20275-c410-405c-a923-0e677f767889, 0d5e4722-b608-4bb1-b625-23c323cc9926, 1a27d30e-3f96-4915-8ddd-ade7f22c117b, 1a68a5ed-e7f9-47d0-b55c-89184d97e81a, 4b5d836a-e0a3-4088-825e-f9f0ca58e538, 5a6e5bb4-36eb-4209-b8bc-c611983d4624, 5d09957d-d2cc-4f5a-9ddd-b97d9d772023, aa1a224d-7960-4952-bdfb-35246bafbac8, b23a087f-08f8-4225-8c27-4a9a9ee0c407, b7be6472-df67-439c-8c9c-f55929f0a6e0, d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd] external_ids : {"k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14645450421485494999 ports : [5e75f289-8273-4f8a-8798-8c10f7318833, de7e1b71-6184-445d-93e7-b20acadf41ea]
_uuid : f50acf71-7488-4b9a-b7b8-c8a024e99d21 acls : [04f20275-c410-405c-a923-0e677f767889, 0d5e4722-b608-4bb1-b625-23c323cc9926, 1a27d30e-3f96-4915-8ddd-ade7f22c117b, 1a68a5ed-e7f9-47d0-b55c-89184d97e81a, 4b5d836a-e0a3-4088-825e-f9f0ca58e538, 5a6e5bb4-36eb-4209-b8bc-c611983d4624, 5d09957d-d2cc-4f5a-9ddd-b97d9d772023, aa1a224d-7960-4952-bdfb-35246bafbac8, b23a087f-08f8-4225-8c27-4a9a9ee0c407, b7be6472-df67-439c-8c9c-f55929f0a6e0, d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd] external_ids : {"k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14645450421485494999 ports : [5e75f289-8273-4f8a-8798-8c10f7318833, de7e1b71-6184-445d-93e7-b20acadf41ea]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. AdminNetworkPolicy のベストプラクティス リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、AdminNetworkPolicy
および BaselineAdminNetworkPolicy
リソースのベストプラクティスを説明します。
2.6.1. AdminNetworkPolicy の設計 リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy
(ANP) リソースを構築する場合は、ポリシーを作成するときに次の点を考慮する必要があります。
- 同じ優先度を持つ ANP を作成できます。同じ優先度で 2 つの ANP を作成する場合は、重複するルールが同じトラフィックに適用されないようにしてください。値ごとに 1 つのルールのみが適用されます。同じ優先度の値が複数ある場合は、どのルールが適用されるか保証されません。重複する ANP を作成すると、どのポリシーが優先されるか保証されません。そのため、優先順位が明確に定義されるように、異なる優先度で ANP を設定してください。
- 管理者は、システム namespace ではなくユーザー namespace に適用される ANP を作成する必要があります。
ANP および BaselineAdminNetworkPolicy
(BANP) をシステム namespace (default
、kube-system
、名前が openshift-
で始まる namespace など) に適用することはサポートされていないため、クラスターが応答しなくなり、機能しない状態になる可能性があります。
-
サポートされている優先度の範囲は
0 - 100
であるため、30 - 70
のような中間の範囲を使用するように ANP を設計することもできます。これにより、前後の優先順位のためのプレースホルダーが残ります。中間の範囲でも、インフラストラクチャーの要件が時間の経過とともに進化するにつれて、適切な優先度レベルで必要なときに新しい ANP を挿入できるように、ギャップを残しておくことを推奨します。ANP をパックすると、将来の変更に対応するために、それらをすべて再作成しないといけない場合があります。 -
0.0.0.0/0
または::/0
を使用して強力なDeny
ポリシーを作成する場合は、重要なトラフィックに対して優先度の高いAllow
またはPass
ルールがあることを確認してください。 -
どのような場合でも接続が許可されるようにしたい場合は、
action
フィールドとしてAllow
を使用します。ANP のAllow
ルールは、接続が常に許可され、NetworkPolicy
が無視されることを意味します。 -
接続を許可または拒否するポリシー決定を
NetworkPolicy
レイヤーに委任するには、action
フィールドにPass
を使用します。 - 複数のルールにわたるセレクターが重複しないようにして、同じ IP が複数のポリシーに表示されないようにします。これにより、パフォーマンスとスケールの制限が発生する可能性があります。
-
namedPorts
をPortNumber
およびPortRange
と組み合わせて使用することは避けてください。これにより 6 つの ACL が作成され、クラスターの効率が低下します。
2.6.1.1. BaselineAdminNetworkPolicy の使用に関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
クラスター内で定義できる
BaselineAdminNetworkPolicy
(BANP) リソースは 1 つだけです。以下は、管理者が BANP を設計する際に考慮する可能性がある、BANP でサポートされている用途です。-
ユーザー namespace 内のクラスターローカル Ingress に対してデフォルトの拒否ポリシーを設定できます。この BANP により、開発者は許可したい Ingress トラフィックを許可するために
NetworkPolicy
オブジェクトを追加する必要があり、Ingress 用のネットワークポリシーを追加しないとトラフィックが拒否されます。 -
ユーザー namespace のクラスターローカル Egress に対してデフォルトの拒否ポリシーを設定できます。この BANP により、開発者は許可する Egress トラフィックを許可するために
NetworkPolicy
オブジェクトを追加する必要があり、ネットワークポリシーを追加しないとトラフィックが拒否されます。 -
クラスター内 DNS サービスへの Egress に対してデフォルトの許可ポリシーを設定できます。このような BANP により、namespace のユーザーは、クラスター内 DNS サービスへの許可 Egress
NetworkPolicy
を設定する必要がなくなります。 -
すべての Pod への内部 Egress トラフィックを許可し、すべての外部エンドポイント (つまり
0.0.0.0/0
および::/0
) へのアクセスを拒否する Egress ポリシーを設定できます。この BANP により、ユーザーワークロードは他のクラスター内エンドポイントにトラフィックを送信できますが、デフォルトでは外部エンドポイントには送信できません。開発者はNetworkPolicy
を使用して、アプリケーションが明示的な外部サービスセットにトラフィックを送信できるようにすることができます。
-
ユーザー namespace 内のクラスターローカル Ingress に対してデフォルトの拒否ポリシーを設定できます。この BANP により、開発者は許可したい Ingress トラフィックを許可するために
-
BANP のスコープを設定し、システム namespace ではなくユーザー namespace へのトラフィックのみを拒否するようにしてください。これは、システム namespace に BANP をオーバーライドする
NetworkPolicy
オブジェクトがないためです。
2.6.1.2. AdminNetworkPolicy と NetworkPolicy の考慮すべき相違点 リンクのコピーリンクがクリップボードにコピーされました!
-
NetworkPolicy
オブジェクトとは異なり、誤ってトラフィックが選択されることを避けるために、空の ({}
) キャッチオールセレクターを使用するのではなく、明示的なラベルを使用して ANP および BANP 内のワークロードを参照する必要があります。
インフラストラクチャー namespace に空の namespace セレクターを適用すると、クラスターが応答しなくなり、機能しない状態になる可能性があります。
-
ANP の API セマンティクスでは、暗黙的な拒否を持つ
NetworkPolicy
オブジェクトとは異なり、ポリシーを作成するときに許可または拒否のルールを明示的に定義する必要があります。 -
NetworkPolicy
オブジェクトとは異なり、AdminNetworkPolicy
オブジェクトの Ingress ルールはクラスター内の Pod と namespace に制限されているため、ホストネットワークからの Ingress のルールを設定することはできず、また設定する必要もありません。
第3章 ネットワークポリシー リンクのコピーリンクがクリップボードにコピーされました!
3.1. ネットワークポリシーについて リンクのコピーリンクがクリップボードにコピーされました!
開発者は、クラスター内の Pod へのトラフィックを制限するネットワークポリシーを定義できます。
3.1.1. ネットワークポリシーについて リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、プロジェクトのすべての Pod は他の Pod およびネットワークのエンドポイントからアクセスできます。プロジェクトで 1 つ以上の Pod を分離するには、そのプロジェクトで NetworkPolicy
オブジェクトを作成し、許可する着信接続を指定します。プロジェクト管理者は独自のプロジェクト内で NetworkPolicy
オブジェクトの作成および削除を実行できます。
Pod が 1 つ以上の NetworkPolicy
オブジェクトのセレクターで一致する場合、Pod はそれらの 1 つ以上の NetworkPolicy
オブジェクトで許可される接続のみを受け入れます。NetworkPolicy
オブジェクトによって選択されていない Pod は完全にアクセス可能です。
ネットワークポリシーは、Transmission Control Protocol (TCP)、User Datagram Protocol (UDP)、Internet Control Message Protocol (ICMP)、および Stream Control Transmission Protocol (SCTP) プロトコルにのみ適用されます。他のプロトコルは影響を受けません。
- ネットワークポリシーは、ホストのネットワーク namespace には適用されません。ホストネットワークが有効にされている Pod はネットワークポリシールールによる影響を受けません。ただし、ホストネットワークを使用する Pod に接続する Pod は、ネットワークポリシールールの影響を受ける可能性があります。
-
podSelector
フィールドを{}
に設定せずにnamespaceSelector
フィールドを使用すると、hostNetwork
Pod が含まれません。ネットワークポリシーの作成時にhostNetwork
Pod をターゲットにするには、namespaceSelector
フィールドでpodSelector
を{}
に設定して使用する必要があります。 - ネットワークポリシーは、ローカルホストまたは常駐ノードからのトラフィックをブロックすることはできません。
以下のサンプル NetworkPolicy
オブジェクトは、複数の異なるシナリオをサポートすることを示しています。
すべてのトラフィックを拒否します。
プロジェクトに deny by default (デフォルトで拒否) を実行させるには、すべての Pod に一致するが、トラフィックを一切許可しない
NetworkPolicy
オブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform Ingress Controller からの接続のみを許可します。
プロジェクトで OpenShift Container Platform Ingress Controller からの接続のみを許可するには、以下の
NetworkPolicy
オブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロジェクト内の Pod からの接続のみを受け入れます。
重要同じ namespace 内の
hostNetwork
Pod からの Ingress 接続を許可するには、allow-from-hostnetwork
ポリシーとallow-same-namespace
ポリシーを一緒に適用する必要があります。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
での接続を受け入れます。
3.1.1.1. allow-from-router ネットワークポリシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
次の NetworkPolicy
を使用して、ルーターの設定に関係なく外部トラフィックを許可します。
- 1
policy-group.network.openshift.io/ingress:""
ラベルは OVN-Kubernetes をサポートします。
3.1.1.2. allow-from-hostnetwork ネットワークポリシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
次の allow-from-hostnetwork
NetworkPolicy
オブジェクトを追加して、ホストネットワーク Pod からのトラフィックを転送します。
3.1.2. OVN-Kubernetes ネットワークプラグインによるネットワークポリシーの最適化 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークポリシーを設計する場合は、以下のガイドラインを参照してください。
-
同じ
spec.podSelector
仕様を持つネットワークポリシーの場合、ingress
ルールまたはegress
ルールを持つ複数のネットワークポリシーを使用するよりも、複数のIngress
ルールまたはegress
ルールを持つ 1 つのネットワークポリシーを使用する方が効率的です。 podSelector
またはnamespaceSelector
仕様に基づくすべてのIngress
またはegress
ルールは、number of pods selected by network policy + number of pods selected by ingress or egress rule
に比例する数の OVS フローを生成します。そのため、Pod ごとに個別のルールを作成するのではなく、1 つのルールで必要な数の Pod を選択できるpodSelector
またはnamespaceSelector
仕様を使用することが推奨されます。たとえば、以下のポリシーには 2 つのルールが含まれています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のポリシーは、上記と同じ 2 つのルールを 1 つのルールとして表現しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じガイドラインが
spec.podSelector
仕様に適用されます。異なるネットワークポリシーに同じingress
ルールまたはegress
ルールがある場合、共通のspec.podSelector
仕様で 1 つのネットワークポリシーを作成する方が効率的な場合があります。たとえば、以下の 2 つのポリシーには異なるルールがあります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のネットワークポリシーは、上記と同じ 2 つのルールを 1 つのルールとして表現しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この最適化は、複数のセレクターを 1 つのセレクターとして表現する場合に限り適用できます。セレクターが異なるラベルに基づいている場合、この最適化は適用できない可能性があります。その場合は、ネットワークポリシーの最適化に特化して新規ラベルをいくつか適用することを検討してください。
3.1.2.1. OVN-Kubernetes の NetworkPolicy CR と外部 IP リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes では、NetworkPolicy
カスタムリソース (CR) によって厳密な分離ルールが適用されます。サービスが外部 IP を使用して公開されている場合、トラフィックを許可するように明示的に設定されていない限り、ネットワークポリシーによって他の namespace からのアクセスがブロックされる可能性があります。
namespace をまたいで外部 IP へのアクセスを許可するには、必要な namespace からの Ingress を明示的に許可し、指定されたサービスポートへのトラフィックが許可されるようにする NetworkPolicy
CR を作成します。必要なポートへのトラフィックを許可しなければ、アクセスが制限される可能性があります。
出力例
ここでは、以下のようになります。
<policy_name>
- ポリシーの名前を指定します。
<my_namespace>
- ポリシーがデプロイされる namespace の名前を指定します。
詳細は、「ネットワークポリシーについて」を参照してください。
3.1.3. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
3.2. ネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
admin
ロールを持つユーザーは、namespace のネットワークポリシーを作成できます。
3.2.1. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
3.2.2. CLI を使用したネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの namespace に許可される Ingress または Egress ネットワークトラフィックを記述する詳細なルールを定義するには、ネットワークポリシーを作成できます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
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 を拒否します。
これは基本的なポリシーであり、他のネットワークポリシーの設定によって許可されたクロス 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 への Ingress トラフィックを許可する
このポリシーは、
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 を指定してパラメーターを指定します。
成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールのフォームから、クラスターの任意の namespace でネットワークポリシーを直接作成できます。
3.2.3. デフォルトの全拒否ネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
このポリシーは、デプロイされた他のネットワークポリシーの設定によって許可されたネットワークトラフィックと、ホストネットワークを使用する Pod 間のトラフィック以外のすべての Pod 間ネットワークをブロックします。この手順では、my-project
namespace に deny-by-default
ポリシーを適用することにより、強力な拒否ポリシーを強制します。
トラフィック通信を許可する NetworkPolicy
カスタムリソース (CR) を設定しない場合、次のポリシーによってクラスター全体で通信問題が発生する可能性があります。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが適用される 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 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
3.2.4. 外部クライアントからのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
deny-by-default
ポリシーを設定すると、外部クライアントからラベル app=web
を持つ Pod へのトラフィックを許可するポリシーの設定に進むことができます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
この手順に従って、パブリックインターネットから直接、またはロードバランサーを使用して Pod にアクセスすることにより、外部サービスを許可するポリシーを設定します。トラフィックは、ラベル app=web
を持つ Pod にのみ許可されます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが適用される 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 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。このポリシーは、次の図に示すように、外部トラフィックを含むすべてのリソースからのトラフィックを許可します。
3.2.5. すべての namespace からアプリケーションへのトラフィックを許可するネットワークポリシーを作成する リンクのコピーリンクがクリップボードにコピーされました!
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
この手順に従って、すべての namespace 内のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを設定します。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが適用される 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
3.2.6. namespace からアプリケーションへのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
特定の namespace からラベル app=web
を持つ Pod へのトラフィックを許可するポリシーを設定するには、次の手順に従います。以下の場合にこれを行うことができます。
- 実稼働データベースへのトラフィックを、運用ワークロードがデプロイされている namespace のみに制限します。
- 特定の namespace にデプロイされた監視ツールを有効にして、現在の namespace からメトリクスをスクレイピングします。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが適用される 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
3.3. ネットワークポリシーの表示 リンクのコピーリンクがクリップボードにコピーされました!
admin
ロールを持つユーザーは、namespace のネットワークポリシーを表示できます。
3.3.1. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
3.3.2. CLI を使用したネットワークポリシーの表示 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを検査できます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意のネットワークポリシーを表示できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが存在する namespace で作業している。
手順
namespace のネットワークポリシーを一覧表示します。
namespace で定義されたネットワークポリシーオブジェクトを表示するには、以下のコマンドを実行します。
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 特定のネットワークポリシーを検査するには、以下のコマンドを入力します。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- 検査するネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
以下に例を示します。
oc describe networkpolicy allow-same-namespace
$ oc describe networkpolicy allow-same-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe
コマンドの出力Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールのフォームから、クラスターの任意の namespace でネットワークポリシーを直接表示できます。
3.4. ネットワークポリシーの編集 リンクのコピーリンクがクリップボードにコピーされました!
admin
ロールを持つユーザーは、namespace の既存のネットワークポリシーを編集できます。
3.4.1. ネットワークポリシーの編集 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを編集できます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを編集できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが存在する namespace で作業している。
手順
オプション: namespace のネットワークポリシーオブジェクトをリスト表示するには、以下のコマンドを入力します。
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
ネットワークポリシーオブジェクトを編集します。
ネットワークポリシーの定義をファイルに保存した場合は、ファイルを編集して必要な変更を加えてから、以下のコマンドを入力します。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
<policy_file>
- ネットワークポリシーを含むファイルの名前を指定します。
ネットワークポリシーオブジェクトを直接更新する必要がある場合、以下のコマンドを入力できます。
oc edit networkpolicy <policy_name> -n <namespace>
$ oc edit networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
ネットワークポリシーオブジェクトが更新されていることを確認します。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールの Actions メニューのポリシーから、クラスターの任意の namespace でネットワークポリシーを直接編集できます。
3.4.2. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
3.5. ネットワークポリシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
admin
ロールを持つユーザーは、namespace からネットワークポリシーを削除できます。
3.5.1. CLI を使用したネットワークポリシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを削除できます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意のネットワークポリシーを削除できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークポリシーが存在する namespace で作業している。
手順
ネットワークポリシーオブジェクトを削除するには、以下のコマンドを入力します。成功した出力には、ポリシーオブジェクトの名前と
削除され
たステータスが一覧表示されます。oc delete networkpolicy <policy_name> -n <namespace>
$ oc delete networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーの名前を指定します。
<namespace>
- オプションのパラメーター。現在の namespace 以外の namespace にオブジェクトを定義した場合、namespace を指定してパラメーターを指定します。
成功した出力には、ポリシーオブジェクトの名前と
削除され
たステータスが一覧表示されます。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールの Actions メニューのポリシーから、クラスターの任意の namespace でネットワークポリシーを直接削除できます。
3.6. プロジェクトのデフォルトネットワークポリシーの定義 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、新規プロジェクトの作成時にネットワークポリシーを自動的に含めるように新規プロジェクトテンプレートを変更できます。新規プロジェクトのカスタマイズされたテンプレートがまだない場合には、まずテンプレートを作成する必要があります。
3.6.1. 新規プロジェクトのテンプレートの変更 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、デフォルトのプロジェクトテンプレートを変更し、新規プロジェクトをカスタム要件に基づいて作成できます。
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
-
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-config
namespace に作成する必要があります。変更したテンプレートを読み込みます。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 をクリックします。
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 - 変更を保存した後、変更が正常に適用されたことを確認するために、新しいプロジェクトを作成します。
3.6.2. 新規プロジェクトへのネットワークポリシーの追加 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ネットワークポリシーを新規プロジェクトのデフォルトテンプレートに追加できます。OpenShift Container Platform は、プロジェクトのテンプレートに指定されたすべての NetworkPolicy
オブジェクトを自動的に作成します。
前提条件
-
クラスターは、
NetworkPolicy
オブジェクトをサポートするデフォルトのコンテナーネットワークインターフェイス(CNI)ネットワークプラグイン(OVN-Kubernetes など)を使用します。 -
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 想定される出力:
NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s
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
3.7. ネットワークポリシーを使用したマルチテナント分離の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、マルチテナントネットワークの分離を実行するようにネットワークポリシーを設定できます。
このセクションで説明するようにネットワークポリシーを設定すると、以前のバージョンの OpenShift Container Platform における OpenShift SDN のマルチテナントモードと同様のネットワーク分離が実現します。
3.7.1. ネットワークポリシーを使用したマルチテナント分離の設定 リンクのコピーリンクがクリップボードにコピーされました!
他のプロジェクト namespace の Pod およびサービスから分離できるようにプロジェクトを設定できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
admin
権限を持つユーザーとしてクラスターにログインしている。
手順
以下の
NetworkPolicy
オブジェクトを作成します。allow-from-openshift-ingress
という名前のポリシー:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記policy-group.network.openshift.io/ingress: ""
は、OVN-Kubernetes の推奨される namespace セレクターラベルです。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-operator
webhook 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
3.7.2. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
第4章 ネットワークセキュリティーの監査ロギング リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes ネットワークプラグインは、Open Virtual Network (OVN) アクセス制御リスト (ACL) を使用して、AdminNetworkPolicy
、BaselineAdminNetworkPolicy
、NetworkPolicy
、および EgressFirewall
オブジェクトを管理します。監査ログは、NetworkPolicy
、EgressFirewall
、および BaselineAdminNetworkPolicy
カスタムリソース (CR) の allow
および deny
ACL イベントを公開します。ロギングは、AdminNetworkPolicy
(ANP) CR の allow
、deny
、pass
ACL イベントも公開します。
監査ログは、OVN-Kubernetes ネットワークプラグイン でのみ使用できます。
4.1. 監査設定 リンクのコピーリンクがクリップボードにコピーされました!
監査ロギングの設定は、OVN-Kubernetes クラスターネットワークプロバイダー設定の一部として指定されます。次の YAML は、監査ログのデフォルト値を示しています。
監査ロギング設定
次の表では、監査ログの設定フィールドを説明します。
フィールド | 型 | 説明 |
---|---|---|
| integer |
ノードごとに毎秒生成されるメッセージの最大数。デフォルト値は、1 秒あたり |
| integer |
監査ログの最大サイズ (バイト単位)。デフォルト値は |
| integer | 保持されるログファイルの最大数。 |
| string | 以下の追加の監査ログターゲットのいずれかになります。
|
| string |
RFC5424 で定義される |
4.2. 監査ロギング リンクのコピーリンクがクリップボードにコピーされました!
syslog サーバーや UNIX ドメインソケットなど、監査ログの宛先を設定できます。追加の設定に関係なく、監査ログは常にクラスター内の各 OVN-Kubernetes Pod の /var/log/ovn/acl-audit-log.log
に保存されます。
各 namespace 設定に k8s.ovn.org/acl-logging
セクションをアノテーション付けすることで、各 namespace の監査ログを有効にできます。k8s.ovn.org/acl-logging
セクションでは、namespace の監査ログを有効にするために、allow
、deny
、またはその両方の値を指定する必要があります。
ネットワークポリシーでは、Pass
アクションセットをルールとして設定することはサポートされていません。
ACL ロギング実装は、ネットワークのアクセス制御リスト (ACL) イベントをログに記録します。これらのログを表示して、潜在的なセキュリティー問題を分析できます。
namespace アノテーションの例
デフォルトの ACL ロギング設定値を表示するには、cluster-network-03-config.yml
ファイルの policyAuditConfig
オブジェクトを参照してください。必要に応じて、このファイル内のログファイルパラメーターの ACL ロギング設定値を変更できます。
ログメッセージの形式は、RFC5424 で定義されている syslog と互換性があります。syslog ファシリティーは設定可能です。デフォルトは local0
です。次の例は、ログメッセージに出力される主要なパラメーターとその値を示しています。
パラメーターとその値を出力するロギングメッセージの例
<timestamp>|<message_serial>|acl_log(ovn_pinctrl0)|<severity>|name="<acl_name>", verdict="<verdict>", severity="<severity>", direction="<direction>": <flow>
<timestamp>|<message_serial>|acl_log(ovn_pinctrl0)|<severity>|name="<acl_name>", verdict="<verdict>", severity="<severity>", direction="<direction>": <flow>
詳細は、以下のようになります。
-
<timestamp>
は、ログメッセージが作成された日時を示します。 -
<message_serial>
には、ログメッセージのシリアル番号がリストされます。 -
acl_log (ovn_pinctrl0)
は、OVN-Kubernetes プラグイン内のログメッセージの場所を出力するリテラル文字列です。 -
<severity>
は、ログメッセージの重大度レベルを設定します。allow
タスクとdeny
タスクをサポートする監査ログを有効にすると、ログメッセージ出力に 2 つの重大度レベルが表示されます。 -
<name>
は、ネットワークポリシーによって作成された OVN ネットワークブリッジングデータベース (nbdb
) 内の ACL ロギング実装の名前を示します。 -
<verdict>
は、allow
またはdrop
のいずれかになります。 -
<direction>
は、to-lport
またはfrom-lport
のいずれかで、ポリシーが Pod に向かうトラフィックまたは Pod から出るトラフィックに適用されたことを示します。 -
<flow>
は、OpenFlow
プロトコルと同等の形式でパケット情報を表示します。このパラメーターは Open vSwitch (OVS) フィールドで構成されます。
次の例は、flow
パラメーターがシステムメモリーからパケット情報を抽出するために使用する OVS フィールドを示しています。
flow
パラメーターがパケット情報を抽出するために使用する OVS フィールドの例
<proto>,vlan_tci=0x0000,dl_src=<src_mac>,dl_dst=<source_mac>,nw_src=<source_ip>,nw_dst=<target_ip>,nw_tos=<tos_dscp>,nw_ecn=<tos_ecn>,nw_ttl=<ip_ttl>,nw_frag=<fragment>,tp_src=<tcp_src_port>,tp_dst=<tcp_dst_port>,tcp_flags=<tcp_flags>
<proto>,vlan_tci=0x0000,dl_src=<src_mac>,dl_dst=<source_mac>,nw_src=<source_ip>,nw_dst=<target_ip>,nw_tos=<tos_dscp>,nw_ecn=<tos_ecn>,nw_ttl=<ip_ttl>,nw_frag=<fragment>,tp_src=<tcp_src_port>,tp_dst=<tcp_dst_port>,tcp_flags=<tcp_flags>
詳細は、以下のようになります。
-
<proto>
はプロトコルを指定します。有効な値はtcp
とudp
です。 -
vlan_tci=0x0000
は、内部 Pod ネットワークトラフィックに VLAN ID が設定されていないため、VLAN ヘッダーを0
として示します。 -
<src_mac>
は、メディアアクセス制御 (MAC) アドレスのソースを指定します。 -
<source_mac>
は、MAC アドレスの宛先を指定します。 -
<source_ip>
は、送信元 IP アドレスをリストします -
<target_ip>
は、ターゲット IP アドレスをリストします。 -
<tos_dscp>
は、特定のネットワークトラフィックを他のトラフィックよりも分類して優先順位を付ける差別化サービスコードポイント (DSCP) 値を指定します。 -
<tos_ecn>
は、ネットワーク内の輻輳したトラフィックを示す明示的輻輳通知 (ECN) 値を示します。 -
<ip_ttl>
は、パケットの Time To Live (TTL) 情報を示します。 -
<fragment>
は、一致させる IP フラグメントまたは IP 非フラグメントのタイプを指定します。 -
<tcp_src_port>
は、TCP および UDP プロトコルのポートのソースを示します。 -
<tcp_dst_port>
は、TCP および UDP プロトコルの宛先ポートをリストします。 -
<tcp_flags>
は、SYN
、ACK
、PSH
などの多数のフラグをサポートします。複数の値を設定する必要がある場合は、各値を縦棒 (|
) で区切ります。UDP プロトコルはこのパラメーターをサポートしていません。
以前のフィールドの説明の詳細は、OVS の man ページの ovs-fields
を参照してください。
ネットワークポリシーの ACL 拒否ログエントリーの例
2023-11-02T16:28:54.139Z|00004|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn 2023-11-02T16:28:55.187Z|00005|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn 2023-11-02T16:28:57.235Z|00006|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:54.139Z|00004|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:55.187Z|00005|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:57.235Z|00006|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
以下の表は、namespace アノテーションの値を説明しています。
フィールド | 説明 |
---|---|
|
|
|
|
|
|
4.3. AdminNetworkPolicy 監査ログ リンクのコピーリンクがクリップボードにコピーされました!
監査ロギングは、次の例のように、ANP ポリシーに k8s.ovn.org/acl-logging
キーのアノテーションを付けることにより、AdminNetworkPolicy
CR ごとに有効になります。
例4.1 AdminNetworkPolicy
CR のアノテーションの例
特定の OVN ACL に該当し、ロギングアノテーションで設定されたアクション基準を満たすたびに、ログが生成されます。たとえば、ラベルが tenant: product-development
の namespace のいずれかが tenant: backend-storage
のラベルが付いた namespace にアクセスするイベントでは、ログが生成されます。
ACL ロギングは 60 文字に制限されます。ANP 名
フィールドが長い場合、ログの残りの部分は切り捨てられます。
以下は、ログエントリーの例の方向インデックスです。
方向 | ルール |
---|---|
Ingress |
|
Egress |
|
例4.2 anp-tenant-log
という名前の AdminNetworkPolicy
の Ingress:0
および Egress:0
による Allow
アクションに関する ACL ログエントリー例
2024-06-10T16:27:45.194Z|00052|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1a,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.26,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=57814,tp_dst=8080,tcp_flags=syn 2024-06-10T16:28:23.130Z|00059|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:18,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.24,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=38620,tp_dst=8080,tcp_flags=ack 2024-06-10T16:28:38.293Z|00069|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:0", verdict=allow, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1a,nw_src=10.128.2.25,nw_dst=10.128.2.26,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=47566,tp_dst=8080,tcp_flags=fin|ack=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=55704,tp_dst=8080,tcp_flags=ack
2024-06-10T16:27:45.194Z|00052|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1a,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.26,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=57814,tp_dst=8080,tcp_flags=syn
2024-06-10T16:28:23.130Z|00059|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:18,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.24,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=38620,tp_dst=8080,tcp_flags=ack
2024-06-10T16:28:38.293Z|00069|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:0", verdict=allow, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1a,nw_src=10.128.2.25,nw_dst=10.128.2.26,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=47566,tp_dst=8080,tcp_flags=fin|ack=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=55704,tp_dst=8080,tcp_flags=ack
例4.3 anp-tenant-log
という名前の AdminNetworkPolicy
の Ingress:1
および Egress:1
による Pass
アクションに関する ACL ログエントリー例
2024-06-10T16:33:12.019Z|00075|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:1", verdict=pass, severity=warning, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1b,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.27,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=37394,tp_dst=8080,tcp_flags=ack 2024-06-10T16:35:04.209Z|00081|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:1", verdict=pass, severity=warning, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1b,nw_src=10.128.2.25,nw_dst=10.128.2.27,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=34018,tp_dst=8080,tcp_flags=ack
2024-06-10T16:33:12.019Z|00075|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:1", verdict=pass, severity=warning, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1b,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.27,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=37394,tp_dst=8080,tcp_flags=ack
2024-06-10T16:35:04.209Z|00081|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:1", verdict=pass, severity=warning, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1b,nw_src=10.128.2.25,nw_dst=10.128.2.27,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=34018,tp_dst=8080,tcp_flags=ack
例4.4 anp-tenant-log
という名前の AdminNetworkPolicy
の Egress:2
および Ingress2
による Deny
アクションに関する ACL ログエントリー例
2024-06-10T16:43:05.287Z|00087|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:2", verdict=drop, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:18,nw_src=10.128.2.25,nw_dst=10.128.2.24,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=51598,tp_dst=8080,tcp_flags=syn 2024-06-10T16:44:43.591Z|00090|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:2", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1c,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.28,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=33774,tp_dst=8080,tcp_flags=syn
2024-06-10T16:43:05.287Z|00087|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:2", verdict=drop, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:18,nw_src=10.128.2.25,nw_dst=10.128.2.24,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=51598,tp_dst=8080,tcp_flags=syn
2024-06-10T16:44:43.591Z|00090|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:2", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1c,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.28,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=33774,tp_dst=8080,tcp_flags=syn
次の表は、ANP アノテーションを説明しています。
アノテーション | 値 |
---|---|
|
namespace の監査ログを有効にするには、
|
4.4. BaselineAdminNetworkPolicy 監査ログ リンクのコピーリンクがクリップボードにコピーされました!
監査ロギングは、次の例のように、BANP ポリシーに k8s.ovn.org/acl-logging
キーのアノテーションを付けすることで、BaselineAdminNetworkPolicy
CR で有効になります。
例4.5 BaselineAdminNetworkPolicy
CR のアノテーションの例
この例では、ラベルが tenant: dns
の namespace のいずれかが tenant: workloads
ラベルを持つ namespace にアクセスするイベントで、ログが生成されます。
以下は、ログエントリーの例の方向インデックスです。
方向 | ルール |
---|---|
Ingress |
|
Egress |
|
例4.6 Ingress:0
での default
BANP の Allow
アクションに関する ACL 許可ログエントリーの例
例4.7 Egress:0
および Ingress:1
での default
BANP の Allow
アクションに関する ACL 許可ログエントリーの例
次の表では、BANP アノテーションを説明します。
アノテーション | 値 |
---|---|
|
namespace の監査ロギングを有効にするには、少なくとも
|
4.5. クラスターの Egress ファイアウォールとネットワークポリシー監査の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスターの監査ログをカスタマイズできます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
監査ロギング設定をカスタマイズするには、次のコマンドを入力します。
oc edit network.operator.openshift.io/cluster
$ oc edit network.operator.openshift.io/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒント次の YAML をカスタマイズして適用し、監査ロギングを設定することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネットワークポリシーを使用して namespace を作成するには、次の手順を実行します。
検証用の namespace を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ネットワークポリシーと共に namespace と
作成された
ステータスが一覧表示されます。namespace のネットワークポリシーを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
networkpolicy.networking.k8s.io/deny-all created networkpolicy.networking.k8s.io/allow-from-same-namespace created
networkpolicy.networking.k8s.io/deny-all created networkpolicy.networking.k8s.io/allow-from-same-namespace created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ソーストラフィックの Pod を
default
namespace に作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow verify-audit-logging
namespace に 2 つの Pod を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、
pod/client
およびpod/server
などの 2 つの Pod と作成された
ステータスが一覧表示されます。トラフィックを生成し、ネットワークポリシー監査ログエントリーを作成するには、以下の手順を実行します。
verify-audit-logging
namespace でserver
という名前の Pod の IP アドレスを取得します。POD_IP=$(oc get pods server -n verify-audit-logging -o jsonpath='{.status.podIP}')
$ POD_IP=$(oc get pods server -n verify-audit-logging -o jsonpath='{.status.podIP}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow default
の namespace のclient
という名前の Pod の以前のコマンドから IP アドレスに ping し、すべてのパケットがドロップされていることを確認します。oc exec -it client -n default -- /bin/ping -c 2 $POD_IP
$ oc exec -it client -n default -- /bin/ping -c 2 $POD_IP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
PING 10.128.2.55 (10.128.2.55) 56(84) bytes of data. --- 10.128.2.55 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 2041ms
PING 10.128.2.55 (10.128.2.55) 56(84) bytes of data. --- 10.128.2.55 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 2041ms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow verify-audit-logging
namespace のクライアント Pod から、POD_IP シェル
環境変数に保存されている IP アドレスに ping を送信し、システムですべてのパケットを許可していることを確認します。oc exec -it client -n verify-audit-logging -- /bin/ping -c 2 $POD_IP
$ oc exec -it client -n verify-audit-logging -- /bin/ping -c 2 $POD_IP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ネットワークポリシー監査ログの最新エントリーを表示します。
for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. namespace の Egress ファイアウォールとネットワークポリシーの監査ログを有効にする リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、namespace の監査ログを有効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
namespace の監査ログを有効にするには、次のコマンドを入力します。
oc annotate namespace <namespace> \ k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "notice" }'
$ oc annotate namespace <namespace> \ k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "notice" }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- namespace の名前を指定します。
ヒント次の YAML を適用して監査ロギングを有効にすることもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、監査ロギング名と
アノテーションが付いたステータスが
一覧表示されます。
検証
監査ログの最新のエントリーを表示します。
for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
2023-11-02T16:49:57.909Z|00028|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:57.909Z|00029|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00030|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00031|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0
2023-11-02T16:49:57.909Z|00028|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:57.909Z|00029|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00030|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00031|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. namespace の Egress ファイアウォールとネットワークポリシーの監査ログを無効にする リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、namespace の監査ログを無効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
namespace の監査ログを無効にするには、次のコマンドを入力します。
oc annotate --overwrite namespace <namespace> k8s.ovn.org/acl-logging-
$ oc annotate --overwrite namespace <namespace> k8s.ovn.org/acl-logging-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- namespace の名前を指定します。
ヒント次の YAML を適用して監査ロギングを無効にすることもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、監査ロギング名と
アノテーションが付いたステータスが
一覧表示されます。
第5章 Egress ファイアウォール リンクのコピーリンクがクリップボードにコピーされました!
5.1. プロジェクトの Egress ファイアウォールの表示 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の egress ファイアウォールの名前をリスト表示し、特定の egress ファイアウォールのトラフィックルールを表示できます。
5.1.1. EgressFirewall オブジェクトの表示 リンクのコピーリンクがクリップボードにコピーされました!
クラスターで EgressFirewall オブジェクトを表示できます。
前提条件
- OVN-Kubernetes ネットワークプラグインを使用するクラスター。
-
oc
として知られる OpenShift コマンドラインインターフェイス (CLI) のインストール。 - クラスターにログインすること。
手順
オプション: クラスターで定義された EgressFirewall オブジェクトの名前を表示するには、以下のコマンドを入力します。
oc get egressfirewall --all-namespaces
$ oc get egressfirewall --all-namespaces
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーを検査するには、以下のコマンドを入力します。
<policy_name>
を検査するポリシーの名前に置き換えます。oc describe egressfirewall <policy_name>
$ oc describe egressfirewall <policy_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. プロジェクトの Egress ファイアウォールの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の Egress ファイアウォールのネットワークトラフィックルールを変更できます。
5.2.1. EgressFirewall オブジェクトの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトの Egress ファイアウォールを更新できます。
前提条件
- OVN-Kubernetes ネットワークプラグインを使用するクラスター。
-
OpenShift CLI (
oc
) がインストールされている。 - クラスター管理者としてクラスターにログインする必要があります。
手順
プロジェクトの EgressFirewall オブジェクトの名前を検索します。
<project>
をプロジェクトの名前に置き換えます。oc get -n <project> egressfirewall
$ oc get -n <project> egressfirewall
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Egress ネットワークファイアウォールの作成時に EgressFirewall オブジェクトのコピーを保存しなかった場合には、以下のコマンドを入力してコピーを作成します。
oc get -n <project> egressfirewall <name> -o yaml > <filename>.yaml
$ oc get -n <project> egressfirewall <name> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <project>
をプロジェクトの名前に置き換えます。<name>
をオブジェクトの名前に置き換えます。<filename>
をファイルの名前に置き換え、YAML を保存します。ポリシールールに変更を加えたら、以下のコマンドを実行して EgressFirewall オブジェクトを置き換えます。
<filename>
を、更新された EgressFirewall オブジェクトを含むファイルの名前に置き換えます。oc replace -f <filename>.yaml
$ oc replace -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. プロジェクトからの Egress ファイアウォールの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトから Egress ファイアウォールを削除して、OpenShift Container Platform クラスター外に出るプロジェクトからネットワークトラフィックに対するすべての制限を削除できます。
5.3.1. EgressFirewall オブジェクトの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトから Egress ファイアウォールを削除できます。
前提条件
- OVN-Kubernetes ネットワークプラグインを使用するクラスター。
-
OpenShift CLI (
oc
) がインストールされている。 - クラスター管理者としてクラスターにログインする必要があります。
手順
プロジェクトの EgressFirewall オブジェクトの名前を検索します。
<project>
をプロジェクトの名前に置き換えます。oc get -n <project> egressfirewall
$ oc get -n <project> egressfirewall
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力し、EgressFirewall オブジェクトを削除します。
<project>
をプロジェクトの名前に、<name>
をオブジェクトの名前に置き換えます。oc delete -n <project> egressfirewall <name>
$ oc delete -n <project> egressfirewall <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. プロジェクトの Egress ファイアウォールの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OpenShift Container Platform クラスター外に出る Egress トラフィックを制限するプロジェクトの Egress ファイアウォールを作成できます。
5.4.1. Egress ファイアウォールのプロジェクトでの機能 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Egress ファイアウォール を使用して、一部またはすべての Pod がクラスター内からアクセスできる外部ホストを制限できます。Egress ファイアウォールポリシーは以下のシナリオをサポートします。
- Pod の接続を内部ホストに制限し、パブリックインターネットへの接続を開始できないようにする。
- Pod の接続をパブリックインターネットに制限し、OpenShift Container Platform クラスター外にある内部ホストへの接続を開始できないようにする。
- Pod は OpenShift Container Platform クラスター外の指定された内部サブネットまたはホストにアクセスできません。
- Pod は特定の外部ホストにのみ接続することができます。
たとえば、指定された IP 範囲へのあるプロジェクトへのアクセスを許可する一方で、別のプロジェクトへの同じアクセスを拒否することができます。または、アプリケーション開発者が Python pip ミラーから更新するのを制限し、承認されたソースからのみ更新が行われるように強制することもできます。
Egress ファイアウォールは、ホストネットワークの namespace には適用されません。ホストネットワークが有効になっている Pod は、Egress ファイアウォールルールの影響を受けません。
EgressFirewall カスタムリソース (CR) オブジェクトを作成して Egress ファイアウォールポリシーを設定します。Egress ファイアウォールは、以下のいずれかの基準を満たすネットワークトラフィックと一致します。
- CIDR 形式の IP アドレス範囲。
- IP アドレスに解決する DNS 名
- ポート番号
- プロトコル。TCP、UDP、および SCTP のいずれかになります。
Egress ファイアウォールに 0.0.0.0/0
の拒否ルールが含まれる場合、OpenShift Container Platform API サーバーへのアクセスはブロックされます。API サーバーに接続するには、IP アドレスごとに許可ルールを追加するか、Egress ポリシールールで nodeSelector
タイプの許可ルールを使用する必要があります。
次の例は、API サーバーへのアクセスを確保するために必要な Egress ファイアウォールルールの順序を示しています。
API サーバーの IP アドレスを見つけるには、oc get ep kubernetes -n default
を実行します。
詳細は、BZ#1988324 を参照してください。
Egress ファイアウォールルールは、ルーターを通過するトラフィックには適用されません。ルート CR オブジェクトを作成するパーミッションを持つユーザーは、禁止されている宛先を参照するルートを作成することにより、Egress ファイアウォールポリシールールをバイパスできます。
5.4.1.1. Egress ファイアウォールの制限 リンクのコピーリンクがクリップボードにコピーされました!
Egress ファイアウォールには以下の制限があります。
- 複数の EgressFirewall オブジェクトを持つプロジェクトはありません。
- プロジェクトごとに、最大 8,000 個のルールを持つ EgressFirewall オブジェクトを最大 1 つ定義できます。
- Red Hat OpenShift Networking の共有ゲートウェイモードで OVN-Kubernetes ネットワークプラグインを使用している場合に、リターン Ingress 応答は Egress ファイアウォールルールの影響を受けます。送信ファイアウォールルールが受信応答宛先 IP をドロップすると、トラフィックはドロップされます。
これらの制限のいずれかに違反すると、プロジェクトの Egress ファイアウォールが壊れます。その結果、すべての外部ネットワークトラフィックがドロップされ、組織にセキュリティーリスクが生じる可能性があります。
Egress ファイアウォールリソースは、kube-node-lease
、kube-public
、kube-system
、openshift
、openshift-
プロジェクトで作成できます。
5.4.1.2. Egress ポリシールールのマッチング順序 リンクのコピーリンクがクリップボードにコピーされました!
Egress ファイアウォールポリシールールは、最初から最後へと定義された順序で評価されます。Pod からの Egress 接続に一致する最初のルールが適用されます。この接続では、後続のルールは無視されます。
5.4.1.3. DNS (Domain Name Server) 解決の仕組み リンクのコピーリンクがクリップボードにコピーされました!
Egress ファイアウォールポリシールールのいずれかで DNS 名を使用する場合、ドメイン名の適切な解決には、以下の制限が適用されます。
- ドメイン名の更新は、Time-to-Live (TTL) 期間に基づいてポーリングされます。デフォルトで、期間は 30 分です。Egress ファイアウォールコントローラーがローカルネームサーバーでドメイン名をクエリーする場合に、応答に 30 分未満の TTL が含まれる場合、コントローラーは DNS 名の期間を返される値に設定します。それぞれの DNS 名は、DNS レコードの TTL の期限が切れた後にクエリーされます。
- Pod は、必要に応じて同じローカルネームサーバーからドメインを解決する必要があります。そうしない場合、Egress ファイアウォールコントローラーと Pod によって認識されるドメインの IP アドレスが異なる可能性があります。ホスト名の IP アドレスが異なる場合、Egress ファイアウォールは一貫して実行されないことがあります。
- Egress ファイアウォールコントローラーおよび Pod は同じローカルネームサーバーを非同期にポーリングするため、Pod は Egress コントローラーが実行する前に更新された IP アドレスを取得する可能性があります。これにより、競合状態が生じます。この現時点の制限により、EgressFirewall オブジェクトのドメイン名の使用は、IP アドレスの変更が頻繁に生じないドメインの場合にのみ推奨されます。
Egress ファイアウォールポリシーで DNS 名を使用しても、CoreDNS を介したローカル DNS 解決には影響しません。
ただし、Egress ファイアウォールポリシーでドメイン名を使用し、外部 DNS サーバーで関連する Pod の DNS 解決を処理する場合は、DNS サーバーの IP アドレスへのアクセスを許可する Egress ファイアウォールルールを含める必要があります。
5.4.1.3.1. DNS 解決とワイルドカードドメイン名の解決の改善 リンクのコピーリンクがクリップボードにコピーされました!
DNS レコードに関連付けられた IP アドレスが頻繁に変更される場合や、Egress ファイアウォールポリシールールでワイルドカードドメイン名を指定する必要がある場合もあります。
このような状況では、OVN-Kubernetes クラスターマネージャーは、Egress ファイアウォールポリシールールで使用される一意の DNS 名ごとに DNSNameResolver
カスタムリソースオブジェクトを作成します。このカスタムリソースには次の情報が保存されます。
Egress ファイアウォールルールの DNS 解決の改善は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
DNSNameResolver
CR 定義の例
- 1
- DNS 名。これは、標準の DNS 名またはワイルドカード DNS 名のいずれかになります。ワイルドカード DNS 名の場合、DNS 名解決情報には、ワイルドカード DNS 名に一致するすべての DNS 名が含まれます。
- 2
spec.name
フィールドに一致する解決された DNS 名。spec.name
フィールドにワイルドカード DNS 名が含まれている場合、解決時にワイルドカード DNS 名と一致する標準 DNS 名を含む複数のdnsName
エントリーが作成されます。ワイルドカード DNS 名も正常に解決できる場合は、このフィールドにはワイルドカード DNS 名も保存されます。- 3
- DNS 名に関連付けられている現在の IP アドレス。
- 4
- 最後の Time-to-Live (TTL) 期間。
- 5
- 最後のルックアップ時刻。
DNS 解決中に、クエリー内の DNS 名が DNSNameResolver
CR で定義された名前と一致する場合、CR status
フィールドで以前の情報がそれに応じて更新されます。DNS ワイルドカード名のルックアップが失敗した場合、デフォルトの TTL である 30 分後に要求が再試行されます。
OVN-Kubernetes クラスターマネージャーは、EgressFirewall
カスタムリソースオブジェクトの更新を監視し、更新が発生すると、それらの Egress ファイアウォールポリシーに関連付けられた DNSNameResolver
CR を作成、変更、または削除します。
DNSNameResolver
カスタムリソースを直接変更しないでください。これにより、Egress ファイアウォールの望ましくない動作が発生する可能性があります。
5.4.2. EgressFirewall カスタムリソース (CR) オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
Egress ファイアウォールのルールを 1 つ以上定義できます。ルールは、ルールが適用されるトラフィックを指定して Allow
ルールまたは Deny
ルールのいずれかになります。
以下の YAML は EgressFirewall CR オブジェクトを説明しています。
EgressFirewall オブジェクト
5.4.2.1. EgressFirewall ルール リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は Egress ファイアウォールルールオブジェクトを説明しています。ユーザーは、CIDR 形式の IP アドレス範囲またはドメイン名を選択するか、nodeSelector
を使用して、送信トラフィックを許可または拒否できます。egress
スタンザは、単一または複数のオブジェクトの配列を予想します。
Egress ポリシールールのスタンザ
- 1
- ルールのタイプ。値には
Allow
またはDeny
のいずれかを指定する必要があります。 - 2
cidrSelector
フィールドまたはdnsName
フィールドを指定する Egress トラフィックのマッチングルールを記述するスタンザ。同じルールで両方のフィールドを使用することはできません。- 3
- CIDR 形式の IP アドレス範囲。
- 4
- DNS ドメイン名。
- 5
- ラベルは、ユーザーが定義するキーと値のペアです。ラベルは Pod などのオブジェクトに添付されます。
nodeSelector
を使用すると、1 つ以上のノードラベルを選択して、Pod に添付できます。 - 6
- オプション: ルールのネットワークポートおよびプロトコルのコレクションを記述するスタンザ。
ポートスタンザ
ports: - port: <port> protocol: <protocol>
ports:
- port: <port>
protocol: <protocol>
5.4.2.2. EgressFirewall CR オブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、複数の Egress ファイアウォールポリシールールを定義します。
- 1
- Egress ファイアウォールポリシールールオブジェクトのコレクション。
次の例では、トラフィックが TCP プロトコルおよび宛先ポート 80
または任意のプロトコルおよび宛先ポート 443
のいずれかを使用している場合に、IP アドレス 172.16.1.1/32
のホストへのトラフィックを拒否するポリシールールを定義します。
5.4.2.3. EgressFirewall の nodeSelector の例 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、nodeSelector
を使用して、ラベルを指定することにより、クラスター内のノードへの Egress トラフィックを許可または拒否できます。ラベルは、1 つ以上のノードに適用できます。以下は、region=east
ラベルを使用した例です。
ノード IP アドレスごとに手動でルールを追加する代わりに、ノードセレクターを使用して、Egress ファイアウォールの背後にある Pod がホストネットワーク Pod にアクセスできるようにするラベルを作成します。
5.4.3. Egress ファイアウォールポリシーオブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトの Egress ファイアウォールポリシーオブジェクトを作成できます。
プロジェクトに EgressFirewall オブジェクトがすでに定義されている場合、既存のポリシーを編集して Egress ファイアウォールルールを変更する必要があります。
前提条件
- OVN-Kubernetes ネットワークプラグインを使用するクラスター。
-
OpenShift CLI (
oc
) がインストールされている。 - クラスター管理者としてクラスターにログインする必要があります。
手順
ポリシールールを作成します。
-
<policy_name>.yaml
ファイルを作成します。この場合、<policy_name>
は Egress ポリシールールを記述します。 - 作成したファイルで、Egress ポリシーオブジェクトを定義します。
-
以下のコマンドを入力してポリシーオブジェクトを作成します。
<policy_name>
をポリシーの名前に、<project>
をルールが適用されるプロジェクトに置き換えます。oc create -f <policy_name>.yaml -n <project>
$ oc create -f <policy_name>.yaml -n <project>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、egressfirewall.k8s.ovn.org/v1 名と
作成された
ステータスが一覧表示されます。-
オプション: 後に変更できるように
<policy_name>.yaml
ファイルを保存します。
第6章 IPsec 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
IPsec を有効にすると、ノード間の内部 Pod 間のクラスタートラフィックと、Pod とクラスター外部の IPsec エンドポイント間の外部トラフィックの両方を暗号化できます。OVN-Kubernetes クラスターネットワーク上のノード間のすべての Pod 間ネットワークトラフィックが、トランスポートモード の IPsec で暗号化されます。
IPsec はデフォルトで無効にされています。クラスターのインストール中またはインストール後に IPsec を有効にできます。クラスターのインストールの詳細は、OpenShift Container Platform インストールの概要 を参照してください。
libreswan
および NetworkManager-libreswan
パッケージの OpenShift Container Platform バージョンが異なる場合にクラスターを OpenShift Container Platform 4.20 にアップグレードすると、2 回連続してコンピュートノードの再起動操作が発生します。最初の再起動では、Cluster Network Operator (CNO) が IPsec 設定をコンピューティングノードに適用します。2 回目の再起動では、Machine Config Operator (MCO) が最新のマシン設定をクラスターに適用します。
CNO と MCO の更新を 1 つのノードの再起動に結合するには、次のタスクを実行します。
-
クラスターをアップグレードする前に、コンピュートノードをグループ化する
MachineConfigPools
カスタムリソース (CR) でpaused
パラメーターをtrue
に設定します。 -
クラスターをアップグレードした後、パラメーターを
false
に設定します。
詳細は、コントロールプレーンのみの更新の実行 を参照してください。
OpenShift Container Platform クラスター上の IPsec には次のサポート制限があります。
- IBM Cloud® では、IPsec は NAT-T のみをサポートします。このプラットフォームでは、Encapsulating Security Payload (ESP) はサポートされていません。
- クラスターが Red Hat OpenShift Container Platform の Hosted Control Plane を使用している場合、IPsec は、Pod 間のトラフィックや外部ホストへのトラフィックの IPsec 暗号化でサポートされません。
- 1 つ以上のネットワークインターフェイスが Open vSwitch (OVS) に接続されている場合、ネットワークインターフェイスでの ESP ハードウェアオフロードの使用はサポートされません。クラスターに対して IPsec を有効にすると、OVS に接続されたインターフェイスで IPsec が使用されるようになります。デフォルトでは、OpenShift Container Platform は、OVS に接続されたすべてのインターフェイスで ESP ハードウェアオフロードを無効にします。
- OVS に接続されていないネットワークインターフェイスに対して IPsec を有効にした場合、クラスター管理者は、OVS に接続されていない各インターフェイスで ESP ハードウェアオフロードを手動で無効にする必要があります。
-
IPsec は Red Hat Enterprise Linux (RHEL) コンピュートノードではサポートされていません。これは、各コンピュートノードに存在するホストと
ovn-ipsec
コンテナー間のlibreswan
非互換性の問題が原因です。(OCPBUGS-53316) を参照してください。
次のリストは、IPsec ドキュメントの主要なタスクの概要を示しています。
- クラスターのインストール後に IPsec を有効または無効にする
- クラスターと外部ホスト間のトラフィックの IPsec 暗号化を設定する
- IPsec が異なるノード上の Pod 間のトラフィックを暗号化することを確認する
6.1. 動作モード リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターで IPsec を使用する場合、以下の動作モードから選択できます。
Mode | 説明 | デフォルト |
---|---|---|
| トラフィックは暗号化されません。これはクラスターのデフォルトです。 | はい |
| Pod 間のトラフィックが、「Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ」の説明のとおりに暗号化されます。IPsec に必要な設定手順を完了すると、外部ノードへのトラフィックを暗号化できます。 | いいえ |
| IPsec に必要な設定手順を完了すると、外部ノードへのトラフィックを暗号化できます。 | いいえ |
6.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
外部ホストへのトラフィックを暗号化するために IPsec をサポートする場合は、次の前提条件が満たされていることを確認してください。
-
OVN-Kubernetes ネットワークプラグインが、ローカルゲートウェイモード (
ovnKubernetesConfig.gatewayConfig.routingViaHost=true
) で設定されている。 NMState Operator がインストールされている。この Operator は、IPsec 設定を指定するために必要です。詳細は、Kubernetes NMState Operator を参照してください。
注記NMState Operator は、Google Cloud Platform (GCP) で IPsec を設定する場合にのみサポートされます。
-
Butane ツール (
butane
) がインストールされている。Butane をインストールするには、Butane のインストール を参照してください。
これらの前提条件は、証明書をホストの NSS データベースに追加するために、および外部ホストと通信するように IPsec を設定するために必要です。
6.3. IPsec が有効になっている場合のネットワーク接続要件 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターのコンポーネントが通信できるように、マシン間のネットワーク接続を設定する必要があります。すべてのマシンではクラスターの他のすべてのマシンのホスト名を解決できる必要があります。
プロトコル | ポート | 説明 |
---|---|---|
UDP |
| IPsec IKE パケット |
| IPsec NAT-T パケット | |
ESP | 該当なし | IPsec Encapsulating Security Payload (ESP) |
6.4. Pod 間のトラフィックの IPsec 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
Pod 間のトラフィックの IPsec 暗号化は、次のセクションで、暗号化される Pod 間のトラフィック、使用される暗号化プロトコルの種類、および X.509 証明書の処理の仕組みを説明します。以下のセクションは、クラスターと外部ホスト間の IPsec 暗号化には適用されません。この種の暗号化は、特定の外部ネットワークインフラストラクチャーに合わせて手動で設定する必要があります。
6.4.1. Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ リンクのコピーリンクがクリップボードにコピーされました!
IPsec を有効にすると、Pod 間の以下のネットワークトラフィックフローのみが暗号化されます。
- クラスターネットワーク上の複数の異なるノードの Pod 間のトラフィック
- ホストネットワークの Pod からクラスターネットワーク上の Pod へのトラフィック
以下のトラフィックフローは暗号化されません。
- クラスターネットワーク上の同じノードの Pod 間のトラフィック
- ホストネットワーク上の Pod 間のトラフィック
- クラスターネットワークの Pod からホストネットワークの Pod へのトラフィック
暗号化されていないフローと暗号化されていないフローを以下の図に示します。
6.4.2. 暗号化プロトコルおよび IPsec モード リンクのコピーリンクがクリップボードにコピーされました!
使用する暗号化は AES-GCM-16-256
です。整合性チェック値 (ICV) は 16
バイトです。鍵の長さは 256
ビットです。
使用される IPsec モードは トランスポートモード です。これは、元のパケットの IP ヘッダーに Encapsulated Security Payload (ESP) ヘッダーを追加してパケットデータを暗号化することで、エンドツーエンドの通信を暗号化するモードです。OpenShift Container Platform は現在、Pod 間通信に IPsec Tunnel モード を使用したり、サポートしたりしません。
6.4.3. セキュリティー証明書の生成およびローテーション リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は、暗号化用に IPsec によって使用される自己署名の X.509 認証局 (CA) を生成します。各ノードの証明書署名要求 (CSR) は、CNO によって自動的に満たされます。
この CA は 10 年間有効です。個別のノード証明書は 5 年間有効で、4 年半が経過すると自動的にローテーションされます。
6.5. 外部トラフィックの IPsec 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、TLS 証明書を使用した外部ホストへのトラフィックの IPsec 暗号化をサポートします。TLS 証明書は管理者が提供する必要があります。
6.5.1. サポート対象のプラットフォーム リンクのコピーリンクがクリップボードにコピーされました!
この機能は次のプラットフォームでサポートされています。
- ベアメタル
- Google Cloud Platform (GCP)
- Red Hat OpenStack Platform (RHOSP)
- VMware vSphere
Red Hat Enterprise Linux (RHEL) ワーカーノードがある場合、これらのプラットフォームは外部トラフィックの IPsec 暗号化をサポートしません。
クラスターが Red Hat OpenShift Container Platform の Hosted Control Plane を使用している場合、外部ホストへのトラフィックを暗号化するための IPsec の設定はサポートされません。
6.5.2. 制限事項 リンクのコピーリンクがクリップボードにコピーされました!
次の禁止事項が遵守されていることを確認してください。
- 外部トラフィックの IPsec を設定する場合、IPv6 設定は現在 NMState Operator によってサポートされません。
-
提供する証明書バンドル内の証明書共通名 (CN) には、接頭辞
ovs_
を指定できません。この名前は、各ノードのネットワークセキュリティーサービス (NSS) データベース内の Pod 間の IPsec CN 名と競合する可能性があるためです。
6.6. IPsec 暗号化の有効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Pod 間の IPsec 暗号化、クラスターと外部 IPsec エンドポイント間の IPsec 暗号化を有効にできます。
次のいずれかのモードで IPsec を設定できます。
-
Full
: Pod 間のトラフィックおよび外部トラフィックの暗号化 -
External
: 外部トラフィックの暗号化
IPsec を Full
モードで設定する場合は、「外部トラフィックの IPsec 暗号化の設定」手順も完了する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
クラスター MTU のサイズを
46
バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを設けている。
手順
IPsec 暗号化を有効にするには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 外部ホストへのトラフィックを暗号化するには
External
を指定します。Pod 間のトラフィックを暗号化し、必要に応じて外部ホストへのトラフィックを暗号化するにはFull
を指定します。デフォルトでは、IPsec は無効になっています。
- 「外部トラフィックの IPsec 暗号化の設定」手順を完了して、IPsec を使用して外部トラフィックを暗号化します。
検証
OVN-Kubernetes データプレーン Pod の名前を見つけるには、次のコマンドを入力します。
oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
$ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターで IPsec が有効になっていることを確認します。
注記クラスター管理者は、IPsec を
Full
モードで設定する際に、クラスターの Pod 間で IPsec が有効にしたことを確認できます。この手順では、クラスターと外部ホストの間で IPsec が機能しているかどうかは検証されません。oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
<XXXXX&
gt; は、前の手順の Pod の文字のランダムなシーケンスを指定します。コマンドの出力が成功すると、ステータスが
true
と表示されます。
6.7. 外部トラフィックの IPsec 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IPsec を使用して外部トラフィックを暗号化するには、PKCS#12 証明書の提供を含め、ネットワークインフラストラクチャーに IPsec を設定する必要があります。この手順では Butane を使用してマシン設定を作成するため、butane
コマンドがインストールされている必要があります。
マシン設定を適用した後、Machine Config Operator はクラスター内の影響を受けるノードを再起動し、新しいマシン設定をロールアウトします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
ローカルコンピューターに
butane
ユーティリティーがインストールされている。 - NMState Operator がクラスターにインストールされている。
-
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - IPsec エンドポイント用の既存の PKCS#12 証明書と PEM 形式の CA 証明書があります。
-
クラスターで
Full
またはExternal
モードの IPsec が有効になっている。 -
OVN-Kubernetes ネットワークプラグインが、ローカルゲートウェイモード (
ovnKubernetesConfig.gatewayConfig.routingViaHost=true
) で設定されている。
手順
NMState Operator ノードネットワーク設定ポリシーを使用して IPsec 設定を作成します。詳細は、IPsec VPN 実装としての Libreswan を参照してください。
IPsec エンドポイントであるクラスターノードの IP アドレスを特定するために、次のコマンドを入力します。
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のように、NMState Operator のノードネットワーク設定ポリシーを含む
ipsec-config.yaml
という名前のファイルを作成します。NodeNetworkConfigurationPolicy
オブジェクトの概要は、The Kubernetes NMState project を参照してください。NMState IPsec トランスポート設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 1
- ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
- 2
- ホスト上に作成するインターフェイスの名前を指定します。
- 3
- クラスター側の IPsec トンネルを終端するクラスターノードのホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN
[Subject Alternate Name]
と一致する必要があります。 - 4
- 外部ホスト名 (
host.example.com
など) を指定します。この名前は、提供した PKCS#12 証明書の SAN[Subject Alternate Name]
と一致する必要があります。 - 5
- 外部ホストの IP アドレス (
10.1.2.3/32
など) を指定します。
NMState IPsec トンネル設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
- 2
- ホスト上に作成するインターフェイスの名前を指定します。
- 3
- クラスター側の IPsec トンネルを終端するクラスターノードのホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN
[Subject Alternate Name]
と一致する必要があります。 - 4
- 外部ホスト名 (
host.example.com
など) を指定します。この名前は、提供した PKCS#12 証明書の SAN[Subject Alternate Name]
と一致する必要があります。 - 5
- 外部ホストの IP アドレス (
10.1.2.3/32
など) を指定します。
IPsec インターフェイスを設定するために、次のコマンドを入力します。
oc create -f ipsec-config.yaml
$ oc create -f ipsec-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の証明書ファイルを提供して、各ホストのネットワークセキュリティーサービス (NSS) データベースに追加します。これらのファイルは、後の手順で Butane 設定の一部としてインポートされます。
-
left_server.p12
: IPsec エンドポイントの証明書バンドル -
ca.pem
: 証明書に署名した認証局
-
証明書をクラスターに追加するためのマシン設定を作成します。
コントロールプレーンとワーカーノードの Butane 設定ファイルを作成するには、次のコマンドを入力します。
注記設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に
0
です。たとえば、4.17.0
です。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前の手順で作成した Butane ファイルをマシン設定に変換するには、以下のコマンドを入力します。
for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
$ for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
マシン設定をクラスターに適用するには、次のコマンドを入力します。
for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
$ for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Machine Config Operator (MCO) は各マシン設定プール内のマシンを更新するときに、各ノードを 1 つずつ再起動します。外部 IPsec 接続が使用可能になるまでは、すべてのノードが更新されるまで待つ必要があります。
以下のコマンドを実行してマシン設定プールのステータスを確認します。
oc get mcp
$ oc get mcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正常に更新されたノードには、
UPDATED=true
、UPDATING=false
、DEGRADED=false
のステータスがあります。注記デフォルトで、MCO はプールごとに一度に 1 つのマシンを更新するため、移行にかかる合計時間がクラスターのサイズと共に増加します。
IPsec マシン設定が正常にロールアウトされたことを確認するために、次のコマンドを入力します。
IPsec マシン設定の作成を確認します。
oc get mc | grep ipsec
$ oc get mc | grep ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントロールプレーンノードへの IPsec 拡張機能の適用を確認します。出力例は
2
を示しています。oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンピュートノードへの IPsec 拡張機能の適用を確認します。出力例は
2
を示しています。oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8. 外部 IPsec エンドポイントの IPsec 暗号化の無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、外部ホストへの既存の IPsec トンネルを削除できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
クラスターで
Full
またはExternal
モードの IPsec が有効になっている。
手順
次の YAML を使用して、
remove-ipsec-tunnel.yaml
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
name
- ノードネットワーク設定ポリシーの名前を指定します。
node_name
- 削除する IPsec トンネルが存在するノードの名前を指定します。
tunnel_name
- 既存の IPsec トンネルのインターフェイス名を指定します。
IPsec トンネルを削除するために、次のコマンドを入力します。
oc apply -f remove-ipsec-tunnel.yaml
$ oc apply -f remove-ipsec-tunnel.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.9. IPsec 暗号化の無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IPsec 暗号化を無効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
IPsec 暗号化を無効にするには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: IP パケットの IPsec ESP ヘッダーからのオーバーヘッドがなくなるため、クラスター MTU のサイズを
46
バイト増やすことができます。
6.10. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Enterprise Linux (RHEL) 10 での IPsec を使用した VPN の設定
- Butane のインストール
- OVN-Kubernetes Container Network Interface (CNI) ネットワークプラグインについて
- クラスターネットワークの MTU 変更
- Network [operator.openshift.io/v1]API
第7章 ゼロトラストネットワーク リンクのコピーリンクがクリップボードにコピーされました!
ゼロトラストは、すべてのインタラクションが信頼できない状態から始まるという前提に基づきセキュリティーアーキテクチャーを設計するアプローチです。これは、通信がファイアウォールの内側で開始されるかどうかに基づき信頼性を決定する従来のアーキテクチャーとは対照的です。より具体的には、ゼロトラストは、暗黙的信頼モデルと 1 回限りの認証に依存するセキュリティーアーキテクチャーのギャップを埋めようとします。
OpenShift Container Platform は、コンテナーやコンテナー内で実行されているソフトウェアを変更することなく、プラットフォーム上で実行されているコンテナーにゼロトラストネットワーク機能を追加できます。Red Hat は、コンテナーのゼロトラストネットワーキング機能をさらに強化できる製品もさらにいくつか提供しています。コンテナー内で実行されているソフトウェアを変更できる場合は、Red Hat がサポートする他のプロジェクトを使用して、さらに機能を追加できます。
以下は、ゼロトラストネットワークの対象となる機能の詳細です。
7.1. Root of Trust リンクのコピーリンクがクリップボードにコピーされました!
公開証明書と秘密鍵はゼロトラストネットワークにとって重要です。これらは、各コンポーネントを相互に識別し、認証し、トラフィックを保護するために使用されます。証明書は他の証明書によって署名され、ルート認証局 (CA) への信頼チェーンが存在します。ネットワークに参加するすべてが、信頼チェーンを検証できるように、最終的にルート CA の公開鍵を持っている必要があります。一般に公開されている場合、通常は世界的に知られているルート CA のセットであり、その鍵はオペレーティングシステムや Web ブラウザーなどとともに配布されます。ただし、プライベート CA の証明書がすべての関係者に配布されている場合、クラスターまたは企業向けにプライベート CA を実行できます。
活用方法:
- OpenShift Container Platform: OpenShift は、クラスターリソースの保護に使用される クラスター CA をインストール時に 作成します。ただし、OpenShift Container Platform は、クラスター内で サービス証明書 を作成して署名することもでき、そのクラスター CA バンドルを必要に応じて Pod に注入することもできます。OpenShift Container Platform によって作成および署名された サービス証明書 の有効期間 (TTL) は 26 カ月で、13 カ月ごとに自動的にローテーションされます。必要に応じて手動でローテーションすることも可能です。
- OpenShift cert-manager Operator: cert-manager を使用すると、外部の root of trust によって署名された鍵を要求できます。委譲された署名証明書を使用して実行する方法の他に、外部発行者と統合するために設定できる発行者が多数あります。cert-manager API は、ゼロトラストネットワーク内の他のソフトウェア (Red Hat OpenShift Service Mesh など) が必要な証明書を要求するために使用することも、お客様のソフトウェアが直接使用することも可能です。
7.2. トラフィック認証と暗号化 リンクのコピーリンクがクリップボードにコピーされました!
回線上のすべてのトラフィックが暗号化され、エンドポイントが識別可能になります。一例として、相互認証方式である Mutual TLS (mTLS) が挙げられます。
活用方法:
- OpenShift Container Platform: 透過的な Pod 間の IPsec を使用することで、トラフィックの送信元と宛先を IP アドレスで識別できます。Egress トラフィックを IPsec を使用して暗号化 する機能があります。egress IP 機能を使用することで、トラフィックのソース IP アドレスを使用して、クラスター内のトラフィックのソースを特定できます。
- Red Hat OpenShift Service Mesh: Pod から送信されるトラフィックを透過的に拡張して認証と暗号化を提供する強力な mTLS 機能 を提供します。
- OpenShift cert-manager Operator: カスタムリソース定義 (CRD) を使用して、プログラムが SSL/TLS プロトコルに使用するためにマウントできる証明書を要求します。
7.3. 識別と認証 リンクのコピーリンクがクリップボードにコピーされました!
CA を使用して証明書を作成できるようになると、それを使用して接続のもう一方の端 (ユーザーまたはクライアントマシン) のアイデンティティーを検証することで信頼関係を確立できるようになります。また、侵害された場合に使用を制限するために、証明書のライフサイクルを管理する必要もあります。
活用方法:
- OpenShift Container Platform: クライアントが信頼済みエンドポイントと通信していることを確認するためのクラスター署名付き サービス証明書。これには、サービスが SSL/TLS を使用し、クライアントが クラスター CA を使用することが必要です。クライアントアイデンティティーは他の手段で提供する必要があります。
- Red Hat Single Sign-On: エンタープライズユーザーディレクトリーまたはサードパーティーのアイデンティティープロバイダーとの要求認証インテグレーションを提供します。
- Red Hat OpenShift Service Mesh: mTLS への接続の 透過的なアップグレード、自動ローテーション、カスタム証明書の有効期限、JSON Web トークン (JWT) による要求認証。
- OpenShift cert-manager Operator: アプリケーションで使用する証明書の作成と管理。証明書は CRD により制御され、シークレットとしてマウントできます。また、cert-manager API と直接対話するようにアプリケーションを変更することもできます。
7.4. サービス間認可 リンクのコピーリンクがクリップボードにコピーされました!
リクエスト元のアイデンティティーに基づきサービスへのアクセスを制御できることが重要です。これはプラットフォームによって実行されるため、各アプリケーションで実装する必要はありません。これにより、ポリシーの監査と検査がより適切に行えるようになります。
活用方法:
-
OpenShift Container Platform: Kubernetes
NetworkPolicy
およびAdminNetworkPolicy
オブジェクトを使用して、プラットフォームのネットワーク層で分離を強制できます。 - Red Hat OpenShift Service Mesh: 標準の Istio オブジェクトおよび mTLS を使用してトラフィックの送信元と宛先を識別し、その情報に基づきポリシーを適用する、高度な L4 および L7 の トラフィック制御。
7.5. トランザクションレベルの検証 リンクのコピーリンクがクリップボードにコピーされました!
接続の識別および認証機能に加えて、個々のトランザクションへのアクセスを制御するのにも役立ちます。これには、ソースによるレート制限、可観測性、トランザクションが適切に形成されていることのセマンティック検証などが含まれます。
活用方法:
- Red Hat OpenShift Service Mesh: 要求の L7 検査、不正な HTTP 要求の拒否、トランザクションレベルの 可観測性およびレポート を行います。Service Mesh は、JWT を使用した 要求ベースの認証 も提供できます。
7.6. リスク評価 リンクのコピーリンクがクリップボードにコピーされました!
クラスター内のセキュリティーポリシーの数が増えるにつれ、ポリシーが許可および拒否する内容の可視化がますます重要になります。これらのツールを使用すると、クラスターセキュリティーポリシーの作成、可視化、管理が容易になります。
活用方法:
-
Red Hat OpenShift Service Mesh: OpenShift Web コンソール を使用して、Kubernetes の
NetworkPolicy
とAdminNetworkPolicy
、および OpenShift Networking のEgressFirewall
オブジェクトを作成および可視化します。 - Red Hat Advanced Cluster Security for Kubernetes: 高度な オブジェクトの可視化。
7.7. サイト全体のポリシーの施行と配布 リンクのコピーリンクがクリップボードにコピーされました!
クラスターにアプリケーションをデプロイした後、セキュリティールールを構成するすべてのオブジェクトを管理することが困難になります。サイト全体にポリシーを適用し、デプロイしたオブジェクトがポリシーに準拠しているかどうかを監査することが重要になります。これにより、定義された範囲内でユーザーとクラスター管理者に一部の権限を委譲できるようになり、必要に応じてポリシーの例外も許可されるようになります。
活用方法:
- Red Hat OpenShift Service Mesh: ポリシーオブジェクトを制御 し、制御を委譲する RBAC。
- Red Hat Advanced Cluster Security for Kubernetes: ポリシー適用 エンジン。
- Red Hat Advanced Cluster Management (RHACM) for Kubernetes: 一元的なポリシー制御。
7.8. 継続的かつ遡及的な評価のための可観測性 リンクのコピーリンクがクリップボードにコピーされました!
クラスターを実行した後は、トラフィックを観察し、トラフィックが定義したルールに準拠していることを確認する必要があります。これは侵入検知やフォレンジックのために重要であり、運用負荷管理にも役立ちます。
活用方法:
- Network Observability Operator: クラスター内の Pod やノードへのネットワーク接続に関する検査、モニタリング、アラートを可能にします。
- Red Hat Advanced Cluster Management (RHACM) for Kubernetes: プロセス実行、ネットワーク接続とフロー、権限昇格などのシステムレベルのイベントを監視、収集、評価します。クラスターのベースラインを決定し、異常なアクティビティーを検出して警告することができます。
- Red Hat OpenShift Service Mesh: Pod に出入りする トラフィックを監視 できます。
- Red Hat OpenShift 分散トレース プラットフォーム:適切にインストルメント化されたアプリケーションについては、マイクロサービスへのサブ要求に分割される特定のアクションに関連付けられたすべてのトラフィックを確認できます。これにより、分散アプリケーション内のボトルネックを特定できます。
7.9. エンドポイントセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
クラスター内のサービスを実行しているソフトウェアが侵害されていないことを確信できることが重要です。たとえば、認定されたイメージが信頼済みハードウェア上で実行されるようにし、エンドポイントの特性に基づいてエンドポイントとの間の接続のみを許可するポリシーを設定する必要がある場合があります。
活用方法:
- OpenShift Container Platform: Secureboot を使用すると、クラスター内のノードが信頼済みのソフトウェアを実行していることを確認できるため、プラットフォーム自体 (コンテナーランタイムを含む) が改ざんされていないことを確認できます。OpenShift Container Platform を、特定の署名で署名された イメージのみを実行するように設定できます。
- Red Hat Trusted Artifact Signer: 信頼済みビルドチェーンで使用でき、署名付きコンテナーイメージを生成できます。
7.10. クラスター外への信頼の拡張 リンクのコピーリンクがクリップボードにコピーされました!
クラスターによるサブドメインの CA 作成を許可することで、クラスター外部に信頼を拡張する必要がある場合があります。あるいは、クラスター内のワークロードアイデンティティーをリモートエンドポイントに証明する必要があることもあります。
活用方法:
- OpenShift cert-manager Operator: cert-manager を使用して委譲された CA を管理し、クラスターをまたいで、もしくは組織全体で信頼を分散できます。
- Red Hat OpenShift Service Mesh: SPIFFE を使用して、リモートまたはローカルクラスターで実行されているエンドポイントに、ワークロードのリモートアテステーションを提供できます。
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.