mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-31 03:45:17 +00:00
chore: add chainsaw tests for policy based webhook configuration (#9561)
* add chainsaw tests Signed-off-by: ShutingZhao <shuting@nirmata.com> * add chainsaw tests Signed-off-by: ShutingZhao <shuting@nirmata.com> * update policy Signed-off-by: ShutingZhao <shuting@nirmata.com> * add delay Signed-off-by: ShutingZhao <shuting@nirmata.com> * add debug steps Signed-off-by: ShutingZhao <shuting@nirmata.com> * attempt fix Signed-off-by: ShutingZhao <shuting@nirmata.com> * attempt fix Signed-off-by: ShutingZhao <shuting@nirmata.com> --------- Signed-off-by: ShutingZhao <shuting@nirmata.com>
This commit is contained in:
parent
cfc9683033
commit
273a0a52f9
13 changed files with 233 additions and 3 deletions
7
.github/workflows/conformance.yaml
vendored
7
.github/workflows/conformance.yaml
vendored
|
@ -234,7 +234,7 @@ jobs:
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: ./.github/actions/kyverno-logs
|
uses: ./.github/actions/kyverno-logs
|
||||||
|
|
||||||
validatingadmissionpolicies-v1beta1:
|
k8s-version-specific-tests-above-1-28:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
packages: read
|
packages: read
|
||||||
|
@ -253,6 +253,7 @@ jobs:
|
||||||
version: v1.29.0
|
version: v1.29.0
|
||||||
tests:
|
tests:
|
||||||
- generate-validating-admission-policy
|
- generate-validating-admission-policy
|
||||||
|
- webhook-configurations
|
||||||
needs: prepare-images
|
needs: prepare-images
|
||||||
name: ${{ matrix.k8s-version.name }} - ${{ matrix.config.name }} - ${{ matrix.tests }}
|
name: ${{ matrix.k8s-version.name }} - ${{ matrix.config.name }} - ${{ matrix.tests }}
|
||||||
steps:
|
steps:
|
||||||
|
@ -972,7 +973,7 @@ jobs:
|
||||||
- ttl
|
- ttl
|
||||||
- force-failure-policy-ignore
|
- force-failure-policy-ignore
|
||||||
- validatingadmissionpolicies-v1alpha1
|
- validatingadmissionpolicies-v1alpha1
|
||||||
- validatingadmissionpolicies-v1beta1
|
- k8s-version-specific-tests-above-1-28
|
||||||
- validatingadmissionpolicies-reports-v1alpha1
|
- validatingadmissionpolicies-reports-v1alpha1
|
||||||
- validatingadmissionpolicies-reports-v1beta1
|
- validatingadmissionpolicies-reports-v1beta1
|
||||||
- custom-sigstore
|
- custom-sigstore
|
||||||
|
@ -991,7 +992,7 @@ jobs:
|
||||||
- ttl
|
- ttl
|
||||||
- force-failure-policy-ignore
|
- force-failure-policy-ignore
|
||||||
- validatingadmissionpolicies-v1alpha1
|
- validatingadmissionpolicies-v1alpha1
|
||||||
- validatingadmissionpolicies-v1beta1
|
- k8s-version-specific-tests-above-1-28
|
||||||
- validatingadmissionpolicies-reports-v1alpha1
|
- validatingadmissionpolicies-reports-v1alpha1
|
||||||
- validatingadmissionpolicies-reports-v1beta1
|
- validatingadmissionpolicies-reports-v1beta1
|
||||||
- custom-sigstore
|
- custom-sigstore
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
## Description
|
||||||
|
|
||||||
|
This test checks fine-grained webhook configuration is synced to admission webhooks.
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
The request sent from `system:masters` group should be forwarded to Kyverno and get blocked due to the violation
|
||||||
|
|
||||||
|
## Reference Issue(s)
|
||||||
|
|
||||||
|
#9111
|
|
@ -0,0 +1,38 @@
|
||||||
|
apiVersion: chainsaw.kyverno.io/v1alpha1
|
||||||
|
kind: Test
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: double-wildcard
|
||||||
|
spec:
|
||||||
|
steps:
|
||||||
|
- name: step-01
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
file: ns.yaml
|
||||||
|
- assert:
|
||||||
|
file: ns.yaml
|
||||||
|
- name: step-02
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
file: policy.yaml
|
||||||
|
- assert:
|
||||||
|
file: policy-assert.yaml
|
||||||
|
- sleep:
|
||||||
|
duration: 3s
|
||||||
|
- name: step-03
|
||||||
|
try:
|
||||||
|
- command:
|
||||||
|
args:
|
||||||
|
- get
|
||||||
|
- validatingwebhookconfigurations
|
||||||
|
- kyverno-resource-validating-webhook-cfg
|
||||||
|
- -o
|
||||||
|
- yaml
|
||||||
|
entrypoint: kubectl
|
||||||
|
- name: step-04
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
expect:
|
||||||
|
- check:
|
||||||
|
($error != null): true
|
||||||
|
file: pod.yaml
|
|
@ -0,0 +1,4 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: cpol-fine-grained-match-conditions-ns
|
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: disallow-annotations-example
|
||||||
|
namespace: cpol-fine-grained-match-conditions-ns
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: example
|
||||||
|
image: busybox:latest
|
||||||
|
args: ["sleep", "infinity"]
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: kyverno.io/v1
|
||||||
|
kind: ClusterPolicy
|
||||||
|
metadata:
|
||||||
|
name: cpol-fine-grained-match-conditions-disallow-latest-image-tag
|
||||||
|
status:
|
||||||
|
conditions:
|
||||||
|
- reason: Succeeded
|
||||||
|
status: "True"
|
||||||
|
type: Ready
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
apiVersion: kyverno.io/v1
|
||||||
|
kind: ClusterPolicy
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
pod-policies.kyverno.io/autogen-controllers: none
|
||||||
|
name: cpol-fine-grained-match-conditions-disallow-latest-image-tag
|
||||||
|
spec:
|
||||||
|
admission: true
|
||||||
|
background: true
|
||||||
|
webhookConfiguration:
|
||||||
|
matchConditions:
|
||||||
|
- name: "select-namespace"
|
||||||
|
expression: '(object.metadata.namespace == "cpol-fine-grained-match-conditions-ns")'
|
||||||
|
- name: 'exclude-requests-by-groups'
|
||||||
|
expression: '!("system:nodes" in request.userInfo.groups)'
|
||||||
|
rules:
|
||||||
|
- match:
|
||||||
|
any:
|
||||||
|
- resources:
|
||||||
|
kinds:
|
||||||
|
- Pod
|
||||||
|
name: require-image-tag
|
||||||
|
validate:
|
||||||
|
message: An image tag is required
|
||||||
|
pattern:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: '*:*'
|
||||||
|
- match:
|
||||||
|
any:
|
||||||
|
- resources:
|
||||||
|
kinds:
|
||||||
|
- Pod
|
||||||
|
name: validate-image-tag
|
||||||
|
validate:
|
||||||
|
message: Using a mutable image tag e.g. 'latest' is not allowed
|
||||||
|
pattern:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: '!*:latest'
|
||||||
|
validationFailureAction: Enforce
|
||||||
|
failurePolicy: Ignore
|
|
@ -0,0 +1,11 @@
|
||||||
|
## Description
|
||||||
|
|
||||||
|
This test checks fine-grained webhook configuration is synced to admission webhooks.
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
The request sent from `system:masters` group should be forwarded to Kyverno and get blocked due to the violation
|
||||||
|
|
||||||
|
## Reference Issue(s)
|
||||||
|
|
||||||
|
#9111
|
|
@ -0,0 +1,37 @@
|
||||||
|
apiVersion: chainsaw.kyverno.io/v1alpha1
|
||||||
|
kind: Test
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: double-wildcard
|
||||||
|
spec:
|
||||||
|
steps:
|
||||||
|
- name: step-01
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
file: ns.yaml
|
||||||
|
- assert:
|
||||||
|
file: ns.yaml
|
||||||
|
- name: step-02
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
file: policy.yaml
|
||||||
|
- assert:
|
||||||
|
file: policy-assert.yaml
|
||||||
|
- sleep:
|
||||||
|
duration: 3s
|
||||||
|
- name: step-03
|
||||||
|
try:
|
||||||
|
- command:
|
||||||
|
args:
|
||||||
|
- get
|
||||||
|
- validatingwebhookconfigurations
|
||||||
|
- kyverno-resource-validating-webhook-cfg
|
||||||
|
- -o
|
||||||
|
- yaml
|
||||||
|
entrypoint: kubectl
|
||||||
|
- name: step-04
|
||||||
|
try:
|
||||||
|
- apply:
|
||||||
|
file: pod.yaml
|
||||||
|
- assert:
|
||||||
|
file: pod.yaml
|
|
@ -0,0 +1,4 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: cpol-fine-grained-match-conditions-pass-ns
|
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: disallow-annotations-example
|
||||||
|
namespace: cpol-fine-grained-match-conditions-pass-ns
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: example
|
||||||
|
image: busybox:latest
|
||||||
|
args: ["sleep", "infinity"]
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: kyverno.io/v1
|
||||||
|
kind: ClusterPolicy
|
||||||
|
metadata:
|
||||||
|
name: cpol-fine-grained-match-conditions-pass
|
||||||
|
status:
|
||||||
|
conditions:
|
||||||
|
- reason: Succeeded
|
||||||
|
status: "True"
|
||||||
|
type: Ready
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
apiVersion: kyverno.io/v1
|
||||||
|
kind: ClusterPolicy
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
pod-policies.kyverno.io/autogen-controllers: none
|
||||||
|
name: cpol-fine-grained-match-conditions-pass
|
||||||
|
spec:
|
||||||
|
admission: true
|
||||||
|
background: true
|
||||||
|
webhookConfiguration:
|
||||||
|
matchConditions:
|
||||||
|
- name: "select-namespace"
|
||||||
|
expression: '(object.metadata.namespace == "cpol-fine-grained-match-conditions-pass-ns")'
|
||||||
|
- name: 'exclude-requests-by-groups'
|
||||||
|
expression: '!("system:authenticated" in request.userInfo.groups)'
|
||||||
|
rules:
|
||||||
|
- match:
|
||||||
|
any:
|
||||||
|
- resources:
|
||||||
|
kinds:
|
||||||
|
- Pod
|
||||||
|
name: require-image-tag
|
||||||
|
validate:
|
||||||
|
message: An image tag is required
|
||||||
|
pattern:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: '*:*'
|
||||||
|
- match:
|
||||||
|
any:
|
||||||
|
- resources:
|
||||||
|
kinds:
|
||||||
|
- Pod
|
||||||
|
name: validate-image-tag
|
||||||
|
validate:
|
||||||
|
message: Using a mutable image tag e.g. 'latest' is not allowed
|
||||||
|
pattern:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: '!*:latest'
|
||||||
|
validationFailureAction: Enforce
|
||||||
|
failurePolicy: Ignore
|
Loading…
Add table
Reference in a new issue