Kubernetes 이야기

Argo Workflow를 사용한 CI/CD 구성 (Kaniko / Trivy) 본문

Kubernetes/devops

Argo Workflow를 사용한 CI/CD 구성 (Kaniko / Trivy)

kmaster 2022. 3. 3. 22:28
반응형

Argo Workflow에서 Container Image 빌드와 만들어진 Image의 보안취약성 검사툴인 Trivy를 사용하여 Pipeline을 만들어 보자.

 

https://kmaster.tistory.com/18?category=925859 

 

Docker 없이 Docker Image 만들기 ( Kaniko )

Kaniko Kaniko 는 Dockerfile을 이용하여 Container Image를 빌드하고 Registry에 Push하는 도구이다. Kaniko는 Docker와 달리 Docker daemon 없이 빌드가 가능하다. 즉 Docker enging 설치를 하지 않아도 사용자..

kmaster.tistory.com

https://kmaster.tistory.com/24?category=923293 

 

trivy를 활용한 Container Image 취약성 검사

Trivy Trivy는 컨테이너 및 아티팩트에 대한 취약성 및 잘못된 구성정보에 대한 검사 도구이다. 소프트웨어 취약점은 소프트웨어나 운영 체제에 존재하는 결함, 또는 약점이다. OS 패

kmaster.tistory.com

 

2가지 방법을 Argo Workflow에 추가하여 보자.

https://kmaster.tistory.com/22?category=925859 

 

Argo workflow 를 활용하여 CI/CD 구축하기 (SonarQube)

argo workflow 와 설치 방법은 아래를 참고한다. https://kmaster.tistory.com/25 Argo workflow 를 활용하여 CI/CD 구축하기 (기본설치) Argo Workflow Argo Workflows는 Kubernetes에서 병렬 작업을 오케스트레..

kmaster.tistory.com

 

먼저 위에서 만든 pipleline에  kaniko를 연결해 보자

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: input-artifact-git-
  namespace: argo
spec:
  serviceAccountName: workflow
  entrypoint: pipe
  templates:
  - name: pipe
    steps:
    - - name: checkout
        template: checkout
    - - name: delay
        template: delay
    - - name: image-build
        template: image-build
        arguments:
          artifacts:
          - name: source
            from: "{{steps.checkout.outputs.artifacts.source}}"

  - name: checkout
    inputs:
      artifacts:
      - name: source
        path: /src
        git:
          repo: git://github.com/kmaster8/kubernertes.git
          revision: "main"
    outputs:
      artifacts:
      - name: source
        path: /src
    container:
      image: sonarsource/sonar-scanner-cli
      command: [sonar-scanner]
      workingDir: /src
      args: ["-Dsonar.projectKey=mytest","-Dsonar.sources=.","-Dsonar.host.url=http://sonarqube.10.60.100.40.nip.io","-Dsonar.login=2c406f88ff91426975782daa7d1873e73a06b88e"]

  - name: delay
    suspend: {}

  - name: image-build
    inputs:
      artifacts:
      - name: source
        path: /src
    container:
      name: kaniko
      image: gcr.io/kaniko-project/executor:debug
      command: [executor]
      workingDir: /src
      args:
      - "--dockerfile=Dockerfile"
      - "--context=./simple-flask"
      - "--destination=ghcr.io/kmaster8/hello:v3"
      volumeMounts:
      - name: kaniko-secret
        mountPath: /kaniko/.docker/
    volumes:
    - name: kaniko-secret
      secret:
        secretName: regcred
        items:
          - key: .dockerconfigjson
            path: config.json

 

실행을 해보자.

 

 

현재 상태는 소스 checkout과 Sonarqube 연동이 완료된 상태이고 잠시 Pause상태이다.  SonarQube Console에서 상태를 확인해 보자.

 

 

이 상태에서 소스 검사를 완료하였으면 다시 pipleline을 시작해 보자.

 

 

[Resume] 버튼을 클릭하면 image build 작업이 시작하게 된다. 작업이 모두 완료되면 다음과 같이 보이고, 실제 image가 빌드 된 것을 볼수 있다.

 

 

이제 마지막으로, 이미지 취약성 검사를 해 보자.

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: input-artifact-git-
  namespace: argo
spec:
  serviceAccountName: workflow
  entrypoint: pipe
  templates:
  - name: pipe
    steps:
    - - name: checkout
        template: checkout
    ...
    - - name: image-scan
        template: image-scan

 ...
 
   - name: image-scan
    container:
      name: image-scan
      image: docker.io/aquasec/trivy
      command:
        - trivy
      args:
        - client
        - '--severity'
        - 'CRITICAL'
        - '--exit-code'
        - '1'
        - '--remote'
        - 'http://trivy-rules.argo.svc:8080'
        - 'ghcr.io/kmaster8/hello:v3'

 

이미지 스캔 로그를 조회하면 아래와 같다. 현재 CRITICAL 이 발견되는 경우 pipeline을 중단하게 되어 있다. 

 

정상적으로 이미지 보안 검사를 한 경우 이제 kubernetes 서버에 배포하는 과정이 필요하다. ( argo rollout 배포 참고 )

 

현재까지 진행한 전체 pipeline 과정은 아래와 같다.

 

 

 

반응형
Comments