cloud club에서 go 스터디를 하면서 cobra로 CLI를 만들게 되었고, 나는 불필요한 네임스페이스를 체크하는 cli 기능을 만들었다. 그런데 이왕 만든김에 Krew 오픈소스에 기여해보고자 방법을 찾게 되었고, 아래와 같은 메타데이터를 명세해야하는 것을 알았다.
apiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
name: ns-inspect
spec:
version: "v1.0.0"
homepage: "https://github.com/my-org/kubectl-ns-inspect"
shortDescription: "Inspect if a namespace has no resources"
description: |
This plugin inspects a given Kubernetes namespace to check if it contains any resources.
It lists all resources in the specified namespace and reports if it is empty or not.
Useful for auditing or ensuring namespaces are clear before deletion.
platforms:
- selector:
matchLabels:
os: linux
arch: amd64
uri: "https://github.com/my-org/kubectl-ns-inspect/releases/download/v1.0.0/kubectl-ns-inspect-linux-amd64.tar.gz"
sha256: "<SHA256_CHECKSUM>"
bin: "kubectl-ns-inspect"
- selector:
matchLabels:
os: linux
arch: arm64
uri: "https://github.com/my-org/kubectl-ns-inspect/releases/download/v1.0.0/kubectl-ns-inspect-linux-arm64.tar.gz"
sha256: "<SHA256_CHECKSUM>"
bin: "kubectl-ns-inspect"
여기에 SHA와 checksum등 평소에 들어봤지만 뭐지?? 하는 단어가 있어서 이번 기회에 정리해보고자 한다!
SHA(Secure Hash Algorithm)는 데이터를 고유한 길이의 고정된 크기 해시값으로 변환하는 암호화 알고리즘이다.
입력 데이터가 한 글자이든 1GB이든 상관없이 결과는 항상 256비트 크기의 해시값을 내놓는다. SHA-256이라는 알고리즘이 보안성이 높아 주로 사용된다고 한다.
** 해시값은 해시 함수에 의해 생성된 고정 길이의 문자열이다. 입력 데이터가 아무리 길거나 짧더라도, 해시 함수는 항상 일정한 길이의 해시값을 반환한다.입력 데이터가 조금이라도 달라지면 전혀 다른 해시값이 생성된다.
cli를 go로 만들었기에 컴파일하여 바이너리 파일이 나오고.. 다른 유저가 이를 사용하기 위해 바이너리 파일을 받아야한다. 그래서 플러그인 바이너리가 악의적으로 수정되거나 다운로드 중에 변조되지 않았는지 확인할 필요가 있고, Krew는 SHA256 해시 값을 사용하여 다운로드한 파일이 올바른지 검사한다.
파일을 다운로드할 때 제공된 해시값과 파일을 다운로드한 후 직접 계산한 해시값을 비교함으로써 파일의 무결성을 확인할 수 있다.
Checksum(체크섬)은 데이터를 무결성을 확인하기 위해 생성된 문자열이다.. SHA256과 같은 해시 알고리즘으로 생성된 결과값도 체크섬의 일종이다.
그래서 파일에 SHA256 해시 알고리즘으로 생성된 체크섬을 넣어라고 표기 되어있다.
대부분 운영체제에 알고리즘을 사용할 수있도록 내장되어있다. mac os는 아래처럼 진행하면 체크섬을 얻을 수 있다
shasum -a 256 <파일명>