일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CI/CD
- Kubeflow
- blue/green
- serving
- opentelemetry
- operator
- Argo
- MLflow
- nginx ingress
- eBPF
- 오퍼레이터
- 카오스 엔지니어링
- argocd
- Model Serving
- Continuous Deployment
- Kubernetes
- mlops
- keda
- seldon core
- Litmus
- xdp
- Kubernetes 인증
- Pulumi
- gitops
- knative
- Kopf
- CANARY
- opensearch
- kubernetes operator
- tekton
- Today
- Total
Kubernetes 이야기
Argo Workflow를 사용한 CI/CD 구성 (Kaniko / Trivy) 본문
Argo Workflow에서 Container Image 빌드와 만들어진 Image의 보안취약성 검사툴인 Trivy를 사용하여 Pipeline을 만들어 보자.
https://kmaster.tistory.com/18?category=925859
https://kmaster.tistory.com/24?category=923293
2가지 방법을 Argo Workflow에 추가하여 보자.
https://kmaster.tistory.com/22?category=925859
먼저 위에서 만든 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 과정은 아래와 같다.
'Kubernetes > devops' 카테고리의 다른 글
(docker) PMD 사용하기 (0) | 2022.03.22 |
---|---|
Argo workflow 를 활용하여 CI/CD 구축하기 (기본설치) (0) | 2022.03.06 |
Argo workflow 를 활용하여 CI/CD 구축하기 (SonarQube) (2) | 2022.03.03 |
Argo rollout을 통한 Blue/Green CD (Continuous Deployment) 구축하기 (2) - Blue/Green 배포 (0) | 2022.02.27 |
Docker 없이 Docker Image 만들기 ( Kaniko ) (2) | 2022.02.27 |