|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
ポリシーの設定
特定のポリシーにおけるネームスペースの除外
デフォルトでは、ポリシーは`PolicyServer`が設定されているすべてのネームスペースに適用されます。 ポリシーを特定のネームスペースのみに適用したい場合は、各ネームスペースにいくつかの`AdmissionPolicies`をデプロイできます。
別のオプションは、`ClusterAdmissionPolicies`の`spec.namespaceSelector`を設定することで構成する方法です(CRDドキュメント参照)。`spec.namespaceSelector`は、オブジェクトの属するネームスペースがセレクターと一致するかどうかに基づき、そのオブジェクトにポリシーを適用するかを決定します。
例えば、以下は`kube-system`と`my-namespace`のネームスペースのみに適用されるポリシーです:
---
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: psa-enforcer-privileged-namespaces
spec:
module: registry://ghcr.io/kubewarden/policies/psa-label-enforcer:v1.0.3
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["namespaces"]
operations:
- CREATE
- UPDATE
mutating: true
namespaceSelector:
matchExpressions:
- key: "kubernetes.io/metadata.name"
operator: In
values: [kube-system, my-namespace]
settings:
modes:
enforce: "privileged"
こちらは、`kube-system`と`my-namespace`を除くすべてのネームスペースに適用されるポリシーです:
---
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: psa-enforcer-default-mode
spec:
module: registry://ghcr.io/kubewarden/policies/psa-label-enforcer:v1.0.3
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["namespaces"]
operations:
- CREATE
- UPDATE
mutating: true
namespaceSelector:
matchExpressions:
- key: "kubernetes.io/metadata.name"
operator: NotIn
values: [kube-system, my-namespace]
settings:
modes:
enforce: "restricted"
カスタム拒否メッセージ
ポリシーがリソースを拒否すると、ユーザーに表示されるメッセージはポリシーの作成者が記述したものです。時々、クラスターオペレーターはカスタム拒否メッセージを設定したい場合があります。例えば、これは内部ウィキを指し示したり、より具体的なエラーコードを提供するために使用できます。
`message`フィールドは、`ClusterAdmissionPolicy`および`AdmissionPolicy`タイプでこれを達成するために使用できます。
|
`ClusterAdmissionPolicyGroup`と`AdmissionPolicyGroup`はすでに同じように動作する`message`フィールドを持っています。 |
`message`フィールドは、クラスターオペレーターがポリシーによって返されるものを上書きするカスタム拒否メッセージを定義できるようにします。この構成を使用している場合、元の拒否メッセージは応答内の`causes`フィールドで確認できます。
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: pod-privileged-with-message
spec:
module: registry://ghcr.io/kubewarden/policies/pod-privileged:1.0.2
policyServer: default
mode: protect
message: "Nops! You cannot do that"
settings: {}
rules:
- apiGroups:
- ""
apiVersions:
- v1
resources:
- "*"
operations:
- CREATE
mutating: false
kubectl の詳細レベルを上げることで、拒否された admission リクエストの詳細を取得できます:
$ kubectl -v4 run pod-privileged2 --image=registry.k8s.io/pause --privileged
I0612 16:32:43.647601 48424 cert_rotation.go:137] Starting client certificate rotation controller
I0612 16:32:43.662550 48424 helpers.go:246] server response object: [{
"metadata": {},
"status": "Failure",
"message": "admission webhook \"clusterwide-pod-privileged-with-message.kubewarden.admission\" denied the request: Nops! You cannot do that",
"details": {
"causes": [
{
"message": "Privileged container is not allowed"
}
]
},
"code": 400
}]
ポリシーの結果をPolicyGroupでラップすることによって否定します。
場合によっては、ポリシーがまだ必要な逆のロジックを実装していないことがあります。
例えば、優先クラスのセットを拒否するために、`priority-class`ポリシーを使用したいとします。しかし、執筆時点では、`priority-class`ポリシーは許可リストのみをサポートしており、拒否リストはサポートしていません。
一般的なパターンとしては、ポリシーを`AdmissionPolicyGroup`または`ClusterAdmissionPolicyGroup`でラップし、その`spec.expression`内でポリシーの結果を否定します。
例えば、クラスター内で定義されているすべての優先クラスを、次のいずれか(low-priority、med-priority、high-priority)を除いてユーザーに使用させたいと仮定しましょう。
現在、ポリシー設定では、許可された優先クラスのリストのみを指定できます。次のグループポリシーはこの制限を克服します。
apiVersion: policies.kubewarden.io/v1
kind: AdmissionPolicyGroup
metadata:
name: priority-class-denylist
namespace: your-namespace # or use a CLusterAdmissionPolicyGroup and set spec.namespaceSelector
spec:
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations: ["CREATE", "UPDATE"]
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["replicationcontrollers"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["apps"]
apiVersions: ["v1"]
resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["batch"]
apiVersions: ["v1"]
resources: ["jobs", "cronjobs"]
operations: ["CREATE", "UPDATE"]
policies:
is_a_denied_priority_class:
module: ghcr.io/kubewarden/policies/priority-class-policy:v1.0.4
settings:
allowed_priority_classes:
- low-priority
- med-priority
- high-priority
expression: "!is_a_denied_priority_class()" # negated result
message: "the Pod is using a priorityClass that is not allowed"