Skip to content

Commit 4ddf74b

Browse files
authored
feat: Add support for kyverno addon including reporter UI and baseline policies (#910)
1 parent c98e8fd commit 4ddf74b

File tree

12 files changed

+337
-25
lines changed

12 files changed

+337
-25
lines changed

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repos:
1010
- id: detect-aws-credentials
1111
args: ['--allow-missing-credentials']
1212
- repo: https://github.com/antonbabenko/pre-commit-terraform
13-
rev: v1.74.1
13+
rev: v1.75.0
1414
hooks:
1515
- id: terraform_fmt
1616
- id: terraform_docs

docs/add-ons/kyverno.md

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Kyverno
2+
3+
Kyverno is a policy engine that can help kubernetes clusters to enforce security and governance policies.
4+
5+
This addon provides support for:
6+
1. [Kyverno](https://github.com/kyverno/kyverno/tree/main/charts/kyverno)
7+
2. [Kyverno policies](https://github.com/kyverno/kyverno/tree/main/charts/kyverno-policies)
8+
3. [Kyverno policy reporter](https://github.com/kyverno/policy-reporter/tree/main/charts/policy-reporter)
9+
10+
## Usage
11+
12+
Kyverno can be deployed by enabling the respective add-on(s) via the following.
13+
14+
```hcl
15+
enable_kyverno = true
16+
enable_kyverno_policies = true
17+
enable_kyverno_policy_reporter = true
18+
```
19+
20+
### GitOps Configuration
21+
22+
The following properties are made available for use when managing the add-on via GitOps.
23+
24+
```sh
25+
kyverno = {
26+
enable = true
27+
}
28+
29+
kyverno_policies = {
30+
enable = true
31+
}
32+
33+
kyverno_policy_reporter = {
34+
enable = true
35+
}
36+
```

examples/complete-kubernetes-addons/main.tf

+4
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,10 @@ module "eks_blueprints_kubernetes_addons" {
235235
EOF
236236
}
237237

238+
enable_kyverno = true
239+
enable_kyverno_policies = true
240+
enable_kyverno_policy_reporter = true
241+
238242
tags = local.tags
239243
}
240244

modules/kubernetes-addons/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
| <a name="module_kubecost"></a> [kubecost](#module\_kubecost) | ./kubecost | n/a |
5959
| <a name="module_kuberay_operator"></a> [kuberay\_operator](#module\_kuberay\_operator) | ./kuberay-operator | n/a |
6060
| <a name="module_kubernetes_dashboard"></a> [kubernetes\_dashboard](#module\_kubernetes\_dashboard) | ./kubernetes-dashboard | n/a |
61+
| <a name="module_kyverno"></a> [kyverno](#module\_kyverno) | ./kyverno | n/a |
6162
| <a name="module_local_volume_provisioner"></a> [local\_volume\_provisioner](#module\_local\_volume\_provisioner) | ./local-volume-provisioner | n/a |
6263
| <a name="module_metrics_server"></a> [metrics\_server](#module\_metrics\_server) | ./metrics-server | n/a |
6364
| <a name="module_ondat"></a> [ondat](#module\_ondat) | ondat/ondat-addon/eksblueprints | 0.1.1 |
@@ -190,6 +191,9 @@
190191
| <a name="input_enable_kubecost"></a> [enable\_kubecost](#input\_enable\_kubecost) | Enable Kubecost add-on | `bool` | `false` | no |
191192
| <a name="input_enable_kuberay_operator"></a> [enable\_kuberay\_operator](#input\_enable\_kuberay\_operator) | Enable KubeRay Operator add-on | `bool` | `false` | no |
192193
| <a name="input_enable_kubernetes_dashboard"></a> [enable\_kubernetes\_dashboard](#input\_enable\_kubernetes\_dashboard) | Enable Kubernetes Dashboard add-on | `bool` | `false` | no |
194+
| <a name="input_enable_kyverno"></a> [enable\_kyverno](#input\_enable\_kyverno) | Enable Kyverno add-on | `bool` | `false` | no |
195+
| <a name="input_enable_kyverno_policies"></a> [enable\_kyverno\_policies](#input\_enable\_kyverno\_policies) | Enable Kyverno policies. Requires `enable_kyverno` to be `true` | `bool` | `false` | no |
196+
| <a name="input_enable_kyverno_policy_reporter"></a> [enable\_kyverno\_policy\_reporter](#input\_enable\_kyverno\_policy\_reporter) | Enable Kyverno UI. Requires `enable_kyverno` to be `true` | `bool` | `false` | no |
193197
| <a name="input_enable_local_volume_provisioner"></a> [enable\_local\_volume\_provisioner](#input\_enable\_local\_volume\_provisioner) | Enable Local volume provisioner add-on | `bool` | `false` | no |
194198
| <a name="input_enable_metrics_server"></a> [enable\_metrics\_server](#input\_enable\_metrics\_server) | Enable metrics server add-on | `bool` | `false` | no |
195199
| <a name="input_enable_ondat"></a> [enable\_ondat](#input\_enable\_ondat) | Enable Ondat add-on | `bool` | `false` | no |
@@ -234,6 +238,9 @@
234238
| <a name="input_kubecost_helm_config"></a> [kubecost\_helm\_config](#input\_kubecost\_helm\_config) | Kubecost Helm Chart config | `any` | `{}` | no |
235239
| <a name="input_kuberay_operator_helm_config"></a> [kuberay\_operator\_helm\_config](#input\_kuberay\_operator\_helm\_config) | KubeRay Operator Helm Chart config | `any` | `{}` | no |
236240
| <a name="input_kubernetes_dashboard_helm_config"></a> [kubernetes\_dashboard\_helm\_config](#input\_kubernetes\_dashboard\_helm\_config) | Kubernetes Dashboard Helm Chart config | `any` | `null` | no |
241+
| <a name="input_kyverno_helm_config"></a> [kyverno\_helm\_config](#input\_kyverno\_helm\_config) | Kyverno Helm Chart config | `any` | `{}` | no |
242+
| <a name="input_kyverno_policies_helm_config"></a> [kyverno\_policies\_helm\_config](#input\_kyverno\_policies\_helm\_config) | Kyverno policies Helm Chart config | `any` | `{}` | no |
243+
| <a name="input_kyverno_policy_reporter_helm_config"></a> [kyverno\_policy\_reporter\_helm\_config](#input\_kyverno\_policy\_reporter\_helm\_config) | Kyverno UI Helm Chart config | `any` | `{}` | no |
237244
| <a name="input_local_volume_provisioner_helm_config"></a> [local\_volume\_provisioner\_helm\_config](#input\_local\_volume\_provisioner\_helm\_config) | Local volume provisioner Helm Chart config | `any` | `{}` | no |
238245
| <a name="input_metrics_server_helm_config"></a> [metrics\_server\_helm\_config](#input\_metrics\_server\_helm\_config) | Metrics Server Helm Chart config | `any` | `{}` | no |
239246
| <a name="input_ondat_admin_password"></a> [ondat\_admin\_password](#input\_ondat\_admin\_password) | Password for Ondat admin user | `string` | `"storageos"` | no |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Kyverno
2+
3+
Kyverno is a policy engine that can help kubernetes clusters to enforce security and governance policies.
4+
5+
This addon provides support for:
6+
1. [Kyverno](https://github.com/kyverno/kyverno/tree/main/charts/kyverno)
7+
2. [Kyverno policies](https://github.com/kyverno/kyverno/tree/main/charts/kyverno-policies)
8+
3. [Kyverno policy reporter](https://github.com/kyverno/policy-reporter/tree/main/charts/policy-reporter)
9+
10+
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
11+
## Requirements
12+
13+
| Name | Version |
14+
|------|---------|
15+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0.0 |
16+
17+
## Providers
18+
19+
No providers.
20+
21+
## Modules
22+
23+
| Name | Source | Version |
24+
|------|--------|---------|
25+
| <a name="module_kyverno_helm_addon"></a> [kyverno\_helm\_addon](#module\_kyverno\_helm\_addon) | ../helm-addon | n/a |
26+
| <a name="module_kyverno_policies_helm_addon"></a> [kyverno\_policies\_helm\_addon](#module\_kyverno\_policies\_helm\_addon) | ../helm-addon | n/a |
27+
| <a name="module_kyverno_policy_reporter_helm_addon"></a> [kyverno\_policy\_reporter\_helm\_addon](#module\_kyverno\_policy\_reporter\_helm\_addon) | ../helm-addon | n/a |
28+
29+
## Resources
30+
31+
No resources.
32+
33+
## Inputs
34+
35+
| Name | Description | Type | Default | Required |
36+
|------|-------------|------|---------|:--------:|
37+
| <a name="input_addon_context"></a> [addon\_context](#input\_addon\_context) | Input configuration for the addon | <pre>object({<br> aws_caller_identity_account_id = string<br> aws_caller_identity_arn = string<br> aws_eks_cluster_endpoint = string<br> aws_partition_id = string<br> aws_region_name = string<br> eks_cluster_id = string<br> eks_oidc_issuer_url = string<br> eks_oidc_provider_arn = string<br> tags = map(string)<br> })</pre> | n/a | yes |
38+
| <a name="input_enable_kyverno"></a> [enable\_kyverno](#input\_enable\_kyverno) | Enable Kyverno | `bool` | `false` | no |
39+
| <a name="input_enable_kyverno_policies"></a> [enable\_kyverno\_policies](#input\_enable\_kyverno\_policies) | Enable Kyverno policies. Requires `enable_kyverno` to be `true` | `bool` | `false` | no |
40+
| <a name="input_enable_kyverno_policy_reporter"></a> [enable\_kyverno\_policy\_reporter](#input\_enable\_kyverno\_policy\_reporter) | Enable Kyverno UI. Requires `enable_kyverno` to be `true` | `bool` | `false` | no |
41+
| <a name="input_kyverno_helm_config"></a> [kyverno\_helm\_config](#input\_kyverno\_helm\_config) | Helm provider config for the Kyverno | `any` | `{}` | no |
42+
| <a name="input_kyverno_policies_helm_config"></a> [kyverno\_policies\_helm\_config](#input\_kyverno\_policies\_helm\_config) | Helm provider config for the Kyverno baseline policies | `any` | `{}` | no |
43+
| <a name="input_kyverno_policy_reporter_helm_config"></a> [kyverno\_policy\_reporter\_helm\_config](#input\_kyverno\_policy\_reporter\_helm\_config) | Helm provider config for the Kyverno policy reporter UI | `any` | `{}` | no |
44+
| <a name="input_manage_via_gitops"></a> [manage\_via\_gitops](#input\_manage\_via\_gitops) | Determines if the add-on should be managed via GitOps. | `bool` | `false` | no |
45+
46+
## Outputs
47+
48+
No outputs.
49+
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
module "kyverno_helm_addon" {
2+
source = "../helm-addon"
3+
4+
manage_via_gitops = var.manage_via_gitops
5+
helm_config = merge(
6+
{
7+
name = "kyverno"
8+
chart = "kyverno"
9+
repository = "https://kyverno.github.io/kyverno/"
10+
version = "v2.5.3"
11+
namespace = "kyverno"
12+
create_namespace = true
13+
description = "Kubernetes Native Policy Management"
14+
values = [
15+
<<-EOT
16+
replicaCount: 3
17+
EOT
18+
]
19+
},
20+
var.kyverno_helm_config
21+
)
22+
23+
addon_context = var.addon_context
24+
}
25+
26+
module "kyverno_policies_helm_addon" {
27+
source = "../helm-addon"
28+
29+
count = var.enable_kyverno_policies ? 1 : 0
30+
31+
manage_via_gitops = var.manage_via_gitops
32+
helm_config = merge(
33+
{
34+
name = "kyverno-policies"
35+
chart = "kyverno-policies"
36+
repository = "https://kyverno.github.io/kyverno/"
37+
version = "v2.5.5"
38+
namespace = module.kyverno_helm_addon.helm_release[0].namespace
39+
description = "Kubernetes Pod Security Standards implemented as Kyverno policies"
40+
values = [
41+
<<-EOT
42+
podSecurityStandard: restricted
43+
EOT
44+
45+
]
46+
},
47+
var.kyverno_policies_helm_config
48+
)
49+
50+
addon_context = var.addon_context
51+
}
52+
53+
module "kyverno_policy_reporter_helm_addon" {
54+
source = "../helm-addon"
55+
56+
count = var.enable_kyverno_policy_reporter ? 1 : 0
57+
58+
manage_via_gitops = var.manage_via_gitops
59+
helm_config = merge(
60+
{
61+
name = "policy-reporter"
62+
chart = "policy-reporter"
63+
repository = "https://kyverno.github.io/policy-reporter"
64+
version = "2.13.0"
65+
namespace = module.kyverno_helm_addon.helm_release[0].namespace
66+
description = "Policy Reporter watches for PolicyReport Resources"
67+
},
68+
var.kyverno_policy_reporter_helm_config
69+
)
70+
71+
addon_context = var.addon_context
72+
}

modules/kubernetes-addons/kyverno/outputs.tf

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
variable "kyverno_helm_config" {
2+
description = "Helm provider config for the Kyverno"
3+
type = any
4+
default = {}
5+
}
6+
7+
variable "kyverno_policies_helm_config" {
8+
description = "Helm provider config for the Kyverno baseline policies"
9+
type = any
10+
default = {}
11+
}
12+
13+
variable "kyverno_policy_reporter_helm_config" {
14+
description = "Helm provider config for the Kyverno policy reporter UI"
15+
type = any
16+
default = {}
17+
}
18+
19+
variable "enable_kyverno" {
20+
description = "Enable Kyverno"
21+
default = false
22+
type = bool
23+
}
24+
25+
variable "enable_kyverno_policies" {
26+
description = "Enable Kyverno policies. Requires `enable_kyverno` to be `true`"
27+
type = bool
28+
default = false
29+
}
30+
31+
variable "enable_kyverno_policy_reporter" {
32+
description = "Enable Kyverno UI. Requires `enable_kyverno` to be `true`"
33+
type = bool
34+
default = false
35+
}
36+
37+
variable "manage_via_gitops" {
38+
description = "Determines if the add-on should be managed via GitOps."
39+
type = bool
40+
default = false
41+
}
42+
43+
variable "addon_context" {
44+
description = "Input configuration for the addon"
45+
type = object({
46+
aws_caller_identity_account_id = string
47+
aws_caller_identity_arn = string
48+
aws_eks_cluster_endpoint = string
49+
aws_partition_id = string
50+
aws_region_name = string
51+
eks_cluster_id = string
52+
eks_oidc_issuer_url = string
53+
eks_oidc_provider_arn = string
54+
tags = map(string)
55+
})
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 1.0.0"
3+
}

modules/kubernetes-addons/locals.tf

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ locals {
4040
chaos_mesh = var.enable_chaos_mesh ? module.chaos_mesh[0].argocd_gitops_config : null
4141
cilium = var.enable_cilium ? module.cilium[0].argocd_gitops_config : null
4242
gatekeeper = var.enable_gatekeeper ? module.gatekeeper[0].argocd_gitops_config : null
43+
kyverno = var.enable_kyverno ? { enable = true } : null
44+
kyverno_policies = var.enable_kyverno ? { enable = true } : null
45+
kyverno_policy_reporter = var.enable_kyverno ? { enable = true } : null
4346
}
4447

4548
addon_context = {

0 commit comments

Comments
 (0)