LabHub
배우기 러닝패스 코스

Istio 서비스 메시 · 깔기 전에 무엇이 깔릴지 읽는다 · 실습

깔기 전에 무엇이 깔릴지 읽는다 — 프로파일과 메시 설정

LabHub 에서 이어서 보기

목표

istioctl manifest generate 로 네 가지 설치 프로파일을 클러스터 없이 렌더해 구성요소 차이를 표로 만들고, --set meshConfig.… 로 넣은 메시 전역 설정이 렌더된 ConfigMap istio 안에 실제로 나타나는지 확인한다. 마지막에는 네임스페이스 하나만 덮어쓰는 ProxyConfig 를 진짜 API 서버에 적용해 스키마가 무엇을 강제하는지 본다.

왜 중요한가

메시 도입에서 되돌리기가 가장 비싼 결정 두 가지가 프로파일과 메시 전역 설정이다. 프로파일은 무엇을 띄울지를 정하고(게이트웨이를 둘 것인가, 앰비언트로 갈 것인가), 메시 전역 설정은 모든 프록시의 기본값이 된다. outboundTrafficPolicy.mode 하나를 REGISTRY_ONLY 로 바꾸면 그 순간부터 등록되지 않은 바깥 주소로 나가는 모든 호출이 끊긴다. 그래서 이 값들은 깔기 전에 읽어야 한다. 다행히 istioctl 은 클러스터 없이도 설치 결과를 통째로 렌더해 준다 — 매니페스트는 그 자체로 읽을 수 있는 문서이고, 프로파일을 바꿔 가며 렌더해 비교하면 무엇이 늘고 주는지 한눈에 들어온다. 값을 잘못 쓰면 클러스터에 닿기도 전에 거절당한다는 것도 여기서 확인한다.

단계

1. /root/ist-profiles 를 만들고 istioctl manifest generate --set profile=default 의 출력을 /root/ist-profiles/default.yaml 에 저장하세요. 그다음 그 파일에 든 오브젝트를 종류별로 세어 /root/ist-profiles/default-kinds.tsv<kind>\t<개수> 로, 종류 이름 오름차순으로 적으세요.
2. --set profile=minimal 렌더를 /root/ist-profiles/minimal.yaml 에 저장하세요. 그리고 default 에는 있는데 minimal 에는 없는 오브젝트를 /root/ist-profiles/minimal-missing.tsv<kind>|<이름> 한 줄씩, 정렬해서 적으세요.
3. --set profile=demo 렌더를 /root/ist-profiles/demo.yaml 에 저장하고, demo 에만 있고 default 에는 없는 오브젝트를 /root/ist-profiles/demo-extra.tsv<kind>|<이름> 으로 정렬해 적으세요.
4. default 프로파일을 그대로 쓰되 --set values.gateways.istio-ingressgateway.autoscaleMin=3 을 더해 렌더한 결과를 /root/ist-profiles/gw-scaled.yaml 에 저장하세요. 그리고 덮어쓰기 전과 후의 HorizontalPodAutoscaler istio-ingressgatewayspec.minReplicas 값을 /root/ist-profiles/hpa-before-after.tsvbefore\t<값>after\t<값> 두 줄로 적으세요.
5. minimal 프로파일에 네 가지 메시 설정을 더해 렌더하세요 — meshConfig.outboundTrafficPolicy.modeREGISTRY_ONLY, meshConfig.accessLogFile/dev/stdout, meshConfig.trustDomainlab.internal, meshConfig.defaultConfig.holdApplicationUntilProxyStartstrue 입니다. 렌더 결과에서 이름이 istio 인 ConfigMap 오브젝트만 뽑아 /root/ist-profiles/mesh-cm.yaml 에 저장하고, 그 ConfigMap 의 data.mesh 문자열만 /root/ist-profiles/mesh.yaml 에 저장하세요.
6. 세 번 일부러 틀려 보고 그 오류 문장을 /root/ist-profiles/rejected.txt 에 순서대로 모으세요 — (1) minimal 프로파일에 meshConfig.outboundTrafficPolicy.modeBLOCK_ALL 로 주기, (2) --set profile=sidecarless 로 없는 프로파일 부르기, (3) --profile=minimal 처럼 플래그 모양으로 프로파일 주기. 표준오류도 함께 담으세요.
7. 네임스페이스 profile-lab 를 만들고, 그 안에 ProxyConfig ns-default 를 실제로 적용하세요 — spec.concurrency 는 2, spec.environmentVariablesISTIO_META_LAB_TIER: "gold" 를 둡니다. 매니페스트는 /root/ist-profiles/proxyconfig.yaml 에 두세요. 그다음 /root/ist-profiles/proxyconfig-negative.yamlns-negativeconcurrency: -1 로 써서 서버 쪽 시험 적용으로 거절당하게 하고, 그 거절 문장을 /root/ist-profiles/proxyconfig-reject.txt 에 저장하세요.
8. /root/ist-profiles/profile-matrix.tsv<프로파일>\t<kind>|<이름>\t<yes|no> 를 적으세요 — 프로파일은 default·demo·minimal·ambient 네 가지가 모두 나와야 하고, 컴포넌트는 Deployment|istiod·Deployment|istio-ingressgateway·Deployment|istio-egressgateway·DaemonSet|ztunnel·DaemonSet|istio-cni-node 다섯 가지가 모두 나와야 합니다(스무 줄). /root/ist-profiles/check-profiles.sh 는 이 표를 읽어 프로파일을 다시 렌더하고 맞으면 OK … 틀리면 MISMATCH … 를 표준출력에만 찍으며 한 줄이라도 틀리면 0 이 아닌 코드로 끝나야 합니다. 그 출력을 /root/ist-profiles/matrix-result.txt 에 저장하세요.

참고

단계 8개

  1. 기본 프로파일이 무엇을 만드는지 먼저 센다
  2. minimal 로 내리면 정확히 무엇이 사라지나
  3. demo 는 default 위에 무엇을 더 얹나
  4. 프로파일을 고르는 것과 값 하나를 덮어쓰는 것은 다른 손잡이다
  5. 메시 전역 설정은 ConfigMap 한 장으로 렌더된다
  6. 렌더 단계에서 거절당하는 세 가지
  7. 메시 전역 설정을 네임스페이스 하나만 덮어쓴다
  8. 네 프로파일의 구성요소 표를 만들고 스스로 검증하게 한다