Linting, 공통 검증, 정적 코드 분석, 보안 스캔, 구성 테스트, 감사, Kustomize Build 및 구조화 된 Kubernetes YAML Dannifest에 대한 건식 실행 구성을 실행하는 도구 모음. 검증 및 테스트의 일부로 CI (Continuious Integration) 프로세스로 실행되도록 설계되었으며 특히 Gitops를 통해 관리되는 Kubernetes 클러스터에 유용합니다.
Kubernetes Yaml Manifest 파일을 Kubernetes에 자동으로 배포하기 전에 Kubernetes Yaml Manifest 파일을 검증하기 위해 모든 주요 유효성 검사 도구 (여러 가지가있는)가 포함 된 단일 Docker 이미지를 찾을 수 없었습니다. 이 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 | 클리 | Kubernetes Cli. --dry-run=client 와 함께 사용하여 매니페스트를 검증 할 수 있습니다 |
| 지배 | 3.8.1 | 클리 | Helm은 Kubernetes 응용 프로그램을 관리하는 데 도움이됩니다. Kubernetes 응용 프로그램을 Helm 차트로 정의, 설치 및 업그레이드합니다. 유효성 검사 도구로 실행되면 helm lint 또는 helm template 으로 실행할 수 있습니다. |
| yamllint | 1.26.3 | 린터 | YAML 파일의 기본 라이터 |
| Kubeval | 0.16.1 | 확인 | kubernetes yaml manifests를 확인하기위한 도구. CRD와 함께 작동하지 않습니다. |
| kustomize | 4.5.3 | 엮다 | 앱 구성을 사용자 정의하는 템플릿없는 방법. Kustomize 구성을 검증하는 데 유용합니다. |
| 린트 구성 | 1.6.0 | 확인 | YAML에 지정된 사용자 정의 규칙을 사용하여 구성 파일을 유효하게하십시오. |
| Conftest | 0.30.0 | 테스트 | 구조화 된 구성 데이터에 대한 테스트 작성에 도움이되는 유틸리티. |
| Kube 점수 | 1.14.0 | 보안 | Kubernetes 객체 정의의 정적 코드 분석을 수행하는 도구. |
| Polaris | 5.1.0 | 확인 | Kubernetes 배포 구성 오류를 식별합니다 |
| Kube Linter | 0.2.6 | 보안 | Kubernetes를 확인하는 Linter 및 정적 분석 도구가 나타납니다 |
| kubeconform | 0.4.13 | 확인 | Kubernetes는 CRD 지원을 통해 Kubeval과 같은 유효성 검사 도구를 나타냅니다 |
| Kubeaudit | 0.16.0 | 보안 | 보안 문제에 대한 클러스터를 감사하거나 파일을 매니페스트합니다 |
| Datree | 1.0.15 | 정책 | Kubernetes가 나타나고 헬름 차트가 유효하고 정책을 준수하는지 확인하십시오. |
| Kubesec | 2.11.4 | 보안 | Kubernetes 리소스의 보안 위험 분석 |
이상적으로는 Kubernetes-Validation-Tools 컨테이너를 CI 빌드 프로세스에서 사용하여 Kubernetes 구성 및 헬프 차트를 검증, 스캔 및 보풀을 뿌려야합니다. Gitops의 지속적인 통합 워크 플로의 일부로 이러한 도구를 실행하는 것이 최적입니다.
컨테이너 지정자를 사용하여 컨테이너 내부의 단계를 실행하십시오. 컨테이너에 적합한 호스트 환경 (Linux 컨테이너의 경우 Ubuntu-Latest, Windows Latest for Windows 컨테이너)으로 런 온을 지정하십시오. 예를 들어:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container 이 예제는 Jenkins가 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 패키지입니다.
Kubeaudit은 보안 컨테이너를 배포 할 수 있도록합니다!
Kubeval은 Kubernetes Yaml 또는 JSON 구성 파일을 검증하는 도구입니다. Kubernetes OpenApi 사양에서 생성 된 스키마를 사용하므로 여러 버전의 Kubernetes에 대한 Schemas를 검증 할 수 있습니다.
KubeConform은 Kubernetes가 유효성 검사 도구를 나타냅니다. Kubernetes 구성을 검증하려면 CI로 빌드하십시오!
그것은 영감을 얻었고, 코드가 포함되어 있으며 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는 어설 션을 작성하기 위해 Open Policy Agent의 Rego 언어에 의존합니다.
Yamllint는 YAML 파일의 린터입니다.
Yamllint는 구문의 유효성을 확인할뿐만 아니라 선 길이, 후행 공간, 들여 쓰기 등과 같은 주요 반복 및 화장품 문제와 같은 이상한 점을 확인합니다.
Kustomize를 사용하면 여러 목적으로 원시의 템플릿이없는 YAML 파일을 사용자 정의 할 수 있으며, 원래 YAML은 그대로 손대지 않고 사용할 수 있습니다.
Kustomize는 Kubernetes를 대상으로합니다. Kubernetes 스타일 API 객체를 이해하고 패치 할 수 있습니다. 그것은 그것이하는 일이 파일로 선언된다는 점에서, 그것은 편집 된 텍스트를 제출한다는 점에서 SED와 같습니다. Kustomize는 포킹없이 구성 옵션을 추가, 제거 또는 업데이트하기 위해 Kubernetes가 나타납니다.
Kustomize는 ArgoCD, FluxCD 또는 Spinnaker와 같은 도구와 함께 사용하여 코드를 복제하지 않고 여러 클러스터 또는 환경에서 공유 매니페스트 (리소스)를 활성화하는 데 특히 유용합니다. Kustomize는 재정의, 병합 및 기타 구성 기능을 허용합니다.
Kubectl은 스위스 군용 나이프의 Kubernetes CLI 버전이며 많은 일을 할 수 있습니다. 그 중 하나는 Yaml 파일에서 드라이 런 검증을 수행 할 수 있다는 것입니다.
$ kubectl create --dry-run --validate -f invalid.yamlHelm 명령은 CI에서 사용하여 헬름 차트를 보풀 또는 검증하기 위해 사용합니다.
가능한 문제에 대한 차트를 검사하십시오.
메모:
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에 지정된 규칙을 사용하여 구성 파일을 검증하는 명령 줄 도구입니다. 구성 파일은 Kubernetes를 지원하는 Terraform, Json, Yaml의 여러 형식 중 하나 일 수 있습니다. TerraForm 용으로 제공되는 내장 규칙이 있으며 다른 형식에는 사용자 정의 파일을 사용할 수 있습니다.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKubernetes 객체 정의의 정적 코드 분석을 수행하는 도구 인 Kube-Score. 출력은 애플리케이션을보다 안전하고 탄력적으로 만들기 위해 개선 할 수있는 권장 사항 목록입니다.
Kube-Score는 CI/CD 환경에서 실행될 수 있으며 중요한 오류가 발견되면 EXIT 코드 1으로 종료합니다. 트리거 레벨은 -exit-one on warning 인수로 경고로 변경할 수 있습니다.
Kube-Score에 대한 입력은 최상의 결과를 얻기 위해 동일한 네임 스페이스에 배포하는 모든 응용 프로그램이어야합니다.
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 포드 및 컨트롤러가 모범 사례를 사용하여 구성되도록합니다. Polaris는 CI/CD 프로세스의 일부로 로컬 YAML 파일을 테스트하기위한 CLI 도구로 포함됩니다.
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 90CLI에 대한 더 많은 사용 옵션은 사용법 문서를 참조하십시오.
Kube Linter는 Kubernetes Yaml 파일 및 헬름 차트를 확인하여 모범 사례를 준수하는지 확인하는 정적 분석 도구입니다. Kubelinter는 Yaml 파일을 입력으로 받아들이고 일련의 검사를 실행합니다. 문제가있는 경우 문제를보고하고 0이 아닌 출구 코드를 반환합니다.
Datree는 Kubernetes가 모범 사례와 조직의 정책을 따르는 것을 보장하기 위해 로컬 또는 CI/CD에서 사용할 수있는 CLI 도구입니다. YAML 및 Kubernetes 스키마 검증에 대한 내장 지원과 함께 30 개의 전투 테스트 규칙 중에서 선택할 수있는 30 개의 전투 테스트 규칙이 제공됩니다.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec은 Kubernetes 포드, 배포, 데몬 세트 및 상태가 많은 보안 스캔 도구입니다.
kubesec scan manifest.yamlKubesec은 a 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 환영합니다! 자세한 내용은 기고 가이드 라인을 확인하십시오.