1
0
Fork 0
salty-dog/rules/kubernetes.yml

164 lines
3.7 KiB
YAML
Raw Normal View History

name: salty-dog-kubernetes
rules:
- name: kubernetes-resources
2019-06-16 00:43:01 +00:00
desc: containers must have complete resources specified
level: info
tags:
2019-06-16 03:54:40 +00:00
- kubernetes
- resources
select: '$.spec.template.spec.containers[*]'
check:
type: object
additionalProperties: true
required: [resources]
properties:
resources:
type: object
required: [limits, requests]
properties:
limits:
type: object
required: [cpu, memory]
properties:
cpu: &resources-cpu
2019-06-24 04:00:44 +00:00
oneOf:
- type: number
minimum: 1
- type: string
pattern: "[1-9][0-9]*m"
memory: &resources-memory
oneOf:
- type: number
minimum: 1
- type: string
pattern: "[1-9][0-9]*[KMG]i"
requests:
type: object
required: [cpu, memory]
properties:
cpu: *resources-cpu
memory: *resources-memory
- name: kubernetes-resources-minimum-cpu
desc: resource limits are too low
level: debug
tags:
2019-06-16 03:54:40 +00:00
- kubernetes
- resources
select: '$.spec.template.spec.containers[*].resources'
# filter containers with cpu limits
filter:
type: object
properties:
limits:
type: object
properties:
2019-06-25 03:32:39 +00:00
cpu: *resources-cpu
2019-06-16 03:51:03 +00:00
# ensure the limits aren't *too* low
check:
type: object
properties:
limits:
type: object
properties:
cpu:
2019-06-24 04:00:44 +00:00
oneOf:
- type: number
minimum: 1
- type: string
pattern: "[1-9][0-9]{2,}m"
- name: kubernetes-deployment-replicas
2019-06-16 03:51:03 +00:00
desc: deployments must specify a positive replica count
level: info
tags:
2019-06-16 03:54:40 +00:00
- kubernetes
- apps
- deployment
2019-06-16 03:51:03 +00:00
# select the root of the document
select: '$'
2019-06-16 03:51:03 +00:00
# filter deployments
filter:
type: object
properties:
kind:
type: string
const: Deployment
2019-06-16 03:51:03 +00:00
# ensure replicas are greater than 0
check:
type: object
properties:
spec:
type: object
properties:
replica:
type: number
2019-06-25 03:32:39 +00:00
minimum: 1
- name: kubernetes-labels
desc: all resources should have labels
level: info
tags:
- kubernetes
- important
- labels
check:
type: object
required: [metadata]
properties:
metadata:
type: object
required: [labels]
properties:
labels:
type: object
additionalProperties: false
patternProperties:
"^[-.a-z0-9]{1,63}$":
type: string
- name: kubernetes-container-pull-policy
desc: all containers should have a pull policy
level: info
tags:
- kubernetes
- image
- optional
select: '$..containers.*'
check:
type: object
required: [image, imagePullPolicy]
properties:
imagePullPolicy:
type: string
enum:
- Always
- IfNotPresent
- Never
- name: kubernetes-image-latest
desc: images should never use :latest tag
level: info
tags:
- kubernetes
- image
- important
select: '$..containers.*'
check:
type: object
required: [image]
properties:
image:
type: string
not:
pattern: ':latest$'