คอลเลกชันทั้งหมดของเครื่องมือในการเรียกใช้การตรวจสอบความถูกต้องทั่วไปการวิเคราะห์รหัสแบบคงที่การสแกนความปลอดภัยการทดสอบการกำหนดค่าการตรวจสอบการสร้าง kustomize และการกำหนดค่าแบบแห้งสำหรับ kubernetes yaml ที่มีโครงสร้าง ออกแบบมาเพื่อทำงานในกระบวนการ CI (การรวมอย่างต่อเนื่อง) ซึ่งเป็นส่วนหนึ่งของการตรวจสอบความถูกต้องและการทดสอบโดยเฉพาะอย่างยิ่งมีประโยชน์สำหรับกลุ่ม Kubernetes ที่จัดการผ่าน Gitops
ฉันไม่สามารถหาภาพนักเทียบท่าเดียวที่มีเครื่องมือตรวจสอบความถูกต้องที่สำคัญทั้งหมด (ซึ่งมีหลาย!) เพื่อตรวจสอบ Kubernetes Yaml Manifest ไฟล์เป็นส่วนหนึ่งของกระบวนการ CI/CD ก่อนที่จะถูกนำไปใช้กับ Kubernetes โดยอัตโนมัติ repo นี้ไม่ได้ออกแบบมาเพื่อครอบคลุมวิธีการใช้เครื่องมือแต่ละตัวเหล่านี้แม้ว่าจะมีตัวอย่างการใช้งานพื้นฐานบางอย่าง ลิงค์ด้านล่างควรนำคุณไปสู่เอกสารสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้เครื่องมือแต่ละตัว เราพบว่ามีประโยชน์ในการใช้เครื่องมือหลายอย่างในระหว่างการตรวจสอบความถูกต้องของ CI และกระบวนการสแกนเนื่องจากเครื่องมือบางอย่างตรวจสอบบางแง่มุมที่ผู้อื่นไม่สามารถทำได้
คว้าภาพล่าสุดจากแพ็คเกจ GitHub หรือจาก Docker Hub
คุณสามารถเรียกใช้ภาพโดยตรงใน Docker หรือดูตัวอย่างการใช้งาน CI/CD ด้านล่าง
docker run --rm -it docker.pkg.github.com/highwayoflife/kubernetes-validation-tools/image:latest /bin/bashdocker run --rm -it deck15/kubeval-tools:latest /bin/bash| เครื่องมือ | รุ่น | วัตถุประสงค์ | คำอธิบาย |
|---|---|---|---|
| Kubectl | 1.23.5 | CLI | Kubernetes CLI สามารถใช้กับ --dry-run=client เพื่อตรวจสอบการปรากฏตัว |
| หางเสือ | 3.8.1 | CLI | Helm ช่วยให้คุณจัดการแอพพลิเคชั่น Kubernetes - กำหนดติดตั้งและอัปเกรดแอปพลิเคชัน Kubernetes เป็นชาร์ต Helm เรียกใช้เป็นเครื่องมือตรวจสอบความถูกต้องสามารถเรียกใช้เป็น helm lint หรือ helm template |
| Yamllint | 1.26.3 | คนเชือก | linter พื้นฐานสำหรับไฟล์ yaml |
| Kubeval | 0.16.1 | การตรวจสอบความถูกต้อง | เครื่องมือสำหรับการตรวจสอบความถูกต้องของ kubernetes yaml ปรากฏ ไม่ทำงานกับ CRDS |
| ทำให้คร่ำครวญ | 4.5.3 | รวบรวม | วิธีที่ปราศจากเทมเพลตในการปรับแต่งการกำหนดค่าแอป มีประโยชน์ในการตรวจสอบการกำหนดค่า kustomize |
| config config | 1.6.0 | การตรวจสอบความถูกต้อง | ตรวจสอบไฟล์กำหนดค่าโดยใช้กฎที่กำหนดเองที่ระบุใน YAML |
| ความเชื่อมั่น | 0.30.0 | การทดสอบ | ยูทิลิตี้เพื่อช่วยให้คุณเขียนการทดสอบกับข้อมูลการกำหนดค่าที่มีโครงสร้าง |
| คะแนน Kube | 1.14.0 | ความปลอดภัย | เครื่องมือที่ดำเนิน การวิเคราะห์รหัสแบบคงที่ ของคำจำกัดความของวัตถุ Kubernetes |
| โพลาริส | 5.1.0 | การตรวจสอบความถูกต้อง | ระบุข้อผิดพลาดการกำหนดค่าการปรับใช้ Kubernetes |
| Kube Linter | 0.2.6 | ความปลอดภัย | เครื่องมือการวิเคราะห์ linter และแบบคงที่ที่ตรวจสอบ Kubernetes ปรากฏ |
| kubeconform | 0.4.13 | การตรวจสอบความถูกต้อง | Kubernetes แสดงเครื่องมือตรวจสอบความถูกต้องเช่น Kubeval พร้อมการสนับสนุน CRD |
| kubeaudit | 0.16.0 | ความปลอดภัย | กลุ่มตรวจสอบหรือไฟล์รายการสำหรับข้อกังวลด้านความปลอดภัย |
| ขัง | 1.0.15 | นโยบาย | ตรวจสอบให้แน่ใจว่า Kubernetes ปรากฏและชาร์ต Helm นั้นถูกต้องและปฏิบัติตามนโยบายของคุณ |
| Kubesec | 2.11.4 | ความปลอดภัย | การวิเคราะห์ความเสี่ยงด้านความปลอดภัยสำหรับทรัพยากร Kubernetes |
ควรใช้คอนเทนเนอร์ Kubernetes-Validation-Tools-tools ในกระบวนการสร้าง CI เพื่อตรวจสอบการสแกนและผ้าสำลี kubernetes configs และ manifests หรือชาร์ต Helm เป็นการดีที่สุดในการเรียกใช้เครื่องมือเหล่านี้ซึ่งเป็นส่วนหนึ่งของเวิร์กโฟลว์การรวมกลุ่มของ Gitops อย่างต่อเนื่อง
ใช้ตัวระบุคอนเทนเนอร์เพื่อเรียกใช้ขั้นตอนภายในคอนเทนเนอร์ ตรวจสอบให้แน่ใจว่าได้ระบุ Runs-On เป็นสภาพแวดล้อมโฮสต์ที่เหมาะสมสำหรับคอนเทนเนอร์ของคุณ ตัวอย่างเช่น:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container ตัวอย่างนี้มีประโยชน์ถ้าเจนกินส์ทำงานตัวแทนในกลุ่ม Kubernetes: Jenkinsfile
pipeline {
agent {
kubernetes {
cloud ' build-pipeline '
defaultContainer ' validate '
inheritFrom ' jnlp '
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: validate
image: deck15/kubeval-tools:latest
command:
- cat
tty: true
"""
} // kubernetes
} // agent
stages {
steps {
container( ' validate ' ) {
sh ' kubeconform -summary manifests.yaml '
}
}
}
}pipeline {
agent {
docker { image ' deck15/kubeval-tools:latest ' }
} // agent
.. .
}.drone.yml kind : pipeline
type : docker
name : default
steps :
- name : validate
image : deck15/kubeval-tools:latest
commands :
- kubeconform -summary manifests.yaml .circleci/config.yml version : 2.0
jobs :
build :
docker :
- image : deck15/kubeval-tools:latest .gitlab-ci.yamlคุณสามารถกำหนดรูปภาพที่ใช้สำหรับงานทั้งหมดและรายการบริการที่คุณต้องการใช้ในระหว่างการรันไทม์:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml Kubeaudit เป็นเครื่องมือบรรทัดคำสั่งและแพ็คเกจ GO เพื่อตรวจสอบกลุ่ม Kubernetes สำหรับข้อกังวลด้านความปลอดภัยที่แตกต่างกันเช่น:
Kubeaudit ทำให้แน่ใจว่าคุณปรับใช้คอนเทนเนอร์ที่ปลอดภัย!
Kubeval เป็นเครื่องมือในการตรวจสอบความถูกต้องของไฟล์กำหนดค่า Kubernetes Yaml หรือ JSON มันใช้ schemas ที่สร้างขึ้นจากข้อกำหนด Kubernetes OpenAPI และดังนั้นจึงสามารถตรวจสอบ schemas สำหรับ Kubernetes หลายรุ่น
Kubeconform เป็นเครื่องมือตรวจสอบความถูกต้องของ Kubernetes สร้างมันลงใน CI ของคุณเพื่อตรวจสอบการกำหนดค่า Kubernetes ของคุณ!
มันได้รับแรงบันดาลใจจากมีรหัสจากและได้รับการออกแบบให้อยู่ใกล้กับ Kubeval แต่ด้วยการปรับปรุงต่อไปนี้:
การตรวจสอบไฟล์เดียวที่ถูกต้อง
kubeconform fixtures/valid.yaml
echo $?
0การตรวจสอบไฟล์ที่ไม่ถูกต้องเดียวการตั้งค่าเอาต์พุตเป็น JSON และพิมพ์สรุป
kubeconform -summary -output json fixtures/invalid.yaml
{
" resources " : [
{
" filename " : " fixtures/invalid.yaml " ,
" kind " : " ReplicationController " ,
" version " : " v1 " ,
" status " : " INVALID " ,
" msg " : " Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string "
}
],
" summary " : {
" valid " : 0,
" invalid " : 1,
" errors " : 0,
" skipped " : 0
}
}
echo $?
1ผ่านการแสดงออกผ่าน stdin
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0การตรวจสอบโฟลเดอร์เพิ่มจำนวนคนงานขนาน
kubeconform -summary -n 16 fixtures
fixtures/crd_schema.yaml - CustomResourceDefinition trainingjobs.sagemaker.aws.amazon.com failed validation: could not find schema for CustomResourceDefinition
fixtures/invalid.yaml - ReplicationController bob is invalid: Invalid type. Expected: [integer,null], given: string
[...]
Summary: 65 resources found in 34 files - Valid: 55, Invalid: 2, Errors: 8 Skipped: 0Conftest เป็นยูทิลิตี้เพื่อช่วยให้คุณเขียนการทดสอบกับข้อมูลการกำหนดค่าที่มีโครงสร้าง ตัวอย่างเช่นคุณสามารถเขียนการทดสอบสำหรับการกำหนดค่า kubernetes ของคุณหรือคำจำกัดความไปป์ไลน์ของ Tekton, รหัส Terraform, การกำหนดค่าแบบไม่มีเซิร์ฟเวอร์หรือข้อมูลที่มีโครงสร้างอื่น ๆ
Conftest ขึ้นอยู่กับภาษา rego จากตัวแทนนโยบายเปิดสำหรับการเขียนการยืนยัน
Yamllint เป็น linter สำหรับไฟล์ YAML
Yamllint ไม่เพียง แต่ตรวจสอบความถูกต้องของไวยากรณ์ แต่สำหรับความแปลกประหลาดเช่นการทำซ้ำที่สำคัญและปัญหาเครื่องสำอางเช่นความยาวของเส้นพื้นที่ต่อท้ายการเยื้อง ฯลฯ
Kustomize ช่วยให้คุณปรับแต่งไฟล์ YAML แบบดิบที่ปราศจากเทมเพลตเพื่อจุดประสงค์หลายอย่างโดยปล่อยให้ Yaml ดั้งเดิมไม่ได้แตะต้องและใช้งานได้ตามที่เป็นอยู่
Kustomize เป้าหมาย Kubernetes; เข้าใจและสามารถแก้ไขวัตถุ API สไตล์ Kubernetes ได้ มันเหมือนกับว่าสิ่งที่มันทำในไฟล์และมันก็เหมือนกับ SED ในการที่มันปล่อยข้อความที่แก้ไข kustomize traverses เป็น kubernetes manifest ที่จะเพิ่มลบหรืออัปเดตตัวเลือกการกำหนดค่าโดยไม่ต้องฟอร์กิ้ง
Kustomize มีประโยชน์อย่างยิ่งในการใช้กับเครื่องมือเช่น Argocd, Fluxcd หรือ Spinnaker เพื่อเปิดใช้งานรายการที่ใช้ร่วมกัน (ทรัพยากร) ในหลาย ๆ กลุ่มหรือสภาพแวดล้อมโดยไม่ต้องทำซ้ำรหัส Kustomize อนุญาตให้แทนที่การผสานและคุณสมบัติการกำหนดค่าอื่น ๆ
Kubectl เป็นรุ่น Kubernetes CLI ของมีดกองทัพสวิสและสามารถทำหลายสิ่งได้ หนึ่งในสิ่งเหล่านั้นคือการตรวจสอบความถูกต้องของการทำงานแบบแห้งในไฟล์ YAML
$ kubectl create --dry-run --validate -f invalid.yamlคำสั่ง HELM ที่จะใช้ใน CI เป็นผ้าสำลีหรือตรวจสอบแผนภูมิ Helm
ตรวจสอบแผนภูมิสำหรับปัญหาที่เป็นไปได้
บันทึก:
helm lintด้วยตัวเองไม่เพียงพอที่จะตรวจสอบแผนภูมิ Helm อย่างเพียงพอ ขอแนะนำให้ใช้helm lintและhelm templateร่วมกับหนึ่งในเครื่องมือตรวจสอบความถูกต้องอื่น ๆ (ดูตัวอย่างด้านล่าง)
คำสั่งนี้ใช้เส้นทางไปยังแผนภูมิและเรียกใช้ชุดการทดสอบเพื่อตรวจสอบว่าแผนภูมิมีรูปแบบที่ดี
หาก linter พบสิ่งต่าง ๆ ที่จะทำให้แผนภูมิล้มเหลวในการติดตั้งมันจะปล่อยข้อความ [ERROR] หากพบปัญหาที่แตกหักด้วยการประชุมหรือคำแนะนำมันจะส่งข้อความ [WARNING]
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasconfig-lint เป็นเครื่องมือบรรทัดคำสั่งเพื่อตรวจสอบไฟล์การกำหนดค่าโดยใช้กฎที่ระบุใน YAML ไฟล์การกำหนดค่าสามารถเป็นหนึ่งในหลายรูปแบบ: Terraform, JSON, Yaml พร้อมรองรับ Kubernetes มีกฎในตัวสำหรับ Terraform และสามารถใช้ไฟล์ที่กำหนดเองสำหรับรูปแบบอื่น ๆ ได้
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score ซึ่งเป็นเครื่องมือที่ดำเนินการวิเคราะห์รหัสแบบคงที่ของคำจำกัดความของวัตถุ Kubernetes ของคุณ ผลลัพธ์คือรายการคำแนะนำของสิ่งที่คุณสามารถปรับปรุงเพื่อให้แอปพลิเคชันของคุณปลอดภัยและยืดหยุ่นมากขึ้น
คะแนน Kube สามารถทำงานในสภาพแวดล้อม CI/CD ของคุณและจะออกจากรหัสออก 1 หากพบข้อผิดพลาดที่สำคัญ ระดับทริกเกอร์สามารถเปลี่ยนเป็นคำเตือนด้วยอาร์กิวเมนต์-One-One-on-Warning
อินพุตไปยังคะแนน Kube ควรเป็นแอปพลิเคชันทั้งหมดที่คุณปรับใช้กับเนมสเปซเดียวกันเพื่อผลลัพธ์ที่ดีที่สุด
helm template my-app | kube-score score -kustomize build . | kube-score score -kube-score score my-app/ * .yaml
kube-score score my-app/deployment.yaml my-app/service.yamlPolaris, Polaris ดำเนินการตรวจสอบที่หลากหลายเพื่อให้แน่ใจว่า Kubernetes Pods และตัวควบคุมได้รับการกำหนดค่าโดยใช้แนวทางปฏิบัติที่ดีที่สุด Polaris รวมอยู่ในเครื่องมือ CLI เพื่อทดสอบไฟล์ YAML ในพื้นที่เช่นเป็นส่วนหนึ่งของกระบวนการ CI/CD
Polaris สามารถทำงานในโหมดที่แตกต่างกันสองสาม:
คุณสามารถเรียกใช้การตรวจสอบบนบรรทัดคำสั่งและดูผลลัพธ์เป็น JSON, YAML หรือคะแนนดิบ:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92การตรวจสอบสามารถเรียกใช้กับไดเรกทอรีท้องถิ่นหรือไฟล์ YAML แทนที่จะเป็นคลัสเตอร์:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -นอกจากนี้คุณยังสามารถเรียกใช้การตรวจสอบในทรัพยากรเดียวแทนคลัสเตอร์ทั้งหมด:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " คุณสามารถรวม Polaris เข้ากับ CI/CD สำหรับที่เก็บที่มีโครงสร้างพื้นฐาน-ตามรหัส ตัวอย่างเช่นการล้มเหลวหาก Polaris ตรวจพบปัญหาระดับอันตรายใด ๆ หรือหากคะแนนลดลงต่ำกว่า 90%:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90สำหรับตัวเลือกการใช้งานเพิ่มเติมสำหรับ CLI ดูเอกสารการใช้งาน
Kube Linter เป็นเครื่องมือวิเคราะห์แบบคงที่ที่ตรวจสอบไฟล์ Kubernetes Yaml และแผนภูมิ Helm เพื่อให้แน่ใจว่าแอปพลิเคชันที่แสดงในนั้นเป็นไปตามแนวทางปฏิบัติที่ดีที่สุด Kubelinter ยอมรับไฟล์ YAML เป็นอินพุตและเรียกใช้ชุดของการตรวจสอบ หากพบปัญหาใด ๆ ก็จะรายงานและส่งคืนรหัสทางออกที่ไม่เป็นศูนย์
Datree เป็นเครื่องมือ CLI ที่สามารถใช้งานในพื้นที่หรือใน CI/CD ของคุณเพื่อให้แน่ใจว่า Kubernetes ปรากฏและชาร์ต Helm ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดรวมถึงนโยบายขององค์กรของคุณ มันมาพร้อมกับกฎที่ผ่านการทดสอบการต่อสู้ 30 ข้อให้เลือกพร้อมกับการสนับสนุนในตัวสำหรับการตรวจสอบความถูกต้องของ Schema Yaml และ Kubernetes
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec เป็นเครื่องมือสแกนความปลอดภัยสำหรับ Kubernetes Pods, การปรับใช้, daemonsets และ statefulsets
kubesec scan manifest.yamlKubesec ส่งคืนอาร์เรย์ JSON และสามารถสแกนเอกสาร YAML หลายรายการในไฟล์อินพุตเดียว
[
{
"object" : " Pod/security-context-demo.default " ,
"valid" : true ,
"message" : " Failed with a score of -30 points " ,
"score" : -30 ,
"scoring" : {
"critical" : [
{
"selector" : " containers[] .securityContext .capabilities .add == SYS_ADMIN " ,
"reason" : " CAP_SYS_ADMIN is the most privileged capability and should always be avoided " ,
"points" : -30
}
],
"advise" : [
{
"selector" : " containers[] .securityContext .runAsNonRoot == true " ,
"reason" : " Force the running image to run as a non-root user to ensure least privilege " ,
"points" : 1
},
{
// ...
}
]
}
}
]ยินดีต้อนรับ PRS! ตรวจสอบแนวทางที่มีส่วนร่วมสำหรับข้อมูลเพิ่มเติม