第2章 管理ネットワークポリシー
2.1. OVN-Kubernetes AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、AdminNetworkPolicy リソースを設定することで、namespace スコープの NetworkPolicy オブジェクトではオーバーライドできないクラスター全体の Ingress および Egress ルールを適用できます。これにより、マルチテナントの分離とプラットフォームセキュリティーに対する管理制御が維持されます。
2.1.1. AdminNetworkPolicy リンクのコピーリンクがクリップボードにコピーされました!
AdminNetworkPolicy (ANP) は、namespace が作成される前に Ingress および Egress ルールを確立するために定義できる、クラスタースコープのカスタムリソース定義 (CRD) です。ANP を使用して、テナントの NetworkPolicy オブジェクトが管理上の制御をオーバーライドできないようにすることができます。
AdminNetworkPolicy オブジェクトと NetworkPolicy オブジェクトの主な違いは、前者は管理者用でクラスタースコープであるのに対し、後者はテナント所有者用で namespace スコープであることです。
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 リソースを適用する namespace を指定します。
spec.ingress.name-
ingress.nameの名前を指定します。 spec.ingress.action-
ANP の Ingress ルールを指定します。ANP には Ingress ルールと Egress ルールの両方があります。
Pass、Deny、Allowの値を受け入れます。 spec.ingress.from.pods.namespaceSelector.matchLabels-
namespaceSelector.matchLabelsによって選択された namespace 内の Pod を Ingress ピアとして選択するには、podSelector.matchLabelsを指定します。 spec.egress.action-
ANP の Egress ルールを指定します。
Pass、Deny、Allowの値を受け入れます。
2.1.1.2. ルールの AdminNetworkPolicy アクション リンクのコピーリンクがクリップボードにコピーされました!
各 AdminNetworkPolicy (ANP) カスタムリソースルールの action フィールドは、Allow、Deny、Pass のいずれかに設定できます。これにより、OVN-Kubernetes の階層型 ACL は、下位層のネットワークポリシーが有効になる前に管理上の決定を適用できます。
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 から何も収集できません。
強力な Allow の例と組み合わせると、block-monitoring ANP は (Allow の例よりも) 優先度の値が低いため優先順位が高くなり、これにより restricted テナントが監視されることはなくなります。
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 オブジェクトを使用してメトリクスを収集する必要があるかどうかを選択できます。