第2章 管理ネットワークポリシー
2.1. OVN-Kubernetes AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、AdminNetworkPolicy リソースを設定することで、名前空間スコープの NetworkPolicy オブジェクトでは上書きできないクラスター全体の Ingress および Egress を適用できます。これにより、マルチテナントの分離とプラットフォームセキュリティーに対する管理制御が維持されます。
2.1.1. AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy (ANP) は、名前空間が作成される前に Ingress および Egress を確立するために定義できる、クラスタースコープのカスタムリソース定義 (CRD) です。ANP を使用すると、テナントの NetworkPolicy オブジェクトが管理上の制御を上書きできないようにすることができます。
AdminNetworkPolicy オブジェクト と NetworkPolicy オブジェクトの主な違いは、前者は管理者向けでクラスタースコープであるのに対し、後者はテナント所有者向けで名前空間スコープであるという点です。
ANP を使用すると、管理者は以下を指定できます。
-
評価の順序を決定する
priority値。値が小さいほど優先度が高くなります。 - ポリシーが適用される namespace (または namespace のセット) で構成される Pod のセット。
-
subjectへのすべての Ingress トラフィックに適用される Ingress ルールのリスト。 -
subjectからのすべての Egress トラフィックに適用される Egress ルールのリスト。
2.1.1.1. AdminNetworkPolicy の例 リンクのコピーリンクがクリップボードにコピーされました!
ANP の YAML ファイルの例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: sample-anp-deny-pass-rules
spec:
priority: 50
subject:
namespaces:
matchLabels:
kubernetes.io/metadata.name: example.name
ingress:
- name: "deny-all-ingress-tenant-1"
action: "Deny"
from:
- pods:
namespaceSelector:
matchLabels:
custom-anp: tenant-1
podSelector:
matchLabels:
custom-anp: tenant-1
egress:
- name: "pass-all-egress-to-tenant-1"
action: "Pass"
to:
- pods:
namespaceSelector:
matchLabels:
custom-anp: tenant-1
podSelector:
matchLabels:
custom-anp: tenant-1
各項目の説明:
metadata.name- ANP の名前を指定します。
spec.priority-
ANP の優先順位を指定します。クラスター内で、
0-99 の範囲の値を持つ最大 100 個の ANP をサポートします。範囲は最低値から最高値の順に読み取られるため、値が低いほど優先度が高くなります。同じ優先度で ANP を作成すると、どのポリシーが優先されるか保証されません。そのため、優先順位が意図したものになるように、異なる優先度で ANP を設定してください。 spec.subject.namespaces.matchLabels- ANP リソースを適用する名前空間を指定します。
仕様.イングレス名-
ingress.nameの名前を指定します。 仕様.イングレスアクション-
ANP のイングレスルールを指定します。ANP には Ingress ルールと Egress ルールの両方があります。
Pass、Deny、Allowの値を受け入れます。 spec.ingress.from.pods.namespaceSelector.matchLabels-
namespaceSelector.matchLabelsで選択された名前空間内の Pod をイングレスピアとして選択するために、podSelector.matchLabelsを指定します。 仕様の退出アクション-
ANP の Egress ルールを指定します。
Pass、Deny、Allowの値を受け入れます。
2.1.1.2. ルールの AdminNetworkPolicy アクション リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes の階層型 ACL は、下位層のネットワークポリシーが有効になる前に管理上の決定を適用するため、各 AdminNetworkPolicy (ANP) カスタムリソースルールの アクション フィールドを 許可、拒否、 通過のいずれかに設定できます。
OVN-Kubernetes は階層型 ACL を使用してネットワークトラフィックルールを評価するため、ANP CR を使用すると、管理者がルールを変更、削除、またはより高い優先度のルールを設定して上書きすることによってのみ変更できる強力なポリシールールを定義できます。
2.1.1.2.1. AdminNetworkPolicy の Allow の例 リンクのコピーリンクがクリップボードにコピーされました!
優先度 9 で定義されている次の ANP は、monitoring namespace からクラスター内の任意のテナント (他のすべての namespace) への Ingress トラフィックをすべて許可します。
強力な Allow ANP の YAML ファイルの例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: allow-monitoring
spec:
priority: 9
subject:
namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well.
ingress:
- name: "allow-ingress-from-monitoring"
action: "Allow"
from:
- namespaces:
matchLabels:
kubernetes.io/metadata.name: monitoring
# ...
これは、関係者全員がオーバーライドできない強力な Allow ANP の例です。テナントは、NetworkPolicy オブジェクトを使用してテナント自体の監視をブロックすることはできません。また、監視を実行するテナントが監視の対象を決定することもできません。
2.1.1.2.2. AdminNetworkPolicy の Deny の例 リンクのコピーリンクがクリップボードにコピーされました!
優先度 5 で定義されている次の ANP は、monitoring namespace から制限付きテナント (security: restricted ラベルを持つ namespace) への Ingress トラフィックをすべてブロックします。
強力な Deny ANP の YAML ファイルの例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: block-monitoring
spec:
priority: 5
subject:
namespaces:
matchLabels:
security: restricted
ingress:
- name: "deny-ingress-from-monitoring"
action: "Deny"
from:
- namespaces:
matchLabels:
kubernetes.io/metadata.name: monitoring
# ...
これは、関係者全員がオーバーライドできない強力な Deny ANP です。制限付きテナントの所有者は、トラフィックの監視を許可する権限を自分自身に付与できません。また、インフラストラクチャーの監視サービスは、これらの機密性の高い namespace から何も収集できません。
強力な 許可の 例と組み合わせると、ブロック監視 ANP の優先度値が低くなり、優先順位が高くなるため、制限付き テナントが監視されることは決してなくなります。
2.1.1.2.3. AdminNetworkPolicy の Pass の例 リンクのコピーリンクがクリップボードにコピーされました!
優先度 7 で定義されている次の ANP は、monitoring namespace から内部インフラストラクチャーテナント (security: internal ラベルを持つ namespace) への Ingress トラフィックをすべて ACL の階層 2 に渡し、トラフィックが namespace の NetworkPolicy オブジェクトによって評価されるようにします。
強力な Pass ANP の YAML ファイルの例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: pass-monitoring
spec:
priority: 7
subject:
namespaces:
matchLabels:
security: internal
ingress:
- name: "pass-ingress-from-monitoring"
action: "Pass"
from:
- namespaces:
matchLabels:
kubernetes.io/metadata.name: monitoring
# ...
この例は、テナント所有者によって定義された NetworkPolicy オブジェクトに決定を委譲する強力な Pass アクション ANP です。この pass-monitoring ANP により、internal セキュリティーレベルでグループ化されたすべてのテナント所有者は、インフラストラクチャーの監視サービスによって namespace スコープの NetworkPolicy オブジェクトを使用してメトリクスを収集する必要があるかどうかを選択できます。