Post

Istioctl Command Cheat Sheet

Istioctl Command Cheat Sheet

Istio를 운영하면서 숙지해야 할 istioctl 명령어들을 정리합니다.


1. 기본 설정 및 상태 확인

1
2
3
4
5
6
7
istioctl version                                     # istioctl 및 클러스터 Istio 버전 확인
istioctl version --remote=false                      # 클라이언트 버전만 확인
istioctl proxy-status                                # 모든 프록시의 동기화 상태 확인 (ps로 축약 가능)
istioctl ps                                          # proxy-status 축약형
istioctl ps -o json                                  # JSON 형식으로 프록시 상태 출력
istioctl verify-install                              # Istio 설치 상태 검증
istioctl operator dump                               # IstioOperator 설정 덤프

2. 설치 및 업그레이드

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
# 설치
istioctl install                                     # 기본 프로파일로 설치
istioctl install --set profile=demo                  # demo 프로파일로 설치
istioctl install --set profile=minimal               # minimal 프로파일로 설치
istioctl install --set profile=default               # default 프로파일(프로덕션 권장) 설치
istioctl install -f custom-istio.yaml                # 커스텀 IstioOperator 매니페스트로 설치
istioctl install --dry-run                           # 실제 설치 없이 매니페스트 확인 (dry-run)
istioctl install --set values.global.proxy.resources.requests.cpu=100m  # 리소스 설정과 함께 설치

# 프로파일 확인
istioctl profile list                                # 사용 가능한 설치 프로파일 목록
istioctl profile dump default                        # 특정 프로파일의 설정 덤프
istioctl profile diff demo default                   # 두 프로파일 간 차이 비교

# 매니페스트 생성 (GitOps용)
istioctl manifest generate --set profile=default > istio.yaml  # 설치 매니페스트 생성
istioctl manifest generate -f custom-istio.yaml > istio.yaml   # 커스텀 설정으로 매니페스트 생성
istioctl manifest diff manifest1.yaml manifest2.yaml  # 두 매니페스트 비교

# 업그레이드
istioctl upgrade                                     # Istio 업그레이드 (In-Place)
istioctl upgrade --dry-run                           # 업그레이드 시뮬레이션
istioctl x precheck                                  # 업그레이드 전 사전 점검

# 제거
istioctl uninstall --purge                           # Istio 완전 제거
istioctl uninstall -f custom-istio.yaml              # 특정 설정으로 설치된 Istio 제거
istioctl uninstall --revision canary                 # 특정 리비전 제거

3. 사이드카 프록시 관리

1
2
3
4
5
6
7
8
9
10
11
12
13
# 네임스페이스 라벨 기반 자동 주입
kubectl label namespace <namespace> istio-injection=enabled      # 자동 주입 활성화
kubectl label namespace <namespace> istio-injection=disabled     # 자동 주입 비활성화
kubectl label namespace <namespace> istio-injection-             # 라벨 제거

# 수동 사이드카 주입
istioctl kube-inject -f deployment.yaml | kubectl apply -f -     # 사이드카 주입 후 적용
istioctl kube-inject -f deployment.yaml -o injected.yaml         # 주입된 매니페스트 파일로 저장
istioctl kube-inject -f deployment.yaml --revision canary        # 특정 리비전으로 주입

# 주입 상태 확인
kubectl get namespace -L istio-injection             # 네임스페이스별 주입 설정 확인
kubectl get pods -n <namespace> -o jsonpath='{.items[*].spec.containers[*].name}' | tr ' ' '\n' | grep istio-proxy  # 사이드카 주입 여부 확인

4. 구성 분석 및 검증

1
2
3
4
5
6
7
8
9
10
11
12
# 구성 분석
istioctl analyze                                     # 현재 네임스페이스의 구성 분석
istioctl analyze --all-namespaces                    # 모든 네임스페이스 분석
istioctl analyze -n <namespace>                      # 특정 네임스페이스 분석
istioctl analyze -f virtual-service.yaml             # YAML 파일 분석 (적용 전 검증)
istioctl analyze --use-kube=false -f config/         # 클러스터 연결 없이 로컬 파일만 분석
istioctl analyze --suppress "IST0102=*"              # 특정 메시지 코드 무시
istioctl analyze -o json                             # JSON 형식으로 분석 결과 출력

# 구성 검증
istioctl validate -f virtual-service.yaml            # 리소스 YAML 검증
istioctl validate -f config/ --warnings              # 디렉토리 내 모든 파일 검증 (경고 포함)

5. 프록시 구성 디버깅 (proxy-config)

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
# 기본 프록시 구성 확인
istioctl proxy-config cluster <pod-name>.<namespace>   # 클러스터 구성 확인 (upstream)
istioctl proxy-config listener <pod-name>.<namespace>  # 리스너 구성 확인 (inbound/outbound)
istioctl proxy-config route <pod-name>.<namespace>     # 라우팅 구성 확인
istioctl proxy-config endpoint <pod-name>.<namespace>  # 엔드포인트 구성 확인
istioctl proxy-config bootstrap <pod-name>.<namespace> # 부트스트랩 구성 확인
istioctl proxy-config secret <pod-name>.<namespace>    # 시크릿(TLS 인증서) 구성 확인

# 축약형 (pc)
istioctl pc cluster <pod-name>.<namespace>
istioctl pc listener <pod-name>.<namespace>
istioctl pc route <pod-name>.<namespace>
istioctl pc endpoint <pod-name>.<namespace>

# 상세 출력 옵션
istioctl pc cluster <pod-name>.<namespace> -o json     # JSON 형식으로 출력
istioctl pc cluster <pod-name>.<namespace> -o yaml     # YAML 형식으로 출력
istioctl pc listener <pod-name>.<namespace> --port 80  # 특정 포트 리스너만 확인
istioctl pc route <pod-name>.<namespace> --name 80     # 특정 라우트 이름만 확인
istioctl pc endpoint <pod-name>.<namespace> --cluster "outbound|80||reviews.default.svc.cluster.local"  # 특정 클러스터의 엔드포인트만
istioctl pc endpoint <pod-name>.<namespace> --status healthy  # 건강한 엔드포인트만 표시

# 전체 Envoy 구성 덤프
istioctl proxy-config all <pod-name>.<namespace>       # 모든 프록시 구성 출력
istioctl proxy-config all <pod-name>.<namespace> -o json  # JSON으로 전체 구성 덤프

6. 트래픽 디버깅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 요청 경로 추적
istioctl x describe pod <pod-name>.<namespace>         # Pod의 트래픽 구성 요약 (인바운드/아웃바운드)
istioctl x describe service <service-name>.<namespace>  # 서비스의 트래픽 구성 요약

# 실시간 트래픽 모니터링 (Envoy Access Log)
kubectl logs -n <namespace> <pod-name> -c istio-proxy -f  # 사이드카 프록시 로그 실시간 확인
kubectl logs -n <namespace> <pod-name> -c istio-proxy --tail=100  # 최근 100줄 로그

# Envoy Admin API 직접 접근
kubectl exec -n <namespace> <pod-name> -c istio-proxy -- pilot-agent request GET /config_dump  # 전체 Envoy 구성 덤프
kubectl exec -n <namespace> <pod-name> -c istio-proxy -- pilot-agent request GET /stats        # Envoy 통계
kubectl exec -n <namespace> <pod-name> -c istio-proxy -- pilot-agent request GET /clusters     # 클러스터 상태
kubectl exec -n <namespace> <pod-name> -c istio-proxy -- pilot-agent request GET /listeners    # 리스너 상태
kubectl exec -n <namespace> <pod-name> -c istio-proxy -- pilot-agent request POST /logging?level=debug  # 로그 레벨 변경

# Envoy 포트포워드로 Admin UI 접근
kubectl port-forward -n <namespace> <pod-name> 15000:15000  # Envoy Admin 포트 포워딩
# 이후 http://localhost:15000 에서 Envoy Admin UI 접근

7. 프록시 동기화 및 xDS 디버깅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 프록시 동기화 상태 상세 확인
istioctl proxy-status                                  # 모든 프록시 상태 (SYNCED/NOT SENT/STALE)
istioctl proxy-status <pod-name>.<namespace>           # 특정 Pod의 상태 상세

# xDS 구성 비교 (istiod vs proxy)
istioctl proxy-status <pod-name>.<namespace> --diff    # istiod에 있는 구성과 프록시 구성 비교

# istiod 디버깅
istioctl remote-clusters                               # 멀티클러스터 환경에서 원격 클러스터 확인
kubectl logs -n istio-system -l app=istiod -f          # istiod 로그 확인
kubectl logs -n istio-system -l app=istiod --tail=200  # istiod 최근 로그

# 디버그 정보 수집
istioctl bug-report                                    # 디버그 정보 수집 (지원 요청 시 유용)
istioctl bug-report --include <namespace>              # 특정 네임스페이스 포함하여 수집
istioctl bug-report --duration 30m                     # 최근 30분 데이터만 수집

8. 보안 및 인증 디버깅

1
2
3
4
5
6
7
8
9
10
11
12
# mTLS 상태 확인
istioctl x authz check <pod-name>.<namespace>          # AuthorizationPolicy 적용 상태 확인
istioctl pc secret <pod-name>.<namespace>              # TLS 인증서 상태 확인
istioctl pc secret <pod-name>.<namespace> -o json | jq '.dynamicActiveSecrets'  # 활성 시크릿 상세

# 인증서 정보 확인
istioctl proxy-config secret <pod-name>.<namespace> -o json | jq -r '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.inlineBytes' | base64 -d | openssl x509 -text -noout  # 인증서 상세 정보

# PeerAuthentication 및 AuthorizationPolicy 적용 확인
kubectl get peerauthentication -A                      # 모든 PeerAuthentication 확인
kubectl get authorizationpolicy -A                     # 모든 AuthorizationPolicy 확인
istioctl analyze -n <namespace>                        # 보안 정책 구성 문제 분석

9. Waypoint 프록시 관리 (Ambient Mesh)

1
2
3
4
5
6
7
8
9
# Waypoint 프록시 배포 (Ambient Mesh 환경)
istioctl waypoint generate --namespace <namespace>     # Waypoint 매니페스트 생성
istioctl waypoint apply --namespace <namespace>        # Waypoint 배포
istioctl waypoint delete --namespace <namespace>       # Waypoint 삭제
istioctl waypoint list                                 # Waypoint 목록 확인
istioctl waypoint status --namespace <namespace>       # Waypoint 상태 확인

# Ambient Mesh 네임스페이스 설정
kubectl label namespace <namespace> istio.io/dataplane-mode=ambient  # Ambient 모드 활성화

10. 멀티클러스터 관리

1
2
3
4
5
6
7
# 멀티클러스터 설정
istioctl create-remote-secret --name <cluster-name> --context <kubeconfig-context>  # 원격 클러스터 시크릿 생성
istioctl remote-clusters --context <kubeconfig-context>  # 원격 클러스터 목록 확인

# 크로스 클러스터 서비스 디버깅
istioctl proxy-status --context <kubeconfig-context>   # 특정 클러스터의 프록시 상태
istioctl analyze --context <kubeconfig-context>        # 특정 클러스터 분석

11. 대시보드 접근

1
2
3
4
5
6
7
8
9
10
11
12
13
# 내장 대시보드 접근 (포트포워딩 자동 설정)
istioctl dashboard kiali                               # Kiali 대시보드 (서비스 메시 시각화)
istioctl dashboard prometheus                          # Prometheus 대시보드 (메트릭)
istioctl dashboard grafana                             # Grafana 대시보드 (시각화)
istioctl dashboard jaeger                              # Jaeger 대시보드 (분산 트레이싱)
istioctl dashboard zipkin                              # Zipkin 대시보드 (분산 트레이싱)
istioctl dashboard envoy <pod-name>.<namespace>        # 특정 Pod의 Envoy Admin UI
istioctl dashboard controlz <pod-name>.<namespace>     # istiod ControlZ UI

# 대시보드 접근 옵션
istioctl dashboard kiali --browser=false               # 브라우저 자동 열기 비활성화
istioctl dashboard kiali --address 0.0.0.0             # 모든 인터페이스에서 접근 허용
istioctl dashboard kiali --port 20001                  # 커스텀 포트 지정

12. 트러블슈팅 명령어

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 일반적인 문제 진단
istioctl analyze --all-namespaces                      # 전체 클러스터 구성 문제 분석
istioctl proxy-status                                  # 프록시 동기화 상태 확인 (STALE 확인)
istioctl verify-install                                # 설치 무결성 검증

# 특정 Pod 문제 진단
istioctl x describe pod <pod-name>.<namespace>         # Pod 트래픽 구성 요약
istioctl pc all <pod-name>.<namespace> -o json > envoy-config.json  # 전체 Envoy 구성 저장
istioctl proxy-config log <pod-name>.<namespace> --level debug  # 프록시 로그 레벨 변경

# 연결 문제 진단
istioctl pc cluster <pod-name>.<namespace> | grep <target-service>  # 대상 서비스 클러스터 존재 확인
istioctl pc endpoint <pod-name>.<namespace> | grep <target-service>  # 대상 서비스 엔드포인트 확인
istioctl pc listener <pod-name>.<namespace> | grep <port>  # 리스너 바인딩 확인

# 버그 리포트 생성
istioctl bug-report                                    # 전체 디버그 정보 수집
istioctl bug-report --include <namespace1>,<namespace2>  # 특정 네임스페이스만 포함
istioctl bug-report --exclude <namespace>              # 특정 네임스페이스 제외

# istiod 상태 확인
kubectl get pods -n istio-system -l app=istiod         # istiod Pod 상태
kubectl describe pod -n istio-system -l app=istiod     # istiod Pod 상세 정보
kubectl logs -n istio-system -l app=istiod --tail=500  # istiod 로그

13. 유용한 별칭 및 환경 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
# istioctl 별칭 설정
alias ic=istioctl
alias ips='istioctl proxy-status'
alias ipc='istioctl proxy-config'
alias ia='istioctl analyze'

# 자주 사용하는 조합
istioctl ps | grep -v SYNCED                           # 동기화되지 않은 프록시만 표시
istioctl analyze 2>&1 | grep -E "Error|Warning"        # 에러와 경고만 필터링
istioctl pc cluster <pod>.<ns> | grep -E "outbound.*<service>"  # 특정 서비스로의 아웃바운드 클러스터 확인

# 네임스페이스 환경 변수 설정
export ISTIO_NAMESPACE=istio-system                    # Istio 시스템 네임스페이스 설정

14. 실험적 명령어 (istioctl x)

1
2
3
4
5
6
7
8
9
10
# 실험적 기능 (experimental)
istioctl x describe pod <pod-name>.<namespace>         # Pod 구성 설명
istioctl x describe service <service-name>.<namespace>  # 서비스 구성 설명
istioctl x authz check <pod-name>.<namespace>          # 인가 정책 확인
istioctl x precheck                                    # 설치/업그레이드 전 사전 점검
istioctl x uninstall --purge                           # Istio 완전 제거 (실험적)

# Workload Entry 자동 등록
istioctl x workload entry configure                    # VM Workload Entry 설정
istioctl x workload group create --name <name> --namespace <namespace>  # WorkloadGroup 생성

15. Reference


궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요. Written with KKamJi

This post is licensed under CC BY 4.0 by the author.