1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2024-12-15 17:51:20 +00:00
Cloud Native Policy Management
Find a file
Jim Bugwadia 838d02c475
Bugfix/659 support wildcards for namespaces (#871)
* - support wildcards for namespaces

* do not annotate resource, unless policy is an autogen policy

* close HTTP body

* improve messages

* remove policy store

Policy store was not fully implemented and simply provided a way
to list all polices and get a policy by name, which can be done via
standard client-go interfaces.

We need to revisit and design a better PolicyStore that provides fast
lookups for matching policies based on names, namespaces, etc.

* handle wildcard namespaces in background processing

* fix unit tests 1) remove platform dependent path usage 2) remove policy store

* add test case for mutate with wildcard namespaces
2020-05-26 10:36:56 -07:00
.github
api revert data loaction 2020-03-26 19:10:54 +05:30
charts/kyverno resource limit added to kyverno defination and kyvrno chart 2020-05-21 12:18:05 -07:00
cmd Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
definitions resource limit added to kyverno defination and kyvrno chart 2020-05-21 12:18:05 -07:00
documentation fixed a documentation typo (#864) 2020-05-19 10:33:44 -07:00
gh-pages
pkg Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
samples remove cpu limit in BP require_pod_requests_limits.yaml (#807) 2020-04-13 09:29:11 -07:00
scripts
test Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
.codeclimate.yml codeclimate and golangci-lint added 2020-03-24 02:01:50 +05:30
.directory
.gitignore ignore cli binary 2020-04-02 09:38:52 -07:00
.golangci.yml codeclimate and golangci-lint added 2020-03-24 02:01:50 +05:30
.travis.yml Caching added to travis ci 2020-03-24 00:42:50 +05:30
CODE_OF_CONDUCT.md
CONTRIBUTING.md remove extra documentation 2020-03-26 20:06:20 +05:30
go.mod Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
go.sum Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
LICENSE
Makefile Bugfix/659 support wildcards for namespaces (#871) 2020-05-26 10:36:56 -07:00
README.md Fixes #817 - slack channel URL 2020-04-20 07:41:49 -07:00

Kyverno - Kubernetes Native Policy Management

Build Status Go Report Card

logo

Kyverno is a policy engine designed for Kubernetes.

Kubernetes supports declarative validation, mutation, and generation of resource configurations using policies written as Kubernetes resources.

Kyverno can be used to scan existing workloads for best practices, or can be used to enforce best practices by blocking or mutating API requests.Kyverno allows cluster adminstrators to manage environment specific configurations independently of workload configurations and enforce configuration best practices for their clusters.

Kyverno policies are Kubernetes resources that can be written in YAML or JSON. Kyverno policies can validate, mutate, and generate any Kubernetes resources.

Kyverno runs as a dynamic admission controller in a Kubernetes cluster. Kyverno receives validating and mutating admission webhook HTTP callbacks from the kube-apiserver and applies matching policies to return results that enforce admission policies or reject requests.

Kyverno policies can match resources using the resource kind, name, and label selectors. Wildcards are supported in names.

Mutating policies can be written as overlays (similar to Kustomize) or as a JSON Patch. Validating policies also use an overlay style syntax, with support for pattern matching and conditional (if-then-else) processing.

Policy enforcement is captured using Kubernetes events. Kyverno also reports policy violations for existing resources.

Examples

1. Validating resources

This policy requires that all pods have CPU and memory resource requests and limits:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: check-cpu-memory
spec:
  # `enforce` blocks the request. `audit` reports violations
  validationFailureAction: enforce
  rules:
  - name: check-pod-resources
    match:
      resources:
        kinds:
        - Pod
    validate:
      message: "CPU and memory resource requests and limits are required"
      pattern:
        spec:
          containers:
          # 'name: *' selects all containers in the pod
          - name: "*"
            resources:
              limits:
                # '?' requires 1 alphanumeric character and '*' means that there can be 0 or more characters.
                # Using them together e.g. '?*' requires at least one character. 
                memory: "?*"
                cpu: "?*"
              requests:
                memory: "?*"
                cpu: "?*"

2. Mutating resources

This policy sets the imagePullPolicy to Always if the image tag is latest:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: set-image-pull-policy
spec:
  rules:
  - name: set-image-pull-policy
    match:
      resources:
        kinds:
        - Pod
    mutate:
      overlay:
        spec:
          containers:
            # match images which end with :latest   
            - (image): "*:latest"
              # set the imagePullPolicy to "Always"
              imagePullPolicy: "Always"

3. Generating resources

This policy sets the Zookeeper and Kafka connection strings for all namespaces with a label key 'kafka'.

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: "zk-kafka-address"
spec:
  rules:
  - name: "zk-kafka-address"
    match:
      resources:
        kinds:
          - Namespace
    generate:
      kind: ConfigMap
      name: zk-kafka-address
      # generate the resource in the new namespace
      namespace: "{{request.object.metadata.name}}"
      data:
        kind: ConfigMap
        data:
          ZK_ADDRESS: "192.168.10.10:2181,192.168.10.11:2181,192.168.10.12:2181"
          KAFKA_ADDRESS: "192.168.10.13:9092,192.168.10.14:9092,192.168.10.15:9092"

4. More examples

Refer to a list of curated of sample policies that can be applied to your cluster.

Documentation

License

Apache License 2.0

Alternatives

Open Policy Agent

Open Policy Agent (OPA) is a general-purpose policy engine that can be used as a Kubernetes admission controller. It supports a large set of use cases. Policies are written using Rego a custom query language.

k-rail

k-rail provides several ready to use policies for security and multi-tenancy. The policies are written in Golang. Several of the Kyverno sample policies were inspired by k-rail policies.

Polaris

Polaris validates configurations for best practices. It includes several checks across health, networking, security, etc. Checks can be assigned a severity. A dashboard reports the overall score.

External configuration management tools

Tools like Kustomize can be used to manage variations in configurations outside of clusters. There are several advantages to this approach when used to produce variations of the same base configuration. However, such solutions cannot be used to validate or enforce configurations.

Roadmap

See Milestones and Issues.

Getting help

Contributing

Thanks for your interest in contributing!