āĻŦāĻŋāĻāĻĻā§āĻ°āĻ. āĻ āĻ¨ā§āĻŦāĻžāĻĻ: K8s āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ YAML āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻŦā§āĻĻā§āĻ§āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻāĻ°āĻ āĻŦā§āĻļāĻŋ āĻāĻ°ā§āĻ°ā§ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻā§āĨ¤ āĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻ° āĻ˛ā§āĻāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻāĻžāĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻ˛āĻŋāĻ āĻŦā§āĻā§ āĻ¨ā§āĻ¨āĻ¨āĻŋ, āĻ¤āĻŦā§ āĻ¤āĻžāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧāĻŽā§āĻ¨ā§āĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĻā§āĻā§āĻā§āĻ¨āĨ¤ āĻ¯āĻžāĻ°āĻž āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻā§āĻ°āĻšā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻā§āĻŦ āĻ¤āĻĨā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻā§āĨ¤
TL; āĻĄāĻŋāĻāĻ°: āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ¸ā§āĻ°āĻž āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§ Kubernetes YAML āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻ¯āĻžāĻāĻžāĻ āĻāĻŦāĻ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¯āĻŧāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ˛ā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§āĨ¤
Kubernetes āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻ˛ā§āĻĄāĻā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ YAML āĻ¨āĻĨāĻŋāĻ° āĻāĻāĻžāĻ°ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ YAML āĻāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻŽāĻž āĻŦāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ āĻ¸ā§āĻ āĻāĻ°āĻžāĻ° āĻ
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĨ¤
āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¯ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŦāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻĨā§āĻā§ āĻāĻ¸ā§?
PodDisruptionBudgets āĻ¸ā§āĻ āĻ¨ā§āĻ āĻāĻŽāĻ¨ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻāĻŋāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻ§ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ?
āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ¸ā§āĻāĻŋāĻ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻ¨ā§āĻ¤āĻŋ āĻ˛āĻā§āĻāĻ¨ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻĻā§āĻ° āĻ¸āĻāĻā§āĻāĻž āĻ¸āĻ āĻŋāĻ āĻāĻŦāĻ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻļā§āĻāĻ¯āĻŧāĻ¤āĻž āĻŦāĻžāĻĄāĻŧāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻā§āĻĒāĻžāĻĻāĻ¨ āĻāĻžāĻā§āĻ° āĻāĻžāĻĒ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻ āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°āĻŦā§ āĻāĻŽāĻ¨ āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻŦāĻžāĻĄāĻŧāĻžāĻ¯āĻŧāĨ¤
Kubernetes YAML āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ¯āĻžāĻ˛āĻŋāĻĄā§āĻļāĻ¨ āĻāĻā§āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻļā§āĻ°ā§āĻŖā§āĻ¤ā§ āĻāĻžāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
- āĻāĻĒāĻŋāĻāĻ āĻā§āĻ¯āĻžāĻ˛āĻŋāĻĄā§āĻāĻ°. āĻāĻ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻā§āĻ˛ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻĒāĻŋāĻāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§ YAML āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻā§ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°ā§āĨ¤
- āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻ. āĻāĻ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž, āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻŽāĻ¤āĻŋ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¸ā§āĨ¤
- āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¯āĻžāĻāĻžāĻāĻāĻžāĻ°ā§. āĻāĻ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻ¸āĻĻāĻ¸ā§āĻ¯āĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ, āĻ¯ā§āĻŽāĻ¨ āĻ°ā§āĻā§ āĻāĻŦāĻ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĨ¤
āĻāĻ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻāĻ¯āĻŧāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻ˛ā§āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŦ:
- kubeval;
- kube-āĻ¸ā§āĻā§āĻ°;
- config-lint;
- āĻ¤āĻžāĻŽāĻž;
- āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§āĻāĻŋāĻ¤āĻž;
- āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸āĨ¤
āĻāĻā§āĻāĻž, āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ!
āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻā§, āĻāĻ¸ā§āĻ¨ āĻāĻŋāĻā§ āĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻ¯āĻžāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻ¨ā§āĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻ¸ā§āĻ°āĻž āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻ āĻ¸āĻā§āĻāĻ¤āĻŋ āĻ°āĻ¯āĻŧā§āĻā§: āĻāĻĒāĻ¨āĻŋ āĻāĻ¤āĻā§āĻ˛āĻŋ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨?
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-echo
spec:
replicas: 2
selector:
matchLabels:
app: http-echo
template:
metadata:
labels:
app: http-echo
spec:
containers:
- name: http-echo
image: hashicorp/http-echo
args: ["-text", "hello-world"]
ports:
- containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
name: http-echo
spec:
ports:
- port: 5678
protocol: TCP
targetPort: 5678
selector:
app: http-echo
(base-valid.yaml
)
āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻ˛ā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻ YAML āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤
āĻāĻĒāĻ°ā§āĻā§āĻ¤ āĻĒā§āĻ°āĻāĻžāĻļ
base-valid.yaml
āĻāĻŦāĻ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĨā§āĻā§ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻāĻžāĻļ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§āĻāĻŋāĻ āĻāĻžāĻ¨ā§āĻĄāĻžāĻ° .
āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻāĻāĻāĻŋ āĻāĻ¯āĻŧā§āĻŦ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§ āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻāĻžāĻ āĻšāĻ˛ āĻĒā§āĻ°ā§āĻ 5678-āĻ āĻāĻāĻāĻŋ "āĻšā§āĻ¯āĻžāĻ˛ā§ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻ˛ā§āĻĄ" āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻ¨āĻžāĻ¨ā§āĨ¤ āĻāĻāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
kubectl apply -f hello-world.yaml
āĻāĻŦāĻ āĻ¤āĻžāĻ - āĻāĻžāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§:
kubectl port-forward svc/http-echo 8080:5678
āĻāĻāĻ¨ āĻ¯āĻžāĻ¨
1. āĻā§āĻŦā§āĻŦāĻ˛
āĻŦā§āĻ¸ āĻ
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 0.15.0 āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻāĻŋāĻ˛āĨ¤
āĻāĻāĻŦāĻžāĻ° āĻāĻ¨ā§āĻ¸āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻ°, āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋāĻā§ āĻāĻĒāĻ°ā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻĢāĻŋāĻĄ āĻāĻ°āĻŋ:
$ kubeval base-valid.yaml
PASS - base-valid.yaml contains a valid Deployment (http-echo)
PASS - base-valid.yaml contains a valid Service (http-echo)
āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§, āĻā§āĻŦā§āĻāĻžāĻ˛ ā§Ļ āĻāĻ° āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻā§āĻĄ āĻ¸āĻš āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§āĻĒ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
$ echo $?
0
āĻāĻāĻ¨ āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻŦā§āĻŦāĻ˛ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ:
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-echo
spec:
replicas: 2
template:
metadata:
labels:
app: http-echo
spec:
containers:
- name: http-echo
image: hashicorp/http-echo
args: ["-text", "hello-world"]
ports:
- containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
name: http-echo
spec:
ports:
- port: 5678
protocol: TCP
targetPort: 5678
selector:
app: http-echo
(kubeval-invalid.yaml
)
āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨? āĻāĻŽāĻ°āĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋ:
$ kubeval kubeval-invalid.yaml
WARN - kubeval-invalid.yaml contains an invalid Deployment (http-echo) - selector: selector is required
PASS - kubeval-invalid.yaml contains a valid Service (http-echo)
# ĐŋŅОвĐĩŅиĐŧ ĐēОд вОСвŅĐ°ŅĐ°
$ echo $?
1
āĻ¸āĻŽā§āĻĒāĻĻ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž.
āĻāĻĒāĻŋāĻāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž apps/v1
, āĻĒāĻĄā§āĻ° āĻ˛ā§āĻŦā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻ˛ā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻāĻĒāĻ°ā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻ¨ā§āĻ, āĻ¤āĻžāĻ āĻā§āĻŦā§āĻāĻžāĻ˛ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°ā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¨-āĻāĻŋāĻ°ā§ āĻā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°ā§āĻā§ā§ˇ
āĻāĻŽāĻŋ āĻāĻžāĻŦāĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĻā§āĻĄāĻŧāĻžāĻ¨ āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŋ āĻšāĻŦā§ kubectl apply -f
āĻāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻ¸āĻā§āĻā§?
āĻāĻā§āĻāĻž, āĻāĻ¸ā§āĻ¨ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ:
$ kubectl apply -f kubeval-invalid.yaml
error: error validating "kubeval-invalid.yaml": error validating data: ValidationError(Deployment.spec):
missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors,
turn validation off with --validate=false
āĻ āĻŋāĻ āĻ¯ā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻŦā§āĻŦāĻ˛ āĻ¸āĻ¤āĻ°ā§āĻ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻāĻŋ āĻ āĻŋāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-echo
spec:
replicas: 2
selector: # !!!
matchLabels: # !!!
app: http-echo # !!!
template:
metadata:
labels:
app: http-echo
spec:
containers:
- name: http-echo
image: hashicorp/http-echo
args: ["-text", "hello-world"]
ports:
- containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
name: http-echo
spec:
ports:
- port: 5678
protocol: TCP
targetPort: 5678
selector:
app: http-echo
(base-valid.yaml
)
āĻā§āĻŦā§āĻāĻžāĻ˛ā§āĻ° āĻŽāĻ¤ā§ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻ¯ā§ āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻā§āĻ°ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĻāĻŋāĻā§ āĻ§āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻ āĻā§āĻāĻā§āĻ˛āĻŋāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ: āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ āĻĢāĻ˛āĻžāĻāĻ¨ā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§, āĻā§āĻŦā§āĻāĻžāĻ˛ āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ Kubernetes API āĻ¸ā§āĻāĻŋāĻŽāĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¸āĻŽā§āĻĒāĻĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ Kubernetes āĻ°āĻŋāĻ˛āĻŋāĻā§āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ --kubernetes-version
:
$ kubeval --kubernetes-version 1.16.1 base-valid.yaml
āĻ¨ā§āĻ āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ āĻšāĻ¤ā§ āĻšāĻŦā§ Major.Minor.Patch
.
āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻĒāĻĄāĻŧā§āĻ¨ā§ˇ --schema-location
.
āĻĒā§āĻĨāĻ YAML āĻĢāĻžāĻāĻ˛ āĻāĻžāĻĄāĻŧāĻžāĻ, kubeval āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻŦāĻ stdin āĻāĻ° āĻ¸āĻžāĻĨā§āĻ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻā§āĻŦā§āĻāĻžāĻ˛ āĻ¸āĻšāĻā§āĻ āĻ¸āĻŋāĻāĻ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĒā§āĻļ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻžāĻ°āĻž āĻā§āĻ¨ā§ āĻā§āĻļāĻŋ āĻšāĻŦā§āĻ¨ āĻ¯ā§ āĻā§āĻŦā§āĻāĻžāĻ˛ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻāĻāĻāĻĒā§āĻ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§:
- āĻ¸āĻ°āĻ˛ āĻĒāĻžāĻ ā§āĻ¯;
- JSON;
- āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻŋāĻā§ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨ (TAP)āĨ¤
āĻāĻŦāĻ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻ§āĻ°āĻŖā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ¸āĻžāĻ°āĻžāĻāĻļ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻāĻāĻĒā§āĻāĻā§ āĻāĻ°āĻ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻ¯ā§ āĻā§āĻ¨āĻ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻā§āĻŦā§āĻāĻžāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ°āĻžāĻĒ āĻĻāĻŋāĻ āĻšāĻ˛ āĻ¯ā§ āĻāĻāĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ āĻāĻžāĻ¸ā§āĻāĻŽ āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻĄā§āĻĢāĻŋāĻ¨āĻŋāĻļāĻ¨ (āĻ¸āĻŋāĻāĻ°āĻĄāĻŋ) āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ¤āĻŦā§, āĻā§āĻŦā§āĻāĻžāĻ˛ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
Kubeval āĻāĻāĻāĻŋ āĻŽāĻšāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻāĻŦāĻ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻā§āĻ˛; āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻž āĻā§āĻ° āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤ āĻ¯ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ āĻāĻ¤ā§āĻ¤ā§āĻ°ā§āĻŖ āĻšāĻāĻ¯āĻŧāĻž āĻā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻāĻŋ āĻĻā§āĻ¯āĻŧ āĻ¨āĻž āĻ¯ā§ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻāĻŋ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨āĻā§āĻ˛āĻŋ āĻŽā§āĻ¨ā§ āĻāĻ˛ā§āĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻā§āĻ¯āĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ latest
āĻāĻāĻāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§ āĻ¸ā§āĻ°āĻž āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻĒā§āĻ°āĻŖ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻā§āĻŦā§āĻāĻžāĻ˛ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§ āĻ¨āĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ
āĻ°ā§āĻĨāĻžā§, āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° YAML āĻāĻ° āĻŦā§āĻ§āĻ¤āĻž āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻŦā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ YAML āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻā§āĻ° āĻŽāĻ¤ā§ āĻ˛āĻā§āĻāĻ¨ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ latest
? āĻāĻŋāĻāĻžāĻŦā§ āĻ¸ā§āĻ°āĻž āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻāĻāĻāĻŋ YAML āĻĢāĻžāĻāĻ˛ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻŦā§āĻ¨?
2. āĻā§āĻŦā§āĻ° āĻ¸ā§āĻā§āĻ°
- āĻ°ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¨āĻž āĻāĻāĻāĻŋ āĻ§āĻžāĻ°āĻ āĻāĻ˛āĻŽāĻžāĻ¨.
- āĻĒāĻĄ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻž.
- āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻŦāĻ āĻ¸ā§āĻŽāĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻžāĨ¤
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛: OK, āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻŽā§āĻ˛āĻ и āĻā§āĻ°ā§āĻ¤āĻ°.
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ā§ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŦāĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ°ā§āĻ° āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻšāĻ˛ 1.7.0āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ base-valid.yaml
:
$ kube-score score base-valid.yaml
apps/v1/Deployment http-echo
[CRITICAL] Container Image Tag
¡ http-echo -> Image with latest tag
Using a fixed tag is recommended to avoid accidental upgrades
[CRITICAL] Pod NetworkPolicy
¡ The pod does not have a matching network policy
Create a NetworkPolicy that targets this pod
[CRITICAL] Pod Probes
¡ Container is missing a readinessProbe
A readinessProbe should be used to indicate when the service is ready to receive traffic.
Without it, the Pod is risking to receive traffic before it has booted. It is also used during
rollouts, and can prevent downtime if a new version of the application is failing.
More information: https://github.com/zegl/kube-score/blob/master/README_PROBES.md
[CRITICAL] Container Security Context
¡ http-echo -> Container has no configured security context
Set securityContext to run the container in a more secure context.
[CRITICAL] Container Resources
¡ http-echo -> CPU limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.cpu
¡ http-echo -> Memory limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.memory
¡ http-echo -> CPU request is not set
Resource requests are recommended to make sure that the application can start and run without
crashing. Set resources.requests.cpu
¡ http-echo -> Memory request is not set
Resource requests are recommended to make sure that the application can start and run without crashing.
Set resources.requests.memory
[CRITICAL] Deployment has PodDisruptionBudget
¡ No matching PodDisruptionBudget was found
It is recommended to define a PodDisruptionBudget to avoid unexpected downtime during Kubernetes
maintenance operations, such as when draining a node.
[WARNING] Deployment has host PodAntiAffinity
¡ Deployment does not have a host podAntiAffinity set
It is recommended to set a podAntiAffinity that stops multiple pods from a deployment from
being scheduled on the same node. This increases availability in case the node becomes unavailable.
YAML kubeval āĻā§āĻ āĻĒāĻžāĻ¸ āĻāĻ°ā§, āĻ¯āĻāĻ¨ kube-āĻ¸ā§āĻā§āĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§:
- āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋ āĻā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž.
- CPU āĻāĻŦāĻ āĻŽā§āĻŽāĻ°āĻŋ āĻ¸āĻŽā§āĻĒāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻŦāĻ āĻ¸ā§āĻŽāĻž āĻ¨ā§āĻāĨ¤
- āĻĒāĻĄ āĻŦā§āĻ¯āĻžāĻšāĻ¤ āĻŦāĻžāĻā§āĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ.
- āĻĒā§āĻĨāĻ āĻ āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¨ā§āĻ (āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ-āĻŦāĻŋāĻ°ā§āĻ§ā§) āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻž āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻāĻ°āĻ¤ā§āĨ¤
- āĻ§āĻžāĻ°āĻāĻāĻŋ āĻ°ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻāĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ¸āĻā§āĻāĻ¤ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¯āĻž āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨āĻā§ āĻāĻ°āĻ āĻĻāĻā§āĻˇ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¯ā§āĻā§āĻ¯ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
āĻā§āĻŽ kube-score
āĻĒā§āĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛āĻā§āĻāĻ¨ āĻ¸āĻš āĻŽāĻžāĻ¨āĻŦ-āĻĒāĻžāĻ āĻ¯ā§āĻā§āĻ¯ āĻāĻāĻžāĻ°ā§ āĻ¤āĻĨā§āĻ¯ āĻāĻāĻāĻĒā§āĻ āĻāĻ°ā§ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻŽā§āĻ˛āĻ и āĻā§āĻ°ā§āĻ¤āĻ°āĻ¯āĻž āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ
āĻ¨ā§āĻ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĨ¤
āĻ¯āĻžāĻ°āĻž āĻ¸āĻŋāĻāĻ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ
āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ āĻā§āĻ˛āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻžāĻ°āĻž āĻĒāĻ¤āĻžāĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°āĻ āĻ¸āĻāĻā§āĻāĻŋāĻ¤ āĻāĻāĻāĻĒā§āĻ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ --output-format ci
(āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻš āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ OK):
$ kube-score score base-valid.yaml --output-format ci
[OK] http-echo apps/v1/Deployment
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Image with latest tag
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: The pod does not have a matching network policy
[CRITICAL] http-echo apps/v1/Deployment: Container is missing a readinessProbe
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Container has no configured security context
[CRITICAL] http-echo apps/v1/Deployment: No matching PodDisruptionBudget was found
[WARNING] http-echo apps/v1/Deployment: Deployment does not have a host podAntiAffinity set
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
āĻā§āĻŦā§āĻāĻžāĻ˛ā§āĻ° āĻŽāĻ¤ā§, āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻ¨-āĻāĻŋāĻ°ā§ āĻāĻā§āĻ¸āĻŋāĻ āĻā§āĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧāĨ¤ āĻā§āĻ°ā§āĻ¤āĻ°. āĻāĻĒāĻ¨āĻŋ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻŽā§āĻ˛āĻ.
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ API āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° (āĻā§āĻŦā§āĻāĻžāĻ˛ā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻĒ) āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻ¤āĻĨā§āĻ¯āĻāĻŋ kube-āĻ¸ā§āĻā§āĻ°ā§āĻ 'āĻšāĻžāĻ°ā§āĻĄāĻā§āĻĄā§āĻĄ': āĻāĻĒāĻ¨āĻŋ Kubernetes-āĻāĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻĒāĻā§āĻ°ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻŦāĻž āĻāĻĒāĻ¨āĻžāĻ° K8 āĻāĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¸āĻš āĻāĻāĻžāĻ§āĻŋāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻāĻāĻāĻŋ āĻŦāĻĄāĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ¯āĻŧā§ āĻāĻ āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻā§ āĻāĻ āĻ¸ā§āĻ¯ā§āĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻ¸āĻā§āĻā§.
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻ¤āĻĨā§āĻ¯ āĻāĻāĻžāĻ¨ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ, āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻž āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ āĻā§ āĻšāĻŦā§? āĻšāĻžāĻ¯āĻŧāĻ°ā§, āĻāĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻžāĨ¤
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻāĻā§āĻ¸āĻā§āĻ¨āĻ¸āĻŋāĻŦāĻ˛ āĻ¨āĻ¯āĻŧ: āĻāĻĒāĻ¨āĻŋ āĻāĻ¤ā§ āĻ¨ā§āĻ¤āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻž āĻŦāĻž āĻ¤āĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ° āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ˛āĻŋāĻāĻ¤ā§ āĻāĻžāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻžāĻ°āĻāĻŋ āĻā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨: āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻ, āĻāĻĒāĻžāĻ°, āĻāĻ¨āĻĢā§āĻ¸ā§āĻ āĻŦāĻž āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸āĨ¤
3.Config-lint
Config-lint āĻšāĻ˛ YAML, JSON, Terraform, CSV āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ Kubernetes āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻ˛āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻāĻžāĻļ āĻšāĻ˛ 1.5.0āĨ¤
Config-lint-āĻ Kubernetes āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻā§āĻ¨ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻā§āĻ˛āĻŋ "āĻ°ā§āĻ˛ āĻ¸ā§āĻ" āĻ¨āĻžāĻŽā§ YAML āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧ (āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻĒāĻ¤ā§āĻ°), āĻāĻŦāĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻ āĻ¨ āĻāĻā§:
version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
- "*.yaml"
rules:
# ŅĐŋиŅĐžĐē ĐŋŅавиĐģ
(rule.yaml
)
āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻāĻ°āĻ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻžāĻŦā§ āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻŋ:
- āĻā§āĻˇā§āĻ¤ā§āĻ°
type
āĻā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ config-lint āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§āĨ¤ K8s āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻšāĻ˛ āĻ¸āĻ°ā§āĻŦāĻĻāĻžKubernetes
. - āĻā§āĻˇā§āĻ¤ā§āĻ°ā§
files
āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ - āĻā§āĻˇā§āĻ¤ā§āĻ°
rules
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ.
āĻ§āĻ°āĻž āĻ¯āĻžāĻ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧ my-company.com/myapp:1.0
. āĻāĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¯āĻž āĻāĻ āĻā§āĻāĻāĻŋ āĻāĻ°ā§ āĻ¤āĻž āĻĻā§āĻāĻ¤ā§ āĻāĻāĻ°āĻāĻŽ āĻšāĻŦā§:
- id: MY_DEPLOYMENT_IMAGE_TAG
severity: FAILURE
message: Deployment must use a valid image tag
resource: Deployment
assertions:
- every:
key: spec.template.spec.containers
expressions:
- key: image
op: starts-with
value: "my-company.com/"
(rule-trusted-repo.yaml
)
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻā§āĻŖāĻžāĻŦāĻ˛ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻāĻŦāĻļā§āĻ¯āĻ:
id
- āĻ¨āĻŋāĻ¯āĻŧāĻŽā§āĻ° āĻ āĻ¨āĻ¨ā§āĻ¯ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§;severity
- āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž, āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻŽā§āĻ˛āĻ и NON_COMPLIANT;message
- āĻ¯āĻĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻā§āĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻ āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ;resource
â āĻāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻĻā§āĻ° āĻ§āĻ°āĻ¨;assertions
- āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¯āĻž āĻāĻ āĻ¸āĻŽā§āĻĒāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻāĻĒāĻ°ā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽā§ assertion
āĻ¨āĻžāĻŽ āĻ
āĻ§ā§āĻ¨ā§ every
key: spec.templates.spec.containers
) āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻāĻŦāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨ (āĻ¯ā§āĻŽāĻ¨ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ my-company.com/
).
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¸ā§āĻ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
- "*.yaml"
rules:
- id: DEPLOYMENT_IMAGE_REPOSITORY # !!!
severity: FAILURE
message: Deployment must use a valid image repository
resource: Deployment
assertions:
- every:
key: spec.template.spec.containers
expressions:
- key: image
op: starts-with
value: "my-company.com/"
(ruleset.yaml
)
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋāĻā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋ check_image_repo.yaml
. āĻĢāĻžāĻāĻ˛ āĻā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ base-valid.yaml
:
$ config-lint -rules check_image_repo.yaml base-valid.yaml
[
{
"AssertionMessage": "Every expression fails: And expression fails: image does not start with my-company.com/",
"Category": "",
"CreatedAt": "2020-06-04T01:29:25Z",
"Filename": "test-data/base-valid.yaml",
"LineNumber": 0,
"ResourceID": "http-echo",
"ResourceType": "Deployment",
"RuleID": "DEPLOYMENT_IMAGE_REPOSITORY",
"RuleMessage": "Deployment must use a valid image repository",
"Status": "FAILURE"
}
]
āĻā§āĻ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧā§āĻā§. āĻāĻāĻ¨ āĻ¸āĻ āĻŋāĻ āĻāĻŋāĻ¤ā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ:
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-echo
spec:
replicas: 2
selector:
matchLabels:
app: http-echo
template:
metadata:
labels:
app: http-echo
spec:
containers:
- name: http-echo
image: my-company.com/http-echo:1.0 # !!!
args: ["-text", "hello-world"]
ports:
- containerPort: 5678
(image-valid-mycompany.yaml
)
āĻāĻŽāĻ°āĻž āĻāĻĒāĻ°ā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻāĨ¤ āĻā§āĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ:
$ config-lint -rules check_image_repo.yaml image-valid-mycompany.yaml
[]
Config-lint āĻšāĻ˛ āĻāĻāĻāĻŋ āĻ āĻā§āĻ°āĻāĻžāĻŽā§ āĻāĻžāĻ āĻžāĻŽā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ YAML DSL āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ Kubernetes YAML āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻā§āĻ˛āĻŋ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻ°ā§ āĻāĻāĻŋāĻ˛ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ? āĻāĻ° āĻāĻ¨ā§āĻ¯ YAML āĻā§āĻˇāĻŽāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻŋ āĻā§āĻŦ āĻā§āĻ āĻ¨āĻ¯āĻŧ? āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨?
4. āĻ¤āĻžāĻŽāĻž
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻŋ āĻĒāĻ°ā§āĻ°āĻāĻŋāĻ° āĻĨā§āĻā§ āĻāĻ˛āĻžāĻĻāĻž āĻ¯ā§ āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§ YAML āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ˛ā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻžāĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻŽā§āĻ˛āĻŋāĻ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§Kubernetes āĻ āĻŦāĻā§āĻā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻĒāĻĄāĻŧāĻ¤ā§ āĻāĻŦāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻ¤ā§āĨ¤
āĻāĻĒāĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻĻāĻā§āĻˇā§āĻĒā§āĻ° āĻā§āĻ°āĻŽāĻāĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 2.0.1 āĻšāĻ˛ āĻāĻ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻ° āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻĒā§āĻ°āĻāĻžāĻļāĨ¤
āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻā§āĻ° āĻŽāĻ¤ā§, āĻāĻĒāĻžāĻ°ā§āĻ° āĻā§āĻ¨āĻ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¨ā§āĻāĨ¤ āĻāĻ° āĻāĻāĻāĻŋ āĻ˛āĻŋāĻā§āĻ¨. āĻ¤āĻžāĻā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĻāĻŋāĻ¨ āĻ¯ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻā§āĻ˛āĻŋ āĻāĻāĻā§āĻāĻŋāĻ¯āĻŧāĻžāĻāĻžāĻŦā§ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻāĻ¨āĻā§āĻāĻ¨āĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ my-company.com
.
āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ check_image_repo.js
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš:
$$.forEach(function($){
if ($.kind === 'Deployment') {
$.spec.template.spec.containers.forEach(function(container) {
var image = new DockerImage(container.image);
if (image.registry.lastIndexOf('my-company.com/') != 0) {
errors.add_error('no_company_repo',"Image " + $.metadata.name + " is not from my-company.com repo", 1)
}
});
}
});
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ base-valid.yaml
, āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨ copper validate
:
$ copper validate --in=base-valid.yaml --validator=check_image_tag.js
Check no_company_repo failed with severity 1 due to Image http-echo is not from my-company.com repo
Validation failed
āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻāĻĒāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ¨āĻā§āĻ°ā§āĻ¸ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻĄā§āĻŽā§āĻ¨ āĻ¨āĻžāĻŽ āĻā§āĻ āĻāĻ°āĻž āĻŦāĻž āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻŽā§āĻĄā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻĒāĻĄāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻžāĨ¤
āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻĒāĻžāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ:
DockerImage
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ¨āĻĒā§āĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĒāĻĄāĻŧā§ āĻāĻŦāĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§:name
- āĻāĻŦāĻŋāĻ° āĻ¨āĻžāĻŽ,tag
- āĻāĻŽā§āĻ āĻā§āĻ¯āĻžāĻ,registry
- āĻāĻŽā§āĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋregistry_url
- āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ (https://
) āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻŋāĻ¤ā§āĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ,fqin
â āĻāĻŦāĻŋāĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¨āĨ¤
- āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž
findByName
āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ§āĻ°āĻ¨ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻĻ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§ (kind
) āĻāĻŦāĻ āĻ¨āĻžāĻŽ (name
) āĻāĻ¨āĻĒā§āĻ āĻĢāĻžāĻāĻ˛ āĻĨā§āĻā§āĨ¤ - āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž
findByLabels
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻĻ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§ (kind
) āĻāĻŦāĻ āĻ˛ā§āĻŦā§āĻ˛ (labels
).
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ YAML āĻāĻ¨āĻĒā§āĻ āĻĢāĻžāĻāĻ˛ āĻ˛ā§āĻĄ āĻāĻ°ā§ $$
āĻāĻŦāĻ āĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻāĻ°ā§ (jQuery āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻā§āĻļāĻ˛)āĨ¤
āĻāĻĒāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ: āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ¨ā§ āĻŦāĻŋāĻļā§āĻˇ āĻāĻžāĻˇāĻž āĻļā§āĻāĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯ā§āĻŽāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ˛ā§āĻļāĻ¨, āĻĢāĻžāĻāĻļāĻ¨ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤
āĻāĻāĻŋāĻ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻ¯ā§ āĻāĻĒāĻžāĻ°ā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻā§āĻāĻŋāĻ¨ā§āĻ° ES5 āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§, ES6 āĻ¨āĻ¯āĻŧāĨ¤
āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻāĻāĻāĻ¨ āĻŦāĻĄāĻŧ āĻ āĻ¨ā§āĻ°āĻžāĻā§ āĻ¨āĻž āĻšāĻ¨ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻļā§āĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŦāĻ āĻ¨ā§āĻ¤āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻˇāĻž āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨āĻĢā§āĻ¸ā§āĻā§āĻ° āĻĻāĻŋāĻā§ āĻ¨āĻāĻ° āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤āĨ¤
5. āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§āĻāĻŋāĻ¤āĻž
āĻāĻ¨āĻĢā§āĻ¸ā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĄā§āĻāĻž āĻā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ Kubernetes āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž/āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§āĻ¤āĨ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻāĻžāĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ
āĻāĻĒāĻ¨āĻŋ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨āĻĢā§āĻ¸ā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ 0.18.2 āĻāĻĒāĻ˛āĻŦā§āĻ§āĨ¤
āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻ āĻāĻŦāĻ āĻāĻĒāĻžāĻ°ā§āĻ° āĻŽāĻ¤ā§, āĻāĻ¨āĻĢā§āĻā§āĻ¸ā§āĻ āĻā§āĻ¨ā§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ¸ā§āĨ¤ āĻāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ¨ā§āĻ¤āĻŋ āĻ˛āĻŋāĻā§āĻ¨. āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ¤ā§, āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŦ āĻ¯ā§ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻāĻŦāĻŋāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¯ā§āĻā§āĻ¯ āĻāĻ¤ā§āĻ¸ āĻĨā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻžāĨ¤
āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ conftest-checks
, āĻāĻŦāĻ āĻāĻāĻŋāĻ¤ā§ - āĻ¨āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ check_image_registry.rego
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš:
package main
deny[msg] {
input.kind == "Deployment"
image := input.spec.template.spec.containers[_].image
not startswith(image, "my-company.com/")
msg := sprintf("image '%v' doesn't come from my-company.com repository", [image])
}
āĻāĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ base-valid.yaml
āĻĻā§āĻŦāĻžāĻ°āĻž conftest
:
$ conftest test --policy ./conftest-checks base-valid.yaml
FAIL - base-valid.yaml - image 'hashicorp/http-echo' doesn't come from my-company.com repository
1 tests, 1 passed, 0 warnings, 1 failure
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻāĻŋ āĻāĻļāĻžāĻ¨ā§āĻ°ā§āĻĒ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻžāĻ°āĻŖ āĻāĻŦāĻŋāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻā§āĻ¸ āĻĨā§āĻā§ āĻāĻ¸ā§āĻā§ā§ˇ
āĻ°ā§āĻā§ āĻĢāĻžāĻāĻ˛ā§, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŋ deny
. āĻāĻ° āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž āĻ˛āĻā§āĻāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻŦā§āĻ˛āĻ āĻāĻ°ā§ deny
āĻāĻāĻžāĻ§āĻŋāĻ, āĻĒā§āĻ°āĻ¤āĻŋāĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦāĻŋāĻ¤āĻž āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨āĻāĻžāĻŦā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§, āĻāĻŦāĻ āĻ¯ā§āĻā§āĻ¨ā§ āĻŦā§āĻ˛āĻā§āĻ° āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž āĻ˛āĻā§āĻāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻāĻāĻāĻĒā§āĻ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻ¨āĻĢāĻā§āĻ¸ā§āĻ JSON, TAP, āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻŦā§āĻ˛āĻžāĻ° āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ - āĻāĻāĻāĻŋ āĻā§āĻŦ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ CI āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨āĻā§āĻ˛āĻŋ āĻāĻŽā§āĻŦā§āĻĄ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ --output
.
āĻ¨ā§āĻ¤āĻŋ āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻ āĻ¸āĻšāĻāĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻ¨āĻĢā§āĻā§āĻ¸ā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻ°āĻ¯āĻŧā§āĻā§ā§ˇ --trace
. āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¸ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻ āĻāĻ°ā§ āĻ¯ā§ āĻā§āĻāĻžāĻŦā§ āĻāĻ¨āĻĢā§āĻ¸ā§āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¨ā§āĻ¤āĻŋ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°ā§āĨ¤
āĻāĻ¨ā§āĻā§āĻ¸ā§āĻ āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ OCI (āĻāĻĒā§āĻ¨ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻāĻ¨āĻŋāĻļāĻŋāĻ¯āĻŧā§āĻāĻŋāĻ) āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻŦāĻ āĻāĻžāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŽāĻžāĻ¨ā§āĻĄ push
и pull
āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻŦāĻž āĻĻā§āĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻ¸ā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĄāĻāĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻ¯ā§ āĻ¨ā§āĻ¤āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ āĻ¤āĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ conftest push
.
āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĄāĻāĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨:
$ docker run -it --rm -p 5000:5000 registry
āĻ
āĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¯āĻžāĻ¨ conftest-checks
āĻāĻŦāĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨:
$ conftest push 127.0.0.1:5000/amitsaha/opa-bundle-example:latest
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻŽāĻ¤ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨:
2020/06/10 14:25:43 pushed bundle with digest: sha256:e9765f201364c1a8a182ca637bc88201db3417bacc091e7ef8211f6c2fd2609c
āĻāĻāĻ¨ āĻāĻāĻāĻŋ āĻ
āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻ¤ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¨ conftest pull
. āĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤ā§āĻ°āĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻŦā§:
$ cd $(mktemp -d)
$ conftest pull 127.0.0.1:5000/amitsaha/opa-bundle-example:latest
āĻāĻāĻāĻŋ āĻ¸āĻžāĻŦāĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ
āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻŦā§ policy
, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨ā§āĻ¤āĻŋ āĻĢāĻžāĻāĻ˛ āĻ§āĻžāĻ°āĻŖāĻāĻžāĻ°ā§:
$ tree
.
âââ policy
âââ check_image_registry.rego
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
$ conftest test --update 127.0.0.1:5000/amitsaha/opa-bundle-example:latest base-valid.yaml
..
FAIL - base-valid.yaml - image 'hashicorp/http-echo' doesn't come from my-company.com repository
2 tests, 1 passed, 0 warnings, 1 failure
āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻĄāĻāĻžāĻ°āĻšāĻžāĻŦ āĻāĻāĻ¨āĻ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ˛ā§ āĻ¨āĻŋāĻā§āĻā§ āĻāĻžāĻā§āĻ¯āĻŦāĻžāĻ¨ āĻŽāĻ¨ā§ āĻāĻ°ā§āĻ¨
āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻ
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻžāĻ¨ā§ āĻ¨ā§āĻ¤āĻŋ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§āĻāĻŋāĻ¤āĻžāĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻžāĻ¨āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
6āĨ¤ āĻ§ā§āĻ°ā§āĻŦāĻ¤āĻžāĻ°āĻž
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻŦā§ āĻ¯ā§ āĻļā§āĻˇ āĻā§āĻ˛
āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŦāĻž āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻŽā§āĻĄā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯ā§āĻŽāĻ¨ āĻ āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°ā§āĻā§āĻ¨, āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻĨāĻŋāĻ°āĻāĻžāĻŦā§ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻŽā§āĻĄā§ āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨, āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻ¸ā§āĻ°āĻā§āĻˇāĻž āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻŽāĻ¤ā§ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻžāĻ° āĻāĻ°ā§ (āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ°ā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻĒ) āĻāĻĒāĻ˛āĻŦā§āĻ§āĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (āĻ¯ā§āĻŽāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻ, āĻāĻĒāĻžāĻ° āĻāĻŦāĻ āĻāĻ¨āĻĢā§āĻ¸ā§āĻā§)āĨ¤
āĻ āĻ¨ā§āĻ¯ āĻāĻĨāĻžāĻ¯āĻŧ, āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻāĻ¯āĻŧ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻā§āĻ˛ā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°ā§: āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻŦāĻ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§āĨ¤
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻŽā§āĻĄā§ āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 1.0.3 āĻāĻĒāĻ˛āĻŦā§āĻ§āĨ¤
āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ base-valid.yaml
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻš:
$ polaris audit --audit-path base-valid.yaml
āĻāĻāĻŋ āĻāĻāĻāĻŋ JSON āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻŦā§ āĻ¯ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻŦāĻŋāĻŦāĻ°āĻŖāĨ¤ āĻāĻāĻāĻĒā§āĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻžāĻ āĻžāĻŽā§ āĻĨāĻžāĻāĻŦā§:
{
"PolarisOutputVersion": "1.0",
"AuditTime": "0001-01-01T00:00:00Z",
"SourceType": "Path",
"SourceName": "test-data/base-valid.yaml",
"DisplayName": "test-data/base-valid.yaml",
"ClusterInfo": {
"Version": "unknown",
"Nodes": 0,
"Pods": 2,
"Namespaces": 0,
"Controllers": 2
},
"Results": [
/* Đ´ĐģиĐŊĐŊŅĐš ŅĐŋиŅĐžĐē */
]
}
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ°ā§āĻ° āĻŽāĻ¤ā§, āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻ¸ā§āĻ°āĻž āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨āĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°ā§ āĻ¨āĻž:
- āĻĒāĻĄ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤.
- āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻāĻŽā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ā§ āĻā§āĻ¯āĻžāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻ¨ā§āĻāĨ¤
- āĻ§āĻžāĻ°āĻāĻāĻŋ āĻ°ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
- āĻŽā§āĻŽāĻ°āĻŋ āĻāĻŦāĻ āĻ¸āĻŋāĻĒāĻŋāĻāĻ-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻŦāĻ āĻ¸ā§āĻŽāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻ¨ā§āĻāĨ¤
āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž, āĻ¤āĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§, āĻ¸āĻŽāĻžāĻ˛ā§āĻāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻĄāĻŋāĻā§āĻ°ā§ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ: āĻ¸āĻ¤āĻ°ā§āĻāĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻž āĻā§āĻāĻāĻŋ. āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻžāĻ¨āĻ¤ā§, āĻĒāĻĄāĻŧā§āĻ¨
āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨āĻž āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ --format score
. āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ 1 āĻĨā§āĻā§ 100 â āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻ°āĻŋāĻ¸āĻ°ā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¯āĻž āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻŦā§ āĻ¸ā§āĻā§āĻ° (āĻ
āĻ°ā§āĻĨāĻžā§ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨):
$ polaris audit --audit-path test-data/base-valid.yaml --format score
68
āĻ¸ā§āĻā§āĻ° 100 āĻāĻ° āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ, āĻ¸āĻŽā§āĻŽāĻ¤āĻŋāĻ° āĻĄāĻŋāĻā§āĻ°āĻŋ āĻ¤āĻ¤ āĻŦā§āĻļāĻŋāĨ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻā§āĻ¸āĻŋāĻ āĻā§āĻĄ āĻā§āĻ āĻāĻ°āĻ˛ā§ polaris audit
, āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻāĻāĻŋ 0 āĻāĻ° āĻ¸āĻŽāĻžāĻ¨āĨ¤
āĻāĻ°āĻž polaris audit
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ
-āĻļā§āĻ¨ā§āĻ¯ āĻā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
- āĻĒāĻ¤āĻžāĻāĻž
--set-exit-code-below-score
āĻāĻāĻāĻŋ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ 1-100 āĻĒāĻ°āĻŋāĻ¸āĻ°ā§ āĻāĻāĻāĻŋ āĻĨā§āĻ°ā§āĻļāĻšā§āĻ˛ā§āĻĄ āĻŽāĻžāĻ¨ āĻ¨ā§āĻ¯āĻŧā§ˇ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¸ā§āĻā§āĻ° āĻĨā§āĻ°ā§āĻļāĻšā§āĻ˛ā§āĻĄā§āĻ° āĻ¨ā§āĻā§ āĻĨāĻžāĻāĻ˛ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ 4-āĻāĻ° āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻˇ āĻšāĻŦā§āĨ¤ āĻ¯āĻāĻ¨ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋāĻā§ āĻĨā§āĻ°ā§āĻļāĻšā§āĻ˛ā§āĻĄ āĻŽāĻžāĻ¨ āĻĨāĻžāĻā§ (āĻŦāĻ˛ā§āĻ¨ 75) āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ° āĻ¨ā§āĻā§ āĻ¨ā§āĻŽā§ āĻā§āĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ¤āĻ°ā§āĻ āĻšāĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻāĻ¨ āĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻšāĻāĨ¤ - āĻĒāĻ¤āĻžāĻāĻž
--set-exit-code-on-danger
āĻŦāĻŋāĻĒāĻĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ˛ā§ āĻā§āĻĄ 3 āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻžāĻ°āĻŖ āĻšāĻŦā§āĨ¤
āĻāĻāĻ¨ āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ āĻ¯āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻ¯ā§ āĻāĻŦāĻŋāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻžāĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ YAML āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻāĻŋ āĻ¨āĻŋāĻā§āĻ JSON āĻ¸ā§āĻāĻŋāĻŽāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ YAML āĻ¸ā§āĻ¨āĻŋāĻĒā§āĻ āĻ¨āĻžāĻŽāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§ checkImageRepo
:
checkImageRepo:
successMessage: Image registry is valid
failureMessage: Image registry is not valid
category: Images
target: Container
schema:
'$schema': http://json-schema.org/draft-07/schema
type: object
properties:
image:
type: string
pattern: ^my-company.com/.+$
āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻžāĻŦā§ āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
successMessage
- āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ˛ā§ āĻāĻ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§;failureMessage
- āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻŦā§;category
- āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻžāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§:Images
,Health Checks
,Security
,Networking
иResources
;target
--- āĻā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° āĻŦāĻ¸ā§āĻ¤ā§ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ (spec
) āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŽāĻžāĻ¨:Container
,Pod
āĻŦāĻžController
;- āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¨āĻŋāĻā§āĻ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
schema
JSON āĻ¸ā§āĻāĻŋāĻŽāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ, āĻā§āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄpattern
āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻāĻāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻŋāĻ° āĻā§āĻ¸ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻāĻĒāĻ°ā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
checks:
checkImageRepo: danger
customChecks:
checkImageRepo:
successMessage: Image registry is valid
failureMessage: Image registry is not valid
category: Images
target: Container
schema:
'$schema': http://json-schema.org/draft-07/schema
type: object
properties:
image:
type: string
pattern: ^my-company.com/.+$
(polaris-conf.yaml
)
āĻāĻ˛ā§āĻ¨ āĻĢāĻžāĻāĻ˛ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻž āĻ¯āĻžāĻ:
- āĻā§āĻˇā§āĻ¤ā§āĻ°ā§
checks
āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻŽāĻžāĻ˛ā§āĻāĻ¨āĻžāĻ° āĻ¸ā§āĻ¤āĻ° āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻā§āĻ¸ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻŦāĻŋ āĻ¤ā§āĻ˛āĻž āĻšāĻ˛ā§ āĻ¸āĻ¤āĻ°ā§āĻ āĻāĻ°āĻž āĻŦāĻžāĻā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻžāĻ¨ā§ āĻ¸ā§āĻ¤āĻ°āĻāĻŋ āĻ¸ā§āĻ āĻāĻ°āĻŋdanger
. - āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¨āĻŋāĻā§āĻ
checkImageRepo
āĻ¤āĻžāĻ°āĻĒāĻ° āĻ āĻŦāĻā§āĻā§āĻā§ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧcustomChecks
.
āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨ custom_check.yaml
. āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ polaris audit
āĻāĻāĻāĻŋ YAML āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦā§āĻ§āĻ¤āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ base-valid.yaml
:
$ polaris audit --config custom_check.yaml --audit-path base-valid.yaml
āĻā§āĻŽ polaris audit
āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻĒāĻ°ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŦāĻŋāĻāĻŋ āĻ āĻŋāĻ āĻāĻ°ā§āĻ¨ my-company.com/http-echo:1.0
, āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻŦā§āĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸āĻš āĻāĻļāĻ¤ā§āĻšāĻžāĻ° āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻā§ image-valid-mycompany.yaml
.
āĻāĻāĻ¨ āĻĒā§āĻ°āĻļā§āĻ¨ āĻāĻ ā§āĻā§: āĻāĻžāĻ¸ā§āĻāĻŽāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻ¯āĻžāĻ¯āĻŧ? āĻ¸āĻšāĻā§ ! āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻĢāĻžāĻāĻ˛ā§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻā§āĻ¸ā§āĻ āĻāĻāĻĄāĻŋ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĢāĻ°ā§āĻŽ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻŦā§:
checks:
cpuRequestsMissing: warning
cpuLimitsMissing: warning
# Other inbuilt checks..
# ..
# custom checks
checkImageRepo: danger # !!!
customChecks:
checkImageRepo: # !!!
successMessage: Image registry is valid
failureMessage: Image registry is not valid
category: Images
target: Container
schema:
'$schema': http://json-schema.org/draft-07/schema
type: object
properties:
image:
type: string
pattern: ^my-company.com/.+$
(config_with_custom_check.yaml
)
āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻā§āĻ āĻāĻ°ā§āĻ¨ base-valid.yaml
, āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻŦāĻ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
$ polaris audit --config config_with_custom_check.yaml --audit-path base-valid.yaml
āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻā§ āĻĒāĻ°āĻŋāĻĒā§āĻ°āĻ āĻāĻ°ā§, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ āĻāĻāĻ¯āĻŧ āĻāĻāĻ¤ā§āĻ° āĻ¸ā§āĻ°āĻžāĻāĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻ āĻ¨ā§āĻ¯āĻĻāĻŋāĻā§, āĻ°ā§āĻā§ āĻŦāĻž āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻŽāĻ¤ā§ āĻāĻ°āĻ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻāĻžāĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻāĻžāĻ°āĻŖ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ°āĻ āĻĒāĻ°āĻŋāĻļā§āĻ˛āĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻŦāĻžāĻ§āĻž āĻĻā§āĻ¯āĻŧāĨ¤
āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻ¤āĻĨā§āĻ¯ āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻ¸āĻžāĻ°āĻžāĻāĻļ
Kubernetes YAML āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻ¯āĻžāĻāĻžāĻ āĻāĻŦāĻ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻ°āĻ¯āĻŧā§āĻā§, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻšāĻŦā§ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ§āĻžāĻ°āĻŖāĻž āĻĨāĻžāĻāĻž āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ.
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž Kubernetes āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻā§āĻ˛āĻŋ āĻ¨ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻā§āĻŦā§āĻāĻžāĻ˛ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻĒ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§. āĻāĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻŦā§ āĻ¯ā§ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ¸āĻāĻā§āĻāĻžāĻā§āĻ˛āĻŋ Kubernetes API āĻ¸ā§āĻāĻŋāĻŽāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻ˛ā§āĨ¤
āĻāĻāĻŦāĻžāĻ° āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ˛ā§, āĻāĻ°āĻ āĻĒāĻ°āĻŋāĻļā§āĻ˛āĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻŽāĻ¨ āĻāĻĻāĻ°ā§āĻļ āĻ¸ā§āĻ°āĻž āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻŽāĻ¤āĻŋāĨ¤ āĻāĻāĻžāĻ¨ā§āĻ āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ° āĻāĻŦāĻ āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻāĻžāĻā§ āĻāĻ¸āĻŦā§āĨ¤
āĻ¯āĻžāĻĻā§āĻ° āĻāĻāĻŋāĻ˛ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻā§āĻˇā§āĻŽ-āĻāĻŋāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯, āĻ¤āĻžāĻŽāĻž, āĻāĻ¨āĻĢāĻŋāĻ-āĻ˛āĻŋāĻ¨ā§āĻ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻā§āĻ¸ā§āĻ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻšāĻŦā§āĨ¤.
āĻāĻ¨āĻĢāĻā§āĻ¸ā§āĻ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°-āĻ˛āĻŋāĻ¨ā§āĻ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ YAML āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻ¯āĻāĻ¨ āĻ¤āĻžāĻŽāĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ¤ā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĻā§āĻ¯āĻŧ, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
āĻ āĻ¨ā§āĻ¯āĻĻāĻŋāĻā§, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋ āĻāĻ āĻā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻāĻŦāĻ āĻ¤āĻžāĻ, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤, āĻŦāĻž āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸āĻā§ āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¤āĻž āĻ¯ā§āĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤? āĻāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻā§āĻ¨ āĻāĻāĻ āĻāĻ¤ā§āĻ¤āĻ° āĻ¨ā§āĻ.
āĻ¨ā§āĻā§āĻ° āĻā§āĻŦāĻŋāĻ˛ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻā§āĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§:
āĻā§āĻ˛
āĻ¨āĻŋāĻ¯āĻŧāĻ¤āĻŋ
āĻā§āĻ˛āĻ¤ā§āĻ°ā§āĻāĻŋ
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻž
āĻā§āĻŦā§āĻŦāĻ˛
āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ API āĻ¸ā§āĻāĻŋāĻŽāĻž āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ YAML āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĻā§ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°ā§
CRD āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻž
āĻ¨āĻž
āĻā§āĻŦā§-āĻ¸ā§āĻā§āĻ°
āĻĒāĻžāĻ°ā§āĻ¸ YAML āĻ¸ā§āĻ°āĻž āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§
āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻĒāĻĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ Kubernetes API-āĻāĻ° āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻž
āĻ¨āĻž
āĻ¤āĻžāĻŽāĻž
YAML āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ¸ā§āĻāĻŽ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ā§āĻ°āĻŋāĻ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ
āĻā§āĻ¨ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻā§. āĻ¸ā§āĻŦāĻ˛ā§āĻĒ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨
āĻšāĻžāĻ
config-lint
YAML-āĻ āĻāĻŽāĻŦā§āĻĄ āĻāĻ°āĻž āĻāĻāĻāĻŋ āĻĄā§āĻŽā§āĻ¨-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻžāĻ āĻžāĻŽā§āĨ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ (āĻ¯ā§āĻŽāĻ¨ Terraform)
āĻā§āĻ¨ā§ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¨ā§āĻāĨ¤ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĻāĻžāĻŦā§ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻžāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻšāĻžāĻ
āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§āĻāĻŋāĻ¤āĻž
āĻ°ā§āĻā§āĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ (āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻāĻžāĻˇāĻž)āĨ¤ OCI āĻŦāĻžāĻ¨ā§āĻĄā§āĻ˛ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒāĻ˛āĻŋāĻ¸āĻŋ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ
āĻā§āĻ¨ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻā§. āĻ°ā§āĻā§ āĻļāĻŋāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¨ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĄāĻāĻžāĻ° āĻšāĻžāĻŦ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ
āĻšāĻžāĻ
āĻ§ā§āĻ°ā§āĻŦāĻ¤āĻžāĻ°āĻž
YAML āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°ā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ¸ā§āĻ°āĻž āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻžāĻā§ JSON āĻ¸ā§āĻāĻŋāĻŽāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ
JSON āĻ¸ā§āĻāĻŋāĻŽāĻž-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻžāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻšāĻžāĻ
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻā§āĻ˛āĻā§āĻ˛āĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¸āĻšāĻāĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ¤ā§āĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ˛ā§āĻāĻāĻĻā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĻā§āĻ°ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
āĻ āĻ¨ā§āĻŦāĻžāĻĻāĻ āĻĨā§āĻā§ PS
āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ˛āĻā§āĻ āĻĒāĻĄāĻŧā§āĻ¨:
- ÂĢ
āĻĒā§āĻ˛āĻžāĻ°āĻŋāĻ¸ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻā§ āĻ¸ā§āĻ¸ā§āĻĨ āĻ°āĻžāĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻā§ "; - ÂĢ
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ YAML āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻš Vim "; - ÂĢ
Google-āĻāĻ° 7āĻāĻŋ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻ¸ā§āĻ°āĻž āĻ āĻā§āĻ¯āĻžāĻ¸ Âģ.
āĻāĻ¤ā§āĻ¸: www.habr.com