ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kubernetes 워크로드 구성 검사 실행 - Polaris by Fairwinds
    HOWTO 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 를 확인하니 확실히 유료가 좋은 것 같긴하다. (최상의 구성, 최적의 구성, 안전한 구성은 자본으로부터.. )

    반응형

    댓글

Designed by Tistory.