-
kubernetes 워크로드 구성 검사 실행 - Polaris by FairwindsHOWTO 2021. 10. 8. 22:53
kube-score 가 kubernetes 에 배포하기 전 manifest 의 검증을 위한 도구였다면, Polaris 는 이미 배포된 워크로드 또는 신규로 배포하게 되는 워크로드가 보안, 신뢰성, 네트워크, 효율성등에 어느정도 적절하게 구성되었는지 검사할 수 있는 도구이다.
Polaris 는 오픈소스로 사용할 수 있는데, 좀 더 다양한 기능과 대시보드, 기술 지원이 필요한 경우 Polaris upgrade 버전인 Fairwinds Insights 로 제공하고 있다.
# dashboard 설치 kubectl apply -f https://github.com/fairwindsops/polaris/releases/latest/download/dashboard.yaml kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80 # Admission Controller (webhook) 설치 kubectl apply -f https://github.com/fairwindsops/polaris/releases/latest/download/webhook.yaml
Polaris 는 IaC Auditor, Validating Webhook, Live Dashboard 세가지 모드로 실행할 수 있는데, Validating Webhook 과 Live Dashboard 만 테스트 해보았다.
1. Polaris 설치
일단 webhook 도 dashboard 도 설치를 해야한다. polaris 를 적용하려는 kubernetes cluster에 dashboard, webhook 관련 deployment 를 배포하면 완료! 상당히 간단하다.
helm 으로 설치하는 방법도 있는데, kubectl 로 배포하는게 더 간단해보였다.
# Dashboard kubectl apply -f https://github.com/fairwindsops/polaris/releases/latest/download/dashboard.yaml kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80 # Admission Controller (webhook) 설치 kubectl apply -f https://github.com/fairwindsops/polaris/releases/latest/download/webhook.yaml
Dashboard 의 경우 service type 이 ClusterIP 로 생성되어서 접속을 위해 LB Type 으로 변경해주었다.
dashboard 와 webhook 은 polaris namespace 에 생성되고 관련하여 배포된 워크로드는 아래와 같다.
2. Dashboard 살펴보기
Dashboard 에 접속하면 현재 kubernetes cluster 에 배포된 deployment, daemonsets, statefulsets 에 대해 security, efficiency, reliability 측면에서 필요한 옵션들이 적용되었는지 검사한 결과를 보여준다.
각 항목 별 체크 항목은 아래 링크를 통해 확인할 수 있다.
- Security
- Efficiency
- Reliability
3. Admission Control (Webhook) 살펴보기
webhook 은 사용자가 새로운 워크로드를 배포하려고 할 때 위 Security, Efficiency, Reliability 에서 체크하는 항목들이 만족하는지 검사하고, 만족하지 않을 경우에는 배포되지 못하도록 차단한다.
기존에 가지고 있던 manifest 내용은 아래와 같았는데, 배포했더니 Privilege escalation should not be allowed 라고 결과가 나오면서 deployment 가 배포되지 않았다.
apiVersion: apps/v1 kind: Deployment metadata: name: build-deployment spec: replicas: 3 selector: matchLabels: app: sourcebuild template: metadata: labels: app: sourcebuild spec: containers: - name: sourcebuild image: pghmv2sm.kr.private-ncr.ntruss.com/build-0330:1.09 ports: - containerPort: 80 imagePullSecrets: - name: regcred --- kind: Service apiVersion: v1 metadata: name: testweb spec: ports: - port: 80 targetPort: 80 selector: app: sourcebuild type: LoadBalancer
그래서 아래와 같이 securityContext allowPrivilegeEscalation: False 를 추가했더니 항목 검사에 충족되었고, deployment 도 정상적으로 배포되었다.
apiVersion: apps/v1 kind: Deployment metadata: name: build-deployment spec: replicas: 3 selector: matchLabels: app: sourcebuild template: metadata: labels: app: sourcebuild spec: containers: - name: sourcebuild image: pghmv2sm.kr.private-ncr.ntruss.com/build-0330:1.09 ports: - containerPort: 80 securityContext: allowPrivilegeEscalation: false imagePullSecrets: - name: regcred
kubernetes 사용이 증가하면서 보안, 최적화 측면에서 검토가 필요한 경우가 꽤 있는데, 유용하게 사용할 수 있을 것 같다.
오픈소스만 봤을때는 Polaris 도 훌륭하다고 생각했는데, Fairwinds 홈페이지에 가면 유료버전인 Fairwinds Insights 의 Dashboard Demo 를 확인하니 확실히 유료가 좋은 것 같긴하다. (최상의 구성, 최적의 구성, 안전한 구성은 자본으로부터.. )
반응형'HOWTO' 카테고리의 다른 글
폐쇄망에서 kubectl 설치하기 (0) 2021.12.14 kubernetes CIS 벤치마크 테스트 도구 kube-bench (0) 2021.10.14 kubernetes manifest 분석 도구 kube-score 사용법 (0) 2021.10.08 Installing CKAN with Docker Compose (ubuntu 16.04) (0) 2020.10.11 nifi 로 여러개 파일 내용 병합하기 (merge record) (0) 2020.09.22