เชจเซเซ เชง. เช เชจเซเชตเชพเชฆ: K8s เชชเชฐเซเชฏเชพเชตเชฐเชฃเซ เชฎเชพเชเซ YAML เชฐเซเชชเชฐเซเชเชพเชเชเชจเซเชจเซ เชตเชงเชคเซ เชเชคเซ เชธเชเชเซเชฏเชพ เชธเชพเชฅเซ, เชคเซเชฎเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชเชพเชธเชฃเซเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชค เชตเชงเซเชจเซ เชตเชงเซ เชคเชพเชเซเชฆเชจเซ เชฌเชจเซ เชฐเชนเซ เชเซ. เช เชธเชฎเซเชเซเชทเชพเชจเชพ เชฒเซเชเชเซ เช เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชฎเชพเชคเซเชฐ เชนเชพเชฒเชจเชพ เชธเซเชฒเซเชฏเซเชถเชจเซเชธ เช เชชเชธเชเชฆ เชเชฐเซเชฏเชพ เชจเชฅเซ, เชชเชฐเชเชคเซ เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชชเชฃ เชเซเชฏเซเช เชเซ. เช เชตเชฟเชทเชฏเชฎเชพเช เชฐเชธ เชงเชฐเชพเชตเชคเชพ เชฒเซเชเซ เชฎเชพเชเซ เชคเซ เชเซเชฌ เช เชฎเชพเชนเชฟเชคเซเชชเซเชฐเชฆ เชนเซเชตเชพเชจเซเช เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ.
TL; DR: เช เชฒเซเช เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฏเชพเชธเซ เช เชจเซ เชเชตเชถเซเชฏเชเชคเชพเช เชธเชพเชฎเซ เชเซเชฌเชฐเชจเซเชเซเชธ YAML เชซเชพเชเชฒเซเชจเซ เชฎเชพเชจเซเชฏ เช เชจเซ เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชธเซเชฅเชฟเชฐ เชธเชพเชงเชจเซเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซ เชเซ.
เชเซเชฌเชฐเชจเซเชเซเชธ เชตเชฐเซเชเชฒเซเชก เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ YAML เชฆเชธเซเชคเชพเชตเซเชเซเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. YAML เชจเซ โโเชธเชฎเชธเซเชฏเชพเชเชฎเชพเชเชจเซ เชเช เชฎเซเชจเชฟเชซเซเชธเซเช เชซเชพเชเชฒเซ เชตเชเซเชเซเชจเชพ เช
เชตเชฐเซเชงเซ เช
เชฅเชตเชพ เชธเชเชฌเชเชงเซเชจเซ เชธเซเชชเชทเซเช เชเชฐเชตเชพเชฎเชพเช เชฎเซเชถเซเชเซเชฒเซ เชเซ.
เชเซ เชเชชเชฃเซ เชเชพเชคเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เชเซ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชฌเชงเซ เชเชฌเซเช เชตเชฟเชถเซเชตเชธเชจเซเชฏ เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเชเชฅเซ เชเชตเซ เชเซ?
PodDisruptionBudgets เชจ เชนเซเชฏ เชคเซเชตเชพ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชนเซเช เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชฎเซเชเชฒเชคเชพ เชเซเชตเซ เชฐเซเชคเซ เชฐเซเชเซ เชถเชเซเช?
เชธเซเชเซเชเชฟเช เชเซเชธเซเชเชฟเชเชเชจเซเช เชเชเซเชเชฐเชฃ เชคเชฎเชจเซ เชตเชฟเชเชพเชธเชจเชพ เชคเชฌเชเซเชเซ เชญเซเชฒเซ เช เชจเซ เชจเซเชคเชฟเชจเชพ เชเชฒเซเชฒเชเชเชจเซเชจเซ เชเชณเชเชตเชพ เชฆเซ เชเซ. เช เชฌเชพเชเชฏเชงเชฐเซ เชตเชงเชพเชฐเซ เชเซ เชเซ เชธเชเชธเชพเชงเชจ เชตเซเชฏเชพเชเซเชฏเชพเช เชธเชพเชเซ เช เชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชเซ, เช เชจเซ เชเชคเซเชชเชพเชฆเชจ เชตเชฐเซเชเชฒเซเชก เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเชเชจเซเช เชชเชพเชฒเชจ เชเชฐเชถเซ เชคเซเชตเซ เชถเชเซเชฏเชคเชพ เชตเชงเชพเชฐเซ เชเซ.
เชเซเชฌเชฐเชจเซเชเซเชธ เชธเซเชเซเชเชฟเช YAML เชซเชพเชเชฒ เชจเชฟเชฐเซเชเซเชทเชฃ เชเชเซเชธเชฟเชธเซเชเชฎเชจเซ เชจเซเชเซเชจเซ เชถเซเชฐเซเชฃเซเชเชฎเชพเช เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ:
- API เชฎเชพเชจเซเชฏเชเชฐเซเชคเชพเช. เช เชเซเชเซเชเชฐเซเชจเชพ เชธเชพเชงเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ API เชธเชฐเซเชตเชฐเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเซ เชธเชพเชฎเซ YAML เชฎเซเชจเชฟเชซเซเชธเซเช เชคเชชเชพเชธเซ เชเซ.
- เชคเซเชฏเชพเชฐ เชชเชฐเซเชเซเชทเชเซ. เช เชเซเชเซเชเชฐเซเชจเชพ เชธเชพเชงเชจเซ เชธเซเชฐเชเซเชทเชพ, เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเชเชจเซเช เชชเชพเชฒเชจ เชตเชเซเชฐเซ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชชเชฐเซเชเซเชทเชฃเซ เชธเชพเชฅเซ เชเชตเซ เชเซ.
- เชเชธเซเชเชฎ เชฎเชพเชจเซเชฏเชเชฐเซเชคเชพเช. เช เชเซเชเซเชเชฐเซเชจเชพ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเช เชคเชฎเชจเซ เชตเชฟเชตเชฟเชง เชญเชพเชทเชพเชเชฎเชพเช เชเชธเซเชเชฎ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฐเซเชเซ เช เชจเซ เชเชพเชตเชพเชธเซเชเซเชฐเชฟเชชเซเช.
เช เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เช เชเซเชฆเชพ เชเซเชฆเชพ เชธเชพเชงเชจเซเชจเซเช เชตเชฐเซเชฃเชจ เช เชจเซ เชคเซเชฒเชจเชพ เชเชฐเซเชถเซเช:
- เชเซเชฌเซเชตเชฒ;
- เชเซเชฏเซเชฌ-เชธเซเชเซเชฐ;
- 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)
เชเซ เชธเชซเชณ เชฅเชพเชฏ, เชคเซ เชเซเชฌเซเชตเชฒ เชเชเซเชเชฟเช เชเซเชก 0 เชธเชพเชฅเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชเชถเซ. เชคเชฎเซ เชคเซเชจเซ เชจเซเชเซ เชชเซเชฐเชฎเชพเชฃเซ เชเชเชพเชธเซ เชถเชเซ เชเซ:
$ 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
เชธเชเชธเชพเชงเชจเชจเซ เชเชเชพเชธเชฃเซ เชฅเช เชฐเชนเซ เชจเชฅเซ.
API เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฎเชพเชตเช 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-version
:
$ kubeval --kubernetes-version 1.16.1 base-valid.yaml
เชเซเชชเชพ เชเชฐเซเชจเซ เชจเซเชเชงเซ เชเซ เชธเชเชธเซเชเชฐเชฃ เชซเซเชฐเซเชฎเซเชเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชนเซเชตเซเช เชเชตเชถเซเชฏเช เชเซ Major.Minor.Patch
.
เชธเชเชธเซเชเชฐเชฃเซเชจเซ เชธเซเชเชฟ เชฎเชพเชเซ เชเซ เชเซเชจเชพ เชฎเชพเชเซ เชเชเชพเชธเชฃเซ เชธเชฎเชฐเซเชฅเชฟเชค เชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชธเชเชฆเชฐเซเชญ เชฒเซ --schema-location
.
เชตเซเชฏเชเซเชคเชฟเชเชค YAML เชซเชพเชเชฒเซ เชเชชเชฐเชพเชเชค, kubeval เชกเชฟเชฐเซเชเซเชเชฐเซเช เช เชจเซ stdin เชธเชพเชฅเซ เชชเชฃ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชเซ.
เชตเชงเซเชฎเชพเช, เชเซเชฌเซเชตเชฒ เชธเชฐเชณเชคเชพเชฅเซ CI เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชเชเซเชเซเชค เชฅเชพเชฏ เชเซ. เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชฎเซเชจเชฟเชซเซเชธเซเช เชฎเซเชเชฒเชคเชพ เชชเชนเซเชฒเชพ เชชเชฐเซเชเซเชทเชฃเซ เชเชฒเชพเชตเชตเชพ เชเชเซเชเชคเชพ เชฒเซเชเซเชจเซ เช เชเชพเชฃเซเชจเซ เชเชจเชเชฆ เชฅเชถเซ เชเซ เชเซเชฌเซเชตเชฒ เชคเซเชฐเชฃ เชเชเชเชชเซเช เชซเซเชฐเซเชฎเซเชเชจเซ เชธเชชเซเชฐเซเช เชเชฐเซ เชเซ:
- เชธเชพเชฆเซ เชฒเชเชพเชฃ;
- JSON;
- เชเชเชเชชเชฃ เชชเซเชฐเซเชเซเชเซเชฒเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซ (TAP).
เช เชจเซ เชเชเซเชเชฟเชค เชชเซเชฐเชเชพเชฐเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซเชจเซ เชธเชพเชฐเชพเชเชถ เชเชจเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชเชเชชเซเชเชจเชพ เชตเชงเซ เชชเชฆเชเซเชเซเชฆเชจ เชฎเชพเชเซ เชเซเชเชชเชฃ เชซเซเชฐเซเชฎเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชเซเชฌเซเชตเชฒเชจเซ เชเชพเชฎเซเชเชฎเชพเชเชจเซ เชเช เช เชเซ เชเซ เชคเซ เชนเชพเชฒเชฎเชพเช เชเชธเซเชเชฎ เชฐเชฟเชธเซเชฐเซเชธ เชกเซเชซเชฟเชจเซเชถเชจ (CRDs) เชธเชพเชฅเซ เช
เชจเซเชชเชพเชฒเชจ เชฎเชพเชเซ เชคเชชเชพเชธ เชเชฐเซ เชถเชเชคเซเช เชจเชฅเซ. เชเซ เชเซ, เชเซเชฌเซเชตเชฒเชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเชตเซเช เชถเชเซเชฏ เชเซ
เชเซเชฌเซเชตเชฒ เช เชธเชเชธเชพเชงเชจเซเชจเซ เชเชเชพเชธเชฃเซ เช เชจเซ เชฎเซเชฒเซเชฏเชพเชเชเชจ เชฎเชพเชเซเชจเซเช เชเช เชเชคเซเชคเชฎ เชธเชพเชงเชจ เชเซ; เชเซ เชเซ, เช เชตเชพเชค เชชเชฐ เชญเชพเชฐ เชฎเซเชเชตเซ เชเซเชเช เชเซ เชชเชฐเซเชเซเชทเชฃ เชชเชพเชธ เชเชฐเชตเซเช เช เชฌเชพเชเชนเซเชงเชฐเซ เชเชชเชคเซเช เชจเชฅเซ เชเซ เชธเชเชธเชพเชงเชจ เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเชเชจเซเช เชชเชพเชฒเชจ เชเชฐเซ เชเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ 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 เชเซเชฌเซเชตเชฒ เชชเชฐเซเชเซเชทเชฃเซ เชชเชพเชธ เชเชฐเซ เชเซ, เชเซเชฏเชพเชฐเซ เชเซเชฌเซ-เชธเซเชเซเชฐ เชจเซเชเซเชจเซ เชเชพเชฎเซเช เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซเชถ เชเชฐเซ เชเซ:
- เชคเซเชฏเชพเชฐเซ เชคเชชเชพเชธเซ เชเซเช เชตเซเชฒ เชจเชฅเซ.
- CPU เชธเชเชธเชพเชงเชจเซ เช เชจเซ เชฎเซเชฎเชฐเซ เชฎเชพเชเซ เชเซเช เชตเชฟเชจเชเชคเซเช เช เชฅเชตเชพ เชฎเชฐเซเชฏเชพเชฆเชพเช เชจเชฅเซ.
- เชชเซเชก เชตเชฟเชเซเชทเซเชช เชฌเชเซเช เชเชฒเซเชฒเซเชเชฟเชค เชจเชฅเซ.
- เช เชฒเช เชฅเชตเชพเชจเชพ เชเซเช เชจเชฟเชฏเชฎเซ เชจเชฅเซ (เชธเชฌเชเชง เชตเชฟเชฐเซเชงเซ) เชเชชเชฒเชฌเซเชงเชคเชพ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชเซ.
- เชเชจเซเชเซเชจเชฐ เชฐเซเช เชคเชฐเซเชเซ เชเชพเชฒเซ เชเซ.
เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชตเชงเซ เชเชพเชฐเซเชฏเชเซเชทเชฎ เช เชจเซ เชญเชฐเซเชธเชพเชชเชพเชคเซเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เช เชเชพเชฎเซเช เชตเชฟเชถเซเชจเชพ เชคเชฎเชพเชฎ เชฎเชพเชจเซเชฏ เชฎเซเชฆเซเชฆเชพเช เชเซ เชเซเชจเซ เชธเชเชฌเซเชงเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชเซเชฎ kube-score
เชคเชฎเชพเชฎ เชชเซเชฐเชเชพเชฐเชจเชพ เชเชฒเซเชฒเชเชเชจเซ เชธเชนเชฟเชค เชฎเชพเชจเชต เชตเชพเชเชเซ เชถเชเชพเชฏ เชคเซเชตเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฎเชพเชนเชฟเชคเซ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเซ เชเซ เชเซเชคเชตเชฃเซ ะธ เชเซเชฐเชฟเชเชฟเชเชฒ, เชเซ เชตเชฟเชเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชฃเซ เชฎเชฆเชฆ เชเชฐเซ เชเซ.
CI เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เช เชธเชพเชงเชจเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชเชเซเชเชคเชพ เชฒเซเชเซ เชซเซเชฒเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเชงเซ เชธเชเชเซเชเชฟเชค เชเชเชเชชเซเชเชจเซ เชธเชเซเชทเชฎ เชเชฐเซ เชถเชเซ เชเซ --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 เชธเชเชธเซเชเชฐเชฃเซ (เชเซเชฌเซเชตเชฒเชจเซ เชเซเชฎ) เชธเชพเชฅเซ เช เชจเซเชชเชพเชฒเชจ เชฎเชพเชเซ เชธเชเชธเชพเชงเชจเซ เชคเชชเชพเชธเชตเชพเชจเซเช เชถเชเซเชฏ เชเซ. เชเซ เชเซ, เช เชฎเชพเชนเชฟเชคเซ เชเซเชฌเซ-เชธเซเชเซเชฐเชฎเชพเช เช เชนเชพเชฐเซเชกเชเซเชก เชเชฐเซเชฒเซ เชเซ: เชคเชฎเซ เชเซเชฌเชฐเชจเซเชเซเชธเชจเซเช เช เชฒเช เชธเชเชธเซเชเชฐเชฃ เชชเชธเชเชฆ เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ. เชเซ เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชเซเชฒเชธเซเชเชฐเชจเซ เช เชชเชเซเชฐเซเชก เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซเชต เช เชฅเชตเชพ เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ K8s เชจเซ เชตเชฟเชตเชฟเชง เชเชตเซเชคเซเชคเชฟเช เชธเชพเชฅเซ เชฌเชนเซเชตเชฟเชง เชเซเชฒเชธเซเชเชฐ เชนเซเชฏ เชคเซ เช เชฎเชฐเซเชฏเชพเชฆเชพ เชฎเซเชเซ เชธเชฎเชธเซเชฏเชพ เชฌเชจเซ เชถเชเซ เชเซ.
เชคเซ เชจเซเชเชง เชฒเซ
เชชเชนเซเชฒเซเชฅเซ เช เชเช เชธเชฎเชธเซเชฏเชพ เชเซ เช เชคเชเชจเซ เชธเชพเชเชพเชฐ เชเชฐเชตเชพเชจเซ เชฆเชฐเชเชพเชธเซเชค เชธเชพเชฅเซ.
เชเซเชฌเซ-เชธเซเชเซเชฐ เชตเชฟเชถเซ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ เช
เชนเซเช เชฎเชณเซ เชถเชเซ เชเซ
เชเซเชฌเซ-เชธเซเชเซเชฐ เชชเชฐเซเชเซเชทเชฃเซ เชถเซเชฐเซเชทเซเช เชชเซเชฐเซเชเซเชเชฟเชธเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เชฎเชพเชเซ เชเช เชถเซเชฐเซเชทเซเช เชธเชพเชงเชจ เชเซ, เชชเชฐเชเชคเซ เชเซ เชคเชฎเชพเชฐเซ เชชเชฐเซเชเซเชทเชฃเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเชฐเชตเชพเชจเซ เช เชฅเชตเชพ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชจเชฟเชฏเชฎเซ เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เชคเซ เชถเซเช? เช เชฐเซ, เช เชเชฐเซ เชถเชเชพเชคเซเช เชจเชฅเซ.
เชเซเชฌเซ-เชธเซเชเซเชฐ เชเชเซเชธเซเชเซเชจเซเชธเชฟเชฌเชฒ เชจเชฅเซ: เชคเชฎเซ เชคเซเชฎเชพเช เชจเซเชคเชฟเช เชเชฎเซเชฐเซ เชถเชเชคเชพ เชจเชฅเซ เช เชฅเชตเชพ เชคเซเชจเซ เชธเชฎเชพเชฏเซเชเชฟเชค เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ.
เชเซ เชคเชฎเชพเชฐเซ เชเชเชชเชจเซเชจเซ เชจเซเชคเชฟเชเชจเซเช เชชเชพเชฒเชจ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชเชธเซเชเชฎ เชชเชฐเซเชเซเชทเชฃเซ เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซ เชคเชฎเซ เชจเซเชเซเชจเชพ เชเชพเชฐ เชธเชพเชงเชจเซเชฎเชพเชเชฅเซ เชเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ: config-lint, copper, confest, เช เชฅเชตเชพ polaris.
3.เชเซเชจเซเชซเชฟเช-เชฒเชฟเชจเซเช
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
- เชเชฆเชพเช เชจเชฟเชทเซเชซเชณเชคเชพ, เชเซเชคเชตเชฃเซ ะธ เชฌเชฟเชจ เชธเซเชธเชเชเชค;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 เชจเซ เชเชชเชฏเซเช เชเชฐเชคเซเช เชจเชฅเซ. เชคเซเชจเชพ เชฌเชฆเชฒเซ เชเชพเชตเชพเชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชเซเชธเซเช เชฒเชเซ เชถเชเชพเชฏ เชเซ. เชเซเชชเชฐ เชเชฃเชพ เชฎเซเชณเชญเซเชค เชธเชพเชงเชจเซ เชธเชพเชฅเซ เชชเซเชธเซเชคเชเชพเชฒเชฏ เชชเซเชฐเซเช เชชเชพเชกเซ เชเซ, เชเซ เชคเชฎเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชฌเซเชเซเชเซเชเซเชธ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชตเชพเชเชเชตเชพเชฎเชพเช เช เชจเซ เชญเซเชฒเซเชจเซ เชเชพเชฃ เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ.
เชเซเชชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเชพเช เชชเชเชฒเชพเชเช เชเชฎเชพเช เชฎเชณเซ เชถเชเซ เชเซ
2.0.1 เช เชฎเซเชณ เชฒเซเช เชฒเชเชคเซ เชตเชเชคเซ เช เชเชชเชฏเซเชเชฟเชคเชพเชจเซเช เชจเชตเซเชจเชคเชฎ เชชเซเชฐเชเชพเชถเชจ เชเซ.
config-lint เชจเซ เชเซเชฎ, Copper เชชเชพเชธเซ เชฌเชฟเชฒเซเช-เชเชจ เชชเชฐเซเชเซเชทเชฃเซ เชจเชฅเซ. เชเชพเชฒเซ เชเช เชฒเชเซเช. เชคเซเชจเซ เชคเชชเชพเชธเชตเชพ เชฆเซ เชเซ เชเชฎเชพเชตเช เชซเชเซเชค เชตเชฟเชถเซเชตเชธเชจเซเชฏ เชญเชเชกเชพเชฐเชฎเชพเชเชฅเซ เชเชจเซเชเซเชจเชฐ เชเชฌเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ 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 เช
เชจเซเชญเชต เชงเชฐเชพเชตเชคเชพ เชฒเซเชเซ เชฎเชพเชเซ เชเช เชชเชฐเชฟเชเชฟเชค เชเซเชเชจเชฟเช).
เชเซเชชเชฐเชจเซ เชฎเซเชเซเชฏ เชซเชพเชฏเชฆเซ เชธเซเชชเชทเซเช เชเซ: เชคเชฎเชพเชฐเซ เชตเชฟเชถเชฟเชทเซเช เชญเชพเชทเชพเชฎเชพเช เชจเชฟเชชเซเชฃเชคเชพ เชฎเซเชณเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ เช เชจเซ เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชตเชฟเชตเชฟเชง JavaScript เชธเซเชตเชฟเชงเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ, เชเซเชฎ เชเซ เชธเซเชเซเชฐเชฟเชเช เชเชจเซเชเชฐเชชเซเชฒเซเชถเชจ, เชซเชเชเซเชถเชจเซเชธ เชตเชเซเชฐเซ.
เช เชชเชฃ เชจเซเชเชงเชตเซเช เชเซเชเช เชเซ เชเซเชชเชฐเชจเซเช เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃ JavaScript เชเชจเซเชเชฟเชจเชจเชพ ES5 เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ, ES6 เชธเชพเชฅเซ เชจเชนเซเช.
เชชเชฐ เชเชชเชฒเชฌเซเชง เชตเชฟเชเชคเซ
เชเซ เชเซ, เชเซ เชคเชฎเชจเซ เชเชฐเซเชเชฐ JavaScript เชชเชธเชเชฆ เชจ เชนเซเชฏ เช เชจเซ เชเซเชตเซเชฐเซ เชฌเชจเชพเชตเชตเชพ เช เชจเซ เชจเซเชคเชฟเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชธ เชฐเชเชพเชฏเซเชฒ เชญเชพเชทเชพ เชชเชธเชเชฆ เชเชฐเซ, เชคเซ เชคเชฎเชพเชฐเซ เชเซเชจเซเชเซเชธเซเช เชชเชฐ เชงเซเชฏเชพเชจ เชเชชเชตเซเช เชเซเชเช.
5. เชเซเชจเซเชซเซเชธเซเช
เชเซเชจเซเชซเชเซเชธเซเช เช เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชกเซเชเชพเชจเชพ เชชเชฐเซเชเซเชทเชฃ เชฎเชพเชเซเชจเซเช เชฎเชพเชณเชเซเช เชเซ. Kubernetes เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ เชเชเชพเชธเชฃเซ/เชเชเชพเชธเชฃเซ เชฎเชพเชเซ เชชเชฃ เชฏเซเชเซเชฏ. เชชเชฐเซเชเซเชทเชฃเซเชจเซเช เชตเชฐเซเชฃเชจ เชตเชฟเชถเชฟเชทเซเช เชเซเชตเซเชฐเซ เชญเชพเชทเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ
เชคเชฎเซ confest เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชถเชเซ เชเซ
เชฎเซเชณ เชฒเซเช เชฒเชเชคเซ เชตเชเชคเซ, เชเชชเชฒเชฌเซเชง เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃ 0.18.2 เชนเชคเซเช.
config-lint เช เชจเซ copper เชจเซ เชเซเชฎ เช, เชเซเชจเซเชเซเชธเซเช เชเซเชเชชเชฃ เชฌเชฟเชฒเซเช-เชเชจ เชเซเชธเซเช เชตเชฟเชจเชพ เชเชตเซ เชเซ. เชเชพเชฒเซ เชคเซเชจเซ เช เชเชฎเชพเชตเซเช เช เชจเซ เชเชชเชฃเซ เชชเซเชคเชพเชจเซ เชจเซเชคเชฟ เชฒเชเซเช. เช เชเชพเชเชจเชพ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชเซเชฎ, เช เชฎเซ เชคเชชเชพเชธ เชเชฐเซเชถเซเช เชเซ เชเชจเซเชเซเชจเชฐเชจเซ เชเชฌเซเช เชตเชฟเชถเซเชตเชธเชจเซเชฏ เชธเซเชคเซเชฐเซเชคเชฎเชพเชเชฅเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชเซเชฎ.
เชกเชฟเชฐเซเชเซเชเชฐเซ เชฌเชจเชพเชตเซ 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
เชเชฎเชจเชธเซเชฌเซ, DockerHub เชนเชเซ เชธเซเชงเซ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ. เชคเซเชฅเซ เชเซ เชคเชฎเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ เชคเซ เชคเชฎเชพเชฐเซ เชเชพเชคเชจเซ เชจเชธเซเชฌเชฆเชพเชฐ เชฎเชพเชจเซ
เชเชฐเซเชเชฟเชซเซเชเซเช เชซเซเชฐเซเชฎเซเช เชเซเชตเซเช เช เชเซ
เชคเชฎเซ เชชเซเชฒเชฟเชธเซ เชถเซเชฐเชฟเชเช เช
เชจเซ เชเซเชจเซเชเซเชธเซเชเชจเซ เช
เชจเซเชฏ เชธเซเชตเชฟเชงเชพเช เชตเชฟเชถเซ เช
เชนเซเช เชตเชงเซ เชเชพเชฃเซ เชถเชเซ เชเซ
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": [
/* ะดะปะธะฝะฝัะน ัะฟะธัะพะบ */
]
}
เชธเชเชชเซเชฐเซเชฃ เชเชเชเชชเซเช เชเชชเชฒเชฌเซเชง เชเซ
เชเซเชฏเซเชฌเซ-เชธเซเชเซเชฐเชจเซ เชเซเชฎ, เชชเซเชฒเชพเชฐเชฟเชธ เชเชตเชพ เชเซเชทเซเชคเซเชฐเซเชจเซ เชธเชฎเชธเซเชฏเชพเชเชจเซ เชเชณเชเซ เชเซ เชเซเชฏเชพเช เชฎเซเชจเชฟเชซเซเชธเซเช เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเชเชจเซ เชชเซเชฐเซเชฃ เชเชฐเชคเซเช เชจเชฅเซ:
- เชถเซเชเชเซ เชฎเชพเชเซ เชเซเช เชเชฐเซเชเซเชฏ เชคเชชเชพเชธ เชจเชฅเซ.
- เชเชจเซเชเซเชจเชฐ เชเชฌเซเช เชฎเชพเชเซ เชเซ เชเซเชธ เชเชฒเซเชฒเซเชเชฟเชค เชจเชฅเซ.
- เชเชจเซเชเซเชจเชฐ เชฐเซเช เชคเชฐเซเชเซ เชเชพเชฒเซ เชเซ.
- เชฎเซเชฎเชฐเซ เช เชจเซ CPU เชฎเชพเชเซเชจเซ เชตเชฟเชจเชเชคเซเช เช เชจเซ เชฎเชฐเซเชฏเชพเชฆเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชจเชฅเซ.
เชฆเชฐเซเช เชชเชฐเซเชเซเชทเชฃ, เชคเซเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซเชจเชพ เชเชงเชพเชฐเซ, เชจเชฟเชฐเซเชฃเชพเชฏเชเชคเชพเชจเซ เชกเชฟเชเซเชฐเซ เชธเซเชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ: เชเซเชคเชตเชฃเซ เช
เชฅเชตเชพ เชญเชฏ. เชเชชเชฒเชฌเซเชง เชฌเชฟเชฒเซเช-เชเชจ เชชเชฐเซเชเซเชทเชฃเซ เชตเชฟเชถเซ เชตเชงเซ เชเชพเชฃเชตเชพ เชฎเชพเชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชธเชเชฆเชฐเซเชญ เชฒเซ
เชเซ เชตเชฟเชเชคเซเชจเซ เชเชฐเซเชฐ เชจเชฅเซ, เชคเซ เชคเชฎเซ เชงเซเชตเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเซ เชเซ --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
เชชเซเชฒเชพเชฐเชฟเชธ เชเชธเซเชเชฎ เชเซเชธเซเช เชธเชพเชฅเซ เชฌเชฟเชฒเซเช-เชเชจ เชเซเชธเซเชเชจเซ เชชเซเชฐเช เชฌเชจเชพเชตเซ เชเซ, เชคเซเชฏเชพเชเชฅเซ เชฌเชเชจเซ เชตเชฟเชถเซเชตเชจเชพ เชถเซเชฐเซเชทเซเช เชจเซ เชธเชเชฏเซเชเชฟเชค เชเชฐเซ เชเซ.
เชฌเซเชเซ เชฌเชพเชเซ, เชฐเซเชเซ เช เชฅเชตเชพ เชเชพเชตเชพเชธเซเชเซเชฐเชฟเชชเซเช เชเซเชตเซ เชตเชงเซ เชถเชเซเชคเชฟเชถเชพเชณเซ เชญเชพเชทเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เช เชธเชฎเชฐเซเชฅเชคเชพ เชตเชงเซ เช เชคเซเชฏเชพเชงเซเชจเชฟเช เชชเชฐเซเชเซเชทเชฃเซเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃเชจเซ เช เชเชเชพเชตเชคเซเช เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชชเชฐเชฟเชฌเชณ เชฌเชจเซ เชถเชเซ เชเซ.
เชชเซเชฒเชพเชฐเชฟเชธ เชตเชฟเชถเซ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ เช
เชนเซเช เชเชชเชฒเชฌเซเชง เชเซ
เชธเชพเชฐเชพเชเชถ
เชเซเชฏเชพเชฐเซ เชเซเชฌเชฐเชจเซเชเซเชธ YAML เชซเชพเชเชฒเซเชจเซเช เชจเชฟเชฐเซเชเซเชทเชฃ เช เชจเซ เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฃเชพ เชธเชพเชงเชจเซ เชเชชเชฒเชฌเซเชง เชเซ, เชชเชฐเซเชเซเชทเชฃเซเชจเซ เชฐเชเชจเชพ เช เชจเซ เช เชฎเชฒ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เชคเซเชจเซ เชธเซเชชเชทเซเช เชธเชฎเช เชนเซเชตเซ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซ เชคเชฎเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชคเชพ เชเซเชฌเชฐเชจเซเชเซเชธ เชฎเซเชจเชฟเชซเซเชธเซเช เชฒเซ เชเซ, เชคเซ เชเซเชฌเซเชตเชฒ เชเชตเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชชเซเชฐเชฅเชฎ เชชเชเชฒเซเช เชนเซเช เชถเชเซ เชเซ. เชคเซ เชเชฌเซเชเซเชเซเช เชตเซเชฏเชพเชเซเชฏเชพเช เชเซเชฌเชฐเชจเซเชเซเชธ API เชธเซเชเซเชฎเชพเชจเซ เช เชจเซเชฐเซเชช เชเซ เชเซ เชเซเชฎ เชคเซเชจเซเช เชจเชฟเชฐเซเชเซเชทเชฃ เชเชฐเชถเซ.
เชเชเชตเชพเชฐ เชเชตเซ เชธเชฎเซเชเซเชทเชพ เชชเซเชฐเซเชฃ เชฅเช เชเชพเชฏ เชชเชเซ, เชตเซเชฏเชเซเชคเชฟ เชตเชงเซ เช เชคเซเชฏเชพเชงเซเชจเชฟเช เชชเชฐเซเชเซเชทเชฃเซ เชคเชฐเชซ เชเชเชณ เชตเชงเซ เชถเชเซ เชเซ, เชเซเชฎ เชเซ เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเช เช เชจเซ เชเซเชเซเชเชธ เชจเซเชคเชฟเชเชจเซเช เชชเชพเชฒเชจ. เช เชคเซ เชเซ เชเซเชฏเชพเช เชเซเชฌเซ-เชธเซเชเซเชฐ เช เชจเซ เชชเซเชฒเชพเชฐเชฟเชธ เชเชพเชฎเชฎเชพเช เชเชตเชถเซ.
เชเซเช เชเชเชฟเชฒ เชเชตเชถเซเชฏเชเชคเชพเช เชงเชฐเชพเชตเซ เชเซ เช เชจเซ เชตเชฟเชเชคเชตเชพเชฐ เชชเชฐเซเชเซเชทเชฃเซเชจเซ เชเชธเซเชเชฎเชพเชเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชคเซเชฎเชจเชพ เชฎเชพเชเซ, เชเซเชชเชฐ, เชเซเชจเซเชซเชฟเช-เชฒเชฟเชจเซเช เช เชจเซ เชเซเชจเซเชซเซเชธเซเช เชฏเซเชเซเชฏ เชฐเชนเซเชถเซ..
เชเชจเซเชซเชเซเชธเซเช เช เชจเซ เชฐเซเชชเชฐเซเชเชพ-เชฒเชฟเชจเซเช เชเชธเซเชเชฎ เชชเชฐเซเชเซเชทเชฃเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ YAML เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เช เชจเซ เชเซเชชเชฐ เชคเชฎเชจเซ เชธเชเชชเซเชฐเซเชฃ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชญเชพเชทเชพเชจเซ เชเชเซเชธเซเชธ เชเชชเซ เชเซ, เชเซ เชคเซเชจเซ เชเช เชธเซเชเชฆเชฐ เชเชเชฐเซเชทเช เชชเชธเชเชฆเชเซ เชฌเชจเชพเชตเซ เชเซ.
เชฌเซเชเซ เชฌเชพเชเซ, เชถเซเช เชเชฎเชพเชเชฅเซ เชเซเช เชเช เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฏเซเชเซเชฏ เชเซ เช เชจเซ เชคเซเชฅเซ, เชเชพเชคเซ เช เชคเชฎเชพเชฎ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเซ, เช เชฅเชตเชพ เชชเซเชฒเชพเชฐเชฟเชธเชจเซ เชชเซเชฐเชพเชงเชพเชจเซเชฏ เชเชชเชตเซเช เช เชจเซ เชคเซเชฎเชพเช เชเซ เชเชฐเซเชฐเซ เชเซ เชคเซ เช เชเชฎเซเชฐเซ? เช เชชเซเชฐเชถเซเชจเชจเซ เชเซเช เชธเซเชชเชทเซเช เชเชตเชพเชฌ เชจเชฅเซ.
เชจเซเชเซเชจเซเช เชเซเชทเซเชเช เชฆเชฐเซเช เชธเชพเชงเชจเชจเซเช เชธเชเชเซเชทเชฟเชชเซเชค เชตเชฐเซเชฃเชจ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ:
เชเซเชฒ
เชฒเชเซเชทเซเชฏเชธเซเชฅเชพเชจ
เชเชพเชฎเซเช
เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชชเชฐเซเชเซเชทเชฃเซ
เชเซเชฌเซเชตเชฒ
API เชธเซเชเซเชฎเชพเชจเชพ เชเซเชเซเชเชธ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฎเซ YAML เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ เชฎเชพเชจเซเชฏ เชเชฐเซ เชเซ
CRD เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชถเชเชพเชคเซเช เชจเชฅเซ
เชเซเช
เชเซเชฌเซ-เชธเซเชเซเชฐ
เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเช เชธเชพเชฎเซ YAML เชฎเซเชจเซเชซเซเชธเซเชเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เชเซ
เชธเชเชธเชพเชงเชจเซ เชคเชชเชพเชธเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซเช Kubernetes API เชธเชเชธเซเชเชฐเชฃ เชชเชธเชเชฆ เชเชฐเซ เชถเชเชคเชพเช เชจเชฅเซ
เชเซเช
เชคเชพเชเชฌเซ
YAML เชฎเซเชจเชฟเชซเซเชธเซเช เชฎเชพเชเซ เชเชธเซเชเชฎ JavaScript เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซเชจเซเช เชธเชพเชฎเชพเชจเซเชฏ เชฎเชพเชณเชเซเช
เชเซเช เชฌเชฟเชฒเซเช-เชเชจ เชชเชฐเซเชเซเชทเชฃเซ เชจเชฅเซ. เชจเชฌเชณเชพ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ
เชนเชพ
config-lint
YAML เชฎเชพเช เชเชฎเซเชฌเซเชก เชเชฐเซเชฒเซ เชกเซเชฎเซเชจ-เชตเชฟเชถเชฟเชทเซเช เชญเชพเชทเชพเชฎเชพเช เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซเชจเซเช เชธเชพเชฎเชพเชจเซเชฏ เชฎเชพเชณเชเซเช. เชตเชฟเชตเชฟเชง เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเซเชฐเซเชฎเซเชเชจเซ เชธเชชเซเชฐเซเช เชเชฐเซ เชเซ (เชฆเชพ.เชค. เชเซเชฐเชพเชซเซเชฐเซเชฎ)
เชคเซเชฏเชพเช เชเซเช เชคเซเชฏเชพเชฐ เชชเชฐเซเชเซเชทเชฃเซ เชจเชฅเซ. เชฌเชฟเชฒเซเช-เชเชจ เชจเชฟเชตเซเชฆเชจเซ เช
เชจเซ เชเชพเชฐเซเชฏเซ เชชเซเชฐเชคเชพ เชจ เชนเซเช เชถเชเซ
เชนเชพ
เชนเชฐเซเชซเชพเช
เชฐเซเชเซ (เชเช เชตเชฟเชถเชฟเชทเซเช เชเซเชตเซเชฐเซ เชญเชพเชทเชพ) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซเชจเซเช เชฎเชพเชณเชเซเช. OCI เชฌเชเชกเชฒเซเชธ เชฆเซเชตเชพเชฐเชพ เชชเซเชฒเชฟเชธเซ เชถเซเชฐ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ
เชเซเช เชฌเชฟเชฒเซเช-เชเชจ เชชเชฐเซเชเซเชทเชฃเซ เชจเชฅเซ. เชฎเชพเชฐเซ เชฐเซเชเซ เชถเซเชเชตเซ เชเซ. เชจเซเชคเชฟเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชคเซ เชตเชเชคเซ เชกเซเชเชฐ เชนเชฌ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ
เชนเชพ
เชชเซเชฒเชพเชฐเชฟเชธ
เชธเชฎเซเชเซเชทเชพเช YAML เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพเช เชธเชพเชฎเซ เชฎเซเชจเซเชซเซเชธเซเช เชเชฐเซ เชเซ. เชคเชฎเชจเซ JSON เชธเซเชเซเชฎเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ
JSON เชธเซเชเซเชฎเชพ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชชเชฐเซเชเซเชทเชฃ เชเซเชทเชฎเชคเชพเช เชชเชฐเซเชฏเชพเชชเซเชค เชจ เชนเซเช เชถเชเซ
เชนเชพ
เชเชพเชฐเชฃ เชเซ เช เชธเชพเชงเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชจเซ เชเชเซเชธเซเชธ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเชคเชพ เชจเชฅเซ, เชคเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชฐเชณ เชเซ. เชคเซเช เชคเชฎเชจเซ เชธเซเชฐเซเชค เชซเชพเชเชฒเซเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเชตเชพเชจเซ เช เชจเซ เชชเซเชฐเซเชเซเชเซเชเซเชธเชฎเชพเช เชชเซเชฒ เชตเชฟเชจเชเชคเซเชเชจเชพ เชฒเซเชเชเซเชจเซ เชเชกเชชเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
เช เชจเซเชตเชพเชฆเช เชคเชฐเชซเชฅเซ เชชเซเชเชธ
เช เชฎเชพเชฐเชพ เชฌเซเชฒเซเช เชชเชฐ เชชเชฃ เชตเชพเชเชเซ:
- ยซ
เชชเซเชฒเชพเชฐเชฟเชธเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเซเชจเซ เชธเซเชตเชธเซเชฅ เชฐเชพเชเชตเชพ เชฎเชพเชเซ เชฐเชเซ เชเชฐเซเชฏเซเช ยป; - ยซ
Kubernetes เชฎเชพเชเซ YAML เชธเชชเซเชฐเซเช เชธเชพเชฅเซ Vim ยป; - ยซ
Google เช เชจเซเชธเชพเชฐ เชเชจเซเชเซเชจเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ 7 เชถเซเชฐเซเชทเซเช เชชเชฆเซเชงเชคเชฟเช ยป.
เชธเซเชฐเซเชธ: www.habr.com