|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
ValidatingAdmissionPolicyの再利用
Kubernetesの標準https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy[Validatingポリシー]は、以下のリソースで構成されています:
-
ValidatingAdmissionPolicy:CELのロジックを説明します。オプションで、`spec.paramKind`内のパラメータも受け入れます。
-
ValidatingAdmissionPolicyBinding:ポリシーのスコープを設定します。
具体的な例を見てみましょう。これらおよび他のものは、SUSE Security Admission Controllerの`cel-policy`とともに、少ない労力で再利用できます。
ValidatingAdmissionPolicy
以下のValidatingAdmissionPolicyは、https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy/#creating-a-validatingadmissionpolicy[Kubernetesのドキュメント]をもとに作られています。
このポリシーは、デプロイメントのReplicasの数がデフォルト値`maxreplicas`で5以下かどうかをチェックします。ユーザーは、ネームスペースまたはデプロイメントごとにこのデフォルトを上書きし、パラメータを使用してより小さい数を選択できます。
これは`ValidatingAdmissionPolicyBinding`にバインドされています。したがって、`environment`が`test`に設定されているラベルを持つネームスペースにのみ影響します。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: "replicalimit-policy.example.com"
spec:
failurePolicy: Fail # (1)
matchConstraints: # (2)
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
variables: # (3)
- name: maxReplicas # hardcoded global default
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: "replicalimit-binding-test.example.com"
spec:
policyName: "replicalimit-policy.example.com"
validationActions: [Deny] # (7)
matchResources: # (8)
namespaceSelector:
matchLabels:
environment: test
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
ここでは、同等のAdmission Controllerポリシーがあります:
Admission Controllerの`cel-policy`
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
annotations:
io.kubewarden.policy.category: Resource validation # (9)
io.kubewarden.policy.severity: low # (9)
name: "cel-policy-replica-example"
spec:
module: registry://ghcr.io/kubewarden/policies/cel-policy:v1.4.0
failurePolicy: Fail # (6). Webhook behavior. Defaults to "Fail"
mode: protect # (7). Defaults to "protect"
rules: # (2)
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
contextAwareResources: # (10). Fine-grained perms for accessing resources
- apiVersion: v1
kind: ConfigMap
settings:
failurePolicy: Fail # (1). CEL behavior. Defaults to "Fail"
variables: # (3)
- name: "replicas"
expression: "object.spec.replicas"
- name: maxReplicas
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
backgroundAudit: true # (9). Defaults to "true"
namespaceSelector: # (8)
matchLabels:
environment: test
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
YAMLマニフェストの両方にコメントされた番号に注意してください。それらを詳しく説明しましょう:
| # | VAPフィールド | `cel-policy`フィールド | 説明 |
|---|---|---|---|
1 |
|
|
CELの動作、CEL式が偽に評価される場合、CELランタイムエラーが発生する場合、または無効または誤って構成されたCELがある場合。例えば、偽を返すCEL式、パラメータの欠如、または変数の欠如です。(6)と混同しないでください。 |
2 |
|
|
両方は、ポリシーが適用されるリソースの種類を通知する同じhttps://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#rulewithoperations-v1-admissionregistration[RuleWithOperations]を受け入れます。 |
3 |
|
|
Admission Controllerの`cel-policy`では、変数を定義する式は`settings.variables`にあります。それを除けば、同等です。 |
4 |
|
|
Admission Controllerの`cel-policy`では、パラメータ定義は`settings.paramKind`、`settings.paramRef`にあります。それを除けば、同等です。 |
5 |
|
|
Admission Controllerの`cel-policy`では、検証を定義する式は`settings.validations`にあります。それを除けば、同等です。 |
6 |
|
|
Webhookの動作、Kubernetes API Webhookエラーまたはタイムアウト、またはmatchConditionsの評価について。(1)と混同しないでください。 |
7 |
|
|
`mode`には`protect`と`monitor`のオプションがあります。監査はAdmission Controllerでより多機能です、(9)を参照してください。 |
8 |
|
|
セレクターを使用して制約を定義する方法。Admission Controllerのポリシーは、それらを`namespaceSelector`や`objectSelector`として持っています。 |
9 |
|
|
Admission Controller フィールドを使用して、Audit Scanner のポリシー使用を設定し、そのカテゴリと重大度を OpenReports に設定します。 |
10 |
|
`contextAwareResources`権限 |
Admission Controllerのポリシーは、クラスターリソースの読み取りに対して細かい権限を持っています。ここでは、パラメータを読み取るために使用されます。 |
|
|
Admission Controllerのポリシーには |
|
|
Admission Controller のみの機能 |
他の機能については、チュートリアル CEL の残りの例を参照してください。 |
|
`kwctl`ツールを使用して、VAP ポリシーを Admission Controller に移行できます。 この VAP 移行ハウツー では、どのように行うかを説明しています。 |
まだ実装されていない同等物
まだ実装されていない VAP 機能があります。それを楽しみにしている場合は、お問い合わせください。以下の要素で構成されています。
-
VAP 認可ライブラリ。
-
VAP 監査注釈 (ValidatingAdmissionPolicy
spec.auditAnnotationsが ValidatingAdmissionPolicyBindingspec.validationActionsに "Audit" に設定されているとき)。 これは Admission Controller の Audit Scanner と PolicyReports によってカバーされており、クラスター内のリソースを監査することができます。 -
CEL リソース制約と推定コスト制限。 これは Admission Controller の一般的な ポリシータイムアウト保護 によってカバーされています。
ポリシーの適用
通常通り、マニフェストをインスタンス化することでポリシーをデプロイできます:
$ kubectl apply -f ./cel-policy-example.yaml
そして、デプロイメントをインスタンス化することでテストします:
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: test
labels:
environment: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
EOF
namespace/test created
Error from server: error when creating "STDIN":
admission webhook "clusterwide-cel-policy-replica-example.kubewarden.admission" denied the request:
The number of replicas must be less than or equal to 5