HOWTO

kubernetes 워크로드 구성 검사 실행 - Polaris by Fairwinds

한크크 2021. 10. 8. 22:53

kube-score 가 kubernetes 에 배포하기 전 manifest 의 검증을 위한 도구였다면, Polaris 는 이미 배포된 워크로드 또는 신규로 배포하게 되는 워크로드가 보안, 신뢰성, 네트워크, 효율성등에 어느정도 적절하게 구성되었는지 검사할 수 있는 도구이다.

 

Polaris 는 오픈소스로 사용할 수 있는데, 좀 더 다양한 기능과 대시보드, 기술 지원이 필요한 경우 Polaris upgrade 버전인 Fairwinds Insights 로 제공하고 있다. 

Fairwinds Polaris vs 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 만 테스트 해보았다. 

https://github.com/FairwindsOps/polaris?ref=thechiefio

 

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 살펴보기

Deployment 검사 결과

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

privilege escalation should not be allowed

그래서 아래와 같이 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 를 확인하니 확실히 유료가 좋은 것 같긴하다. (최상의 구성, 최적의 구성, 안전한 구성은 자본으로부터.. )

반응형