
KubeLinter는 Kubernetes YAML 파일과 Helm 차트를 검사하여 해당 파일에 표현된 애플리케이션이 모범 사례를 준수하는지 확인하는 정적 분석 도구입니다.
Kubernetes용 정적 분석
KubeLinter는 Kubernetes YAML 파일, Helm 차트 및 Kustomize 매니페스트를 분석하고, 프로덕션 운영 준비성과 보안에 중점을 두고 다양한 모범 사례를 기준으로 검사합니다.
KubeLinter는 Kubernetes YAML 파일, Helm 차트 및 Kustomize 매니페스트에 대한 유용한 정보를 제공하도록 설계된 합리적인 기본 검사를 실행합니다. 이는 팀이 보안 오구성 및 DevOps 모범 사례를 조기에 자주 확인하는 데 도움을 주기 위한 것입니다. 여기에는 컨테이너를 비루트 사용자로 실행, 최소 권한 적용, 민감한 정보를 시크릿에만 저장하는 것 등의 일반적인 예가 포함됩니다.
KubeLinter는 구성 가능하므로 조직 내에서 따르려는 정책에 따라 검사를 활성화/비활성화하고 사용자 지정 검사를 만들 수 있습니다.
린트 검사가 실패하면 KubeLinter는 잠재적인 문제를 해결하는 방법에 대한 권장 사항을 보고하고 0이 아닌 종료 코드를 반환합니다.
KubeLinter 설치, 사용 및 구성에 대한 자세한 문서는 https://docs.kubelinter.io 를 방문하세요.
Kube-linter 바이너리는 여기에서 찾을 수 있습니다: https://github.com/stackrox/kube-linter/releases/latest
Go를 사용하여 설치하려면 다음 명령을 실행하세요:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
그렇지 않으면 Releases에서 최신 바이너리를 다운로드하여 PATH에 추가하세요.
Homebrew 또는 LinuxBrew를 사용하여 설치하려면 다음 명령을 실행하세요:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
소스에서 KubeLinter를 설치하는 것은 다음 단계를 따르기만 하면 됩니다:
먼저 KubeLinter 저장소를 클론합니다.
git clone [email protected]:stackrox/kube-linter.git
그런 다음 소스 코드를 컴파일합니다. 이렇게 하면 각 플랫폼에 대한 kube-linter 바이너리 파일이 생성되고 .gobin 폴더에 배치됩니다.
make build
마지막으로 KubeLinter 사용을 시작할 준비가 되었습니다. 버전을 확인하여 KubeLinter가 성공적으로 설치되었는지 확인하세요.
.gobin/kube-linter version
테스트에는 여러 계층이 있습니다. 각 계층이 통과해야 합니다.
go 단위 테스트:
make test
엔드 투 엔드 통합 테스트:
make e2e-test
마지막으로 bats-core를 사용한 엔드 투 엔드 통합 테스트:
make e2e-bats
KubeLinter 이미지는 cosign으로 서명됩니다. 사용 전에 이미지를 검증하는 것이 좋습니다.
cosign을 설치한 후 KubeLinter 공개 키를 사용하여 KubeLinter 이미지를 다음과 같이 검증할 수 있습니다:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter는 또한 cosign 키리스 서명을 제공합니다.
다음 명령으로 KubeLinter 이미지를 검증할 수 있습니다:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
가장 기본적인 형태로 KubeLinter를 실행하여 YAML 파일을 린트하려면 두 단계만 거치면 됩니다.
보안 및 프로덕션 운영 준비 모범 사례를 테스트하려는 YAML 파일을 찾습니다:
다음 명령을 실행합니다:
kube-linter lint /path/to/your/yaml.yaml
다음 샘플 Pod 사양 파일 pod.yaml을 고려해 보세요. 이 파일에는 프로덕션 운영 준비와 관련된 두 가지 문제와 보안 문제 하나가 있습니다:
보안 문제:
프로덕션 운영 준비:
컨테이너의 메모리 제한이 설정되지 않아 과도한 메모리를 소비할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
resources:
requests:
memory: "64Mi"
cpu: "250m"
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
위의 YAML을 pod.yaml로 복사하고 다음 명령을 실행하여 이 파일을 린트합니다:
kube-linter lint pod.yaml
KubeLinter는 기본 검사를 실행하고 권장 사항을 보고합니다. 다음은 이전 명령의 출력입니다.
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
KubeLinter는 단일 실행에서 여러 출력 형식을 생성할 수 있습니다. 이는 사람이 읽을 수 있는 보고서와 기계가 읽을 수 있는 보고서를 동시에 생성할 때 유용합니다:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
이 명령은 다음을 수행합니다:
kube-linter.sarif에 SARIF 형식 보고서를 생성합니다kube-linter.json에 JSON 형식 보고서를 생성합니다참고: 여러 형식을 사용하려면 명시적인 --output 플래그가 필요합니다. 단일 형식을 stdout으로 출력하려면 --output 없이 --format 플래그 하나만 사용하세요.
여러 출력 형식 사용에 대한 자세한 내용은 문서를 참조하세요.
KubeLinter 사용 및 구성에 대해 자세히 알아보려면 문서 페이지를 방문하세요.
다음은 사용자가 작성한 KubeLinter 튜토리얼입니다. 이 목록에 추가하고 싶은 항목이 있으면 PR을 보내주세요!
KubeLinter는 Apache License 2.0에 따라 라이선스가 부여됩니다.
유지 관리자 및 다른 사용자를 포함한 KubeLinter 커뮤니티에 참여하려면 Slack 워크스페이스에 여기에서 가입할 수 있습니다.
향후 명령 사용법, 플래그 및 구성 파일 형식에 호환성이 깨지는 변경 사항이 있을 수 있습니다. 그러나 환경 YAML 파일을 테스트하고 무엇이 깨지는지 확인한 후 기여하기 위해 KubeLinter를 사용하는 것이 좋습니다.
참고로, KubeLinter 커뮤니티의 모든 참여는 행동 강령의 적용을 받습니다.