Istio Certified Associate 합격 후기



TL DR;

  1. 난이도는 문서의 예제만으로도 취득 가능한 수준
  2. 응시 환경에서 단축키등의 이슈가 있어 빠른 문제풀이 필요

1. Intro

약 3년전 미래 먹거리는 Kubernetes라고 생각했고 그래서 CKA를 취득했다.
요즘 미래 먹거리는 뭘까 생각했을때 istio쪽에 관심이 갔고, 사내 데모에도 일부 사용하고 있어 취득을 준비하게 되었다.

Istio를 왜 도입해야하는가라는 질문을 한다면, 지금까지는 1. 플랫폼단에서의 세밀한 트래픽 설정 및 관리(metric,log,etc)와 2. 내부트래픽간 보안이라고 생각한다. 테스트를 통해 1.의 일부 설정들과 트러블슈팅을 진행하고 있지만 필요한 기능만 사용하고 있고, 1+2 전체를 아우르는 전반적인 과정을 이해하고 싶어서 동기부여를 위해 ICA(Istio Certified Associate) 자격증을 구매했다.


..지만 미루고 미루다가 250117 응시기회 만료를 앞두고 250114 1회차, 250116 2회차시험으로 합격하였다. 그 과정을 정리해두고자 한다

2. 시험 준비 과정

2.1. 강의류


위 두개 링크외에도 Udemy등 유료 강의 플랫폼에도 강의들이 있다. 위의 강의를 수강하고, 부족하다면 수강하려고 하였으나 위의 강의로도 충분했기에 별도로 수강하진 않았다.

만약 Istio가 완전히 처음이고, 어떤 구성요소가 있고 어떤 기능을 하는지 잘 모른다면 한번쯤 수강하고 시작하는게 좋을듯하다.


그러나 다루는 내용들이 결국 Istio 공식문서의 Concepts/Tasks 내용과 큰 차이가 없으며, 시험 범위 외의 자료들(Observability, Ambient mode 등)도 있다. 나의 경우 실제로 구축하고 사용하면서 한번쯤 보았기에 빠르게 실전 문제 형식의 material로 넘어갔다.

2.2. istio-certified-associate-ica-exam

istio-certified-associate-ica-exam


실제 시험 출제범위에 맞춰 출제 범위에 해당하는 주제들을 선정한 뒤 공식문서의 해당 설명 부분들을 정리해둔 GitHub 페이지이다.


각 시험 주제 출제에 대한 공식 문서의 예제가, 시험문제 형식으로 제시되어있다. 문제를 보고 어떤 object를 생성해야하는지, 어떤 field 값을 줘야하는지 떠올릴수 있으면 베스트. 또한 동시에 연관된 문서의 링크도 연결되어있어 시험 시 해당 문제를 풀기 위해 봐야하는 문서의 이름과 위치를 확인하기에도 좋다. 대중 교통 이동시 많이 참고함

2.3. https://killercoda.com/lorenzo-g


최종적으로 시험은 실습 위주인 만큼 실습 환경이 필요하다. 직접 로컬 k8s 환경을 구성하고 실습을 진행해도되나 직접 구축은 연습 목표 대비 사전에 준비할 요소가 너무 많아 번거롭다. virtual service(vs)만 생성해 timeout/fault injection을 위해서는 vs만 필요하다. 그렇지만 직접 실습환경을 만드려면 vs와 연결될 workload(svc,deploy)라던지 작동 확인을 위해 요청을 보낼 client pod(sleep) 등이 배포되어야하기에 번거롭다.


위의 Killerkoda 실습 환경을 사용하면 위의 문제를 간단히 해결할 수 있다. 무료 기준 하나의 시나리오만 활성화 할 수 있다는 부분만 유료와 차이가 나며 내용은 동일하다. 시험과 유사한 유형, 방식, 난이도로 물어보기에 연습하기에 좋다. 해당 환경에서 보여주는 Tip/Solution 대신 v1.18 문서tasksreference configuraion의 개별 리소스 의 spec 설명을 참고해 답안을 작성할 수 있으면 합격에 문제는 없을듯하다.

기타 유용한 자료들

https://github.com/latermonk/CNCF-Istio-Certified-Associate-Task

공부 materials 정리

3. 시험 응시 과정

3.1. 시험 중 이슈

apiVersion 이슈


작성일 기준 istio latest는 241219에 릴리즈된 istio 1.24.2이다. 그러나 시험환경은 230726에 릴리즈istio 1.18.2로 구성되어있다.


CKA류와 같이 오픈북 시험인 만큼 istio docs를 활용할 수 있다. 버전에 맞는 v1.18 문서를 참고해야하나 홈페이지 내부 검색을 통해 문서를 따라가보면 latest로 이동하게된다.

ex) Sidecar resource를 찾기 위해 검색할 경우, latest로 이동하게 됨

Sidecar search result


버전이 다른 문서를 쓰면 작동이 안되는가? 생성하려는 리소스에 따라 apiVersion 이 달라서 생성이 안될 수도 있고, 내부 spec 차이가 없어 생성이 가능할 수도 있다. 문제가 되는 부분은, 시험 환경에서는 apiVersion: networking.istio.io/v1beta1 를 사용하라고 명시가 되어있다는 점이다.


latest 버전의 문서에서는 v1으로 승격된 오브젝트가 많고, v1.18이더라도 example이나 reference configuration 문서에서 v1alpha3 로 작성된 예시가 많다. 단순히 예시 복붙하여 작성하다가는 온전한 점수를 못얻을 수도 있다.

단축키 이슈 – 무선 마우스 사용 권장

별도 브라우저를 통해 VM과 연결되어 시험을 응시하기에. 단축키 사용에 있어 다소 번거로움이 있다.


Macbook을 사용해 시험에 응시 했고, Macbook > PSI Secure Browser > VM 에 접속해, VM 내부의 chrome과 vscode를 사용하고 vscode 내부의 bash terminal을 사용했다.


이중 삼중에 걸친 환경이기에 단축키 사용이 원활하지가 않다. 대표적인 단축키인 복사/붙여넣기의 경우, 결론적으로 이야기하면

  • MAC > PSI Secure Brower
    • Browser 내부의 메모장 사용시, ⌘+C / ⌘+V
  • VM > Chrome, vscode, (별도) terminal
    • chrome 문서의) yaml을 vscode로 또는 command를 terminal로
    • Ctrl+C / Ctrl+V
  • VScode > terminal
    • vscode 내부의 터미널에 붙여넣을경우
    • Ctrl+Shift+C / Ctrl+Shift+V


..보다시피 여러 단축키들을 왔다갔다해야한다.


또한 (설정마다 다르겠지만) 맥북 트랙패드에서 우클릭시 사용하는 Ctrl + 클릭은 PSI Brower 단까지만 적용되고 VM 내부단에서는 작용되지않아 트랙패드만 사용했을 경우 우클릭은 사용할 수 없었다(아마도?). 2회차 시험에서 proctor에게 wireless mouse 사용가능한지 확인을 받았고, vscode 터미널에서의 단축키 또한 마우스 우클릭 팝업을 통해 확인하였다. 그 외에도, VM 내부에서 창 정렬, 창 전환, 탭 전환등의 단축키가 적용되지 않아 그런부분에서 고통을 겪었다(magnet 쓰고싶다)

참고 가능 페이지의 제한

istio/kubernetes docs의 허용된 페이지를 제외하면 브라우저단에서 접근이 안된다. 과거 CKA 응시시 실수로 검색 결과의 docs 대신 blog/discussion 페이지를 열어서 경고/종료 처리됬다던 후기에 비하면 훨씬 나은듯?


그러나 문제는 istio docs의 task 일부는 예시 설정을 github 설정으로 대신하고, 시험 환경에서 github 페이지는 접근이 되지 않는다는 점이다.

Route based on user identity


위의 예시의 경우 사실 생략된 부분은 metadata.name 밖에 없긴하다. 그러나 바로 안보이면 불안하지 않는가.. 이에 대한 대응은 아래 시험 환경 부분에서 설명함

3.2. 시험 환경

alias 설정

ICA Exam Environment 페이지에서는 kubectl and Bash autocompletion 이 설정되어있다고 하였으나.. 설정되어있지 않은듯 하였다. Tab으로 기본커맨드 자동완성(Bash autocompletion)은 되나 k, pod, ns이름과 같은 부분들은 자동완성 되지않았다(kubectl autocompletion). 시험 환경은 Bashshell이기에 다음 설정을 추가하여 사용함

# 사용하는 쉘 확인
echo $SHELL

# 설정 페이지 수정
vi ~/.bashrc

# 주로쓰는 명령어 축약
alias k='kubectl'
alias kaf='kubectl apply -f'
alias ica='istioctl analyze'

# 설정 reload 또는 터미널 새로 열기
source ~/.bashrc


/home/candidate/istio-1.18.2

위의 참고페이지 제한 처럼, docs에서 github에 연결된 파일은 접근이 불가능하다. 그러나 시험환경을 뒤적거리던 중 아래 링크의 v1.18.2레포가 소제목 경로에 클론되어있음을 확인하였다. 아마 시험환경구성(istioctl 설치)시 있는것 같음

https://github.com/istio/istio/tree/release-1.18.2-patch


해당 레포안의 samples 디렉토리에 참고할 파일들이 다수 있다. 다만 해당 samples yaml은 v1alpha3 apiVersion을 사용하기에 적용전 v1beta1으로 변경 필수

https://github.com/istio/istio/tree/release-1.18.2-patch/samples/bookinfo/networking


vscode로 해당 디렉토리를 열어두고 문제마다 t21.yaml, t41.yaml 등으로 정리하면서 kaf t21.yaml -n aaa로 적용, ica -n aaa로 검토, 문제 발생시 yaml 수정 후 kaf t21.yaml -n aaa로 configure… 반복


시간에 여유가 있으면 istioctl analyze 대신 default ns에 sleep pod 하나 띄우고 curl로 검증돌릴수도 있지만 kubectl autocompletion 안되기도하고.. 귀찮기도하고 (설마 안되겠어) 상세검증은 스킵 했다

4. 기출 유형 정리

Domains & Competencies


시험 준비할때 기출에 대한 정보가 전혀 없어서 잘 준비하고 있는게 맞나라는 불안감이 컸다. 그래서 참고차 1/2회차 구성과 주요 컨셉을 남김


시험은 18개의 실습형 문제와 5개의 4Multiple Choise 또는 T/F Question 로 구성되어 있다. 항목별 가중치는 별도로 표시되어 있지 않았다.

  • Istio Installation, Upgrade & Configuration 7% > 1task
  • Traffic Management 40% > 9tasks
  • Resilience and Fault Injection 20% > 3tasks
  • Securing Workloads 20% > 3tasks
  • Advanced Scenarios 13% > 2tasks
  • Multiple Question > 5문제


본인의 경우 1, 2회차 모두 문제수는 동일하였다. 매번 task 마다 서로 다른 ns에 적용을 요구해서 조금 귀찮았고 kubectl config set-context --current --namespace=customer 로 tasks마다 ns 기본값을 변경하면서 볼까하다가 매번 변경도 귀찮고 t27을 까먹고 t28에 적용되는등 꼬일까봐 + 끝나고 default ns에서 k get gw,vs,dr,se,pa,ra,sidecar 해서 No resources found in default namespace. 하면 각 ns에 잘 분배되었을테니 기본 ns를 변경하지는 않았다.


자주 물어보는 tasks 유형은 있지만 완전히 동일한 내용을 물어보지는 않는다. 같은 내용이더라도 생성할 리소스 이름, ns, 설정값(weight 비율, timeout/retry 기준 등)이 바뀌긴 한다.

  • 1회차
    • Istio Installation, Upgrade & Configuration
      • default profile 기반으로 특정 component에 리소스 할당 후 생성
    • Traffic Management
      • weight routing
      • mirroring
      • ns 수준의 sidecar inject(label)
      • ingress gw
      • egress gw
      • loadbalancing mode
      • etc
    • Resilience and Fault Injection
      • timeout
      • retry
      • faultinject
    • Securing Workloads
      • mtls 설정
      • etc
    • Advanced Scenarios
      • pod 안뜸 > deploy label 확인
      • 뭔가 header값 오류보고 트래픽 정상화하기
    • Multiple Question
      • Workload Group(k8s deploy유사)/Workload Entry(k8s pod유사)
      • istio에서 service discovery 가시성 확보방법
      • 그냥 docs 검색해서 풀만한 수준들
  • 2회차
    • Istio Installation, Upgrade & Configuration
      • demo profile 기반 특정 component 활성/비활성 또는 리소스 제약
    • Traffic Management
      • weight routing
      • mirroring
      • ns 수준의 sidecar inject(label)
      • gateway 리소스만으로 vs 제한
      • egress gw
      • serviceentry
      • etc
    • Resilience and Fault Injection
      • timeout
      • outlier detection(circuit breaker)
      • faultinject
    • Securing Workloads
      • mtls 설정
      • RBAC: access denied
      • pa
    • Advanced Scenarios
      • sidecar 리소스 업데이트 및 배포
      • timeout 56
    • Multiple Question
      • istio requestauthentication 작동원리 > JWT
      • Workload Group/Entry
      • multi istio 배포시 revision 사용
      • mTLS permissive 모드시 동작방식
      • 그냥 docs 검색해서 풀만한 수준들


1회차에서는 서킷 브레이커 안나오고, 2회차에서는 vs의 로드밸런싱 안나오는등 어느정도 주제 Pool이 있고, 같은 주제 pool이여도 디테일에서 다소 차이가 난다.


5. Outro

오래간만에 Docs와 terminal만 사용해 작업하려니 꽤나 힘들었다. 그동안 별의별 편의성 도구와 플러그인으로 편하게 사용하고, 작업하다 막히면 그냥 LLM에게 던져서 해결했는데 순수하게 기본 도구로 작업하려니 많이 고통스러웠다

  • lens로 클러스터/네임스페이스 리소스 한번에 보고싶어..
  • k9s로 버튼 하나로 get, edit, describe, log, shell 접속을 하고싶어..
  • k ns로 편하게 context/namespace 전환하고싶어..
  • cursor로 적당히 virtualservice 기본 템플릿 불러와달라고 하고싶어..
  • gpt한테 이거 들여쓰기 다 수정해달라고 던지고싶어..
  • etc…


구축을 위한 시험이라는 느낌을 받았고 istio에 대한 이해도가 올라갔는지는 잘 모르겠다.

  • istio resource를 사용하여 트래픽관리, 보안등의 기능을 구성할 수는 있지만
    • gw, vs, dr, pa 등의 YAML의 작성을 테스트하는 시험
  • 구성된게 어떻게 동작하는지 이해하는건 별도의 영역 아닐까
    • 가장 기본적인, v1, v2subset을 생성하고 트래픽을 8:2로 나눴을때 누가 어떤원리로 트래픽 흐름을 감시하고 해당 기능을 구현하는가 > envoy긴 한데 envoy는 왜 안물어보지
  • 구축을 위한 YAML은 GPT등이 더 잘만듬. 설정을 먹였지만 의도한대로 동작하지 않거나 에러발생시 트러블 슈팅이 가능하냐가 결국 istio 이해도인 것 같은데 아쉽
    • 문제중에서 이러한 일부 트러블슈팅형 문제가 있긴 했고 그런 문제들은 재밌었음


그래도 시험을 준비하면서 istio가 준비/제시한 기본 사용사례들을 최소 한번 정도 실제로 다 실습해봤다는점이 제일 큰 장점이라고 생각한다.

Leave a Reply