Istio Hands-on Study [1기]
1주차 : Istio 첫걸음 (2) - Istio 1.17.8 설치
구구달스
2025. 4. 12. 18:32
CloudNet@ 가시다님이 진행하는 Istio Hands-on Study [1기]
✅ Kind : k8s(1.23.17) 배포
- 책 실습 소스 코드 클론
ssoon@DESKTOP-UQRJB87:~$ git clone https://github.com/AcornPublishing/istio-in-action
Cloning into 'istio-in-action'...
remote: Enumerating objects: 448, done.
remote: Counting objects: 100% (448/448), done.
remote: Compressing objects: 100% (341/341), done.
remote: Total 448 (delta 76), reused 448 (delta 76), pack-reused 0 (from 0)
Receiving objects: 100% (448/448), 17.29 MiB | 21.49 MiB/s, done.
Resolving deltas: 100% (76/76), done.
ssoon@DESKTOP-UQRJB87:~$ cd istio-in-action/book-source-code-master
ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ pwd
/home/ssoon/istio-in-action/book-source-code-master
- k8s(1.23.17) 배포
ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30000 # Sample Application (istio-ingrssgateway)
hostPort: 30000
- containerPort: 30001 # Prometheus
hostPort: 30001
- containerPort: 30002 # Grafana
hostPort: 30002
- containerPort: 30003 # Kiali
hostPort: 30003
- containerPort: 30004 # Tracing
hostPort: 30004
- containerPort: 30005 # kube-ops-view
hostPort: 30005
extraMounts:
- hostPath: /home/ssoon/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
containerPath: /istiobook
networking:
podSubnet: 10.10.0.0/16
serviceSubnet: 10.200.1.0/24
EOF
Creating cluster "myk8s" ...
✓ Ensuring node image (kindest/node:v1.23.17) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-myk8s"
You can now use your cluster with:
kubectl cluster-info --context kind-myk8s
Have a nice day! 👋
- 설치 확인
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf68e895a8ef kindest/node:v1.23.17 "/usr/local/bin/entr…" 42 seconds ago Up 39 seconds 0.0.0.0:30000-30005->30000-30005/tcp, 127.0.0.1:45475->6443/tcp myk8s-control-plane
- 기본 Tool 설치
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ docker exec -it myk8s-control-plane sh -c 'apt update && apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'
✅ Istio 1.17.8 설치
- myk8s-control-plane 진입 후 -> 코드 파일들 마운트 확인
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ docker exec -it myk8s-control-plane bash
root@myk8s-control-plane:/# tree /istiobook/ -L 1
/istiobook/
|-- README.md
|-- appendices
|-- bin
|-- ch10
|-- ch11
|-- ch12
|-- ch13
|-- ch14
|-- ch2
|-- ch3
|-- ch4
|-- ch5
|-- ch6
|-- ch7
|-- ch8
|-- ch9
`-- services
17 directories, 1 file
- 현재 셸 세션에서 ISTIOV라는 환경 변수를 1.17.8로 설정하여, Istio 버전을 지정합니다.
- ISTIOV=1.17.8 설정을 /root/.bashrc 파일에 추가하여, 새 터미널 세션에서도 이 변수가 자동으로 적용되도록 합니다.
root@myk8s-control-plane:/# export ISTIOV=1.17.8
root@myk8s-control-plane:/# echo 'export ISTIOV=1.17.8' >> /root/.bashrc
- Istio 웹사이트에서 제공하는 다운로드 스크립트를 가져와 실행하여, 지정한 버전($ISTIOV)의 Istio를 다운로드하고 설치합니다.
root@myk8s-control-plane:/# curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
Downloading istio-1.17.8 from https://github.com/istio/istio/releases/download/1.17.8/istio-1.17.8-linux-amd64.tar.gz ...
Istio 1.17.8 download complete!
...
- istio-$ISTIOV 폴더의 구조를 트리 형태로 보여주며, 최대 2단계 깊이까지만 표시
root@myk8s-control-plane:/# tree istio-$ISTIOV -L 2
istio-1.17.8
|-- LICENSE
|-- README.md
|-- bin
| `-- istioctl
|-- manifest.yaml
|-- manifests
| |-- charts
| |-- examples
| `-- profiles
|-- samples
| |-- README.md
| |-- addons
| |-- bookinfo
| |-- certs
| |-- cicd
| |-- custom-bootstrap
| |-- extauthz
| |-- external
| |-- grpc-echo
| |-- health-check
| |-- helloworld
| |-- httpbin
| |-- jwt-server
| |-- kind-lb
| |-- multicluster
| |-- open-telemetry
| |-- operator
| |-- ratelimit
| |-- security
| |-- sleep
| |-- tcp-echo
| |-- wasm_modules
| `-- websockets
`-- tools
|-- _istioctl
|-- certs
`-- istioctl.bash
31 directories, 7 files
- Istio 폴더 안에 있는 istioctl 실행 파일을 시스템의 /usr/local/bin/ 폴더로 복사하여 어디서든 실행할 수 있게 만듭니다.
- istioctl 도구의 버전을 확인하며, 원격 Istio 클러스터에는 연결하지 않습니다.
root@myk8s-control-plane:/# cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
root@myk8s-control-plane:/# istioctl version --remote=false
1.17.8
- Istio 설치 전 클러스터 환경을 점검하여 Istio 설치에 필요한 조건이 충족되었는지 확인합니다.
root@myk8s-control-plane:/# istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
To get started, check out https://istio.io/latest/docs/setup/getting-started/
- Istio에서 사용 가능한 설치 프로파일(예: default, demo) 목록을 표시합니다
root@myk8s-control-plane:/# istioctl profile list
Istio configuration profiles:
ambient
default
demo
empty
external
minimal
openshift
preview
remote
- Istio를 기본 프로파일(default)로 클러스터에 설치하며, 확인 없이 자동으로 진행(-y)합니다.
root@myk8s-control-plane:/# istioctl install --set profile=default -y
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete Making this installation the default for injection and validation.
Thank you for installing Istio 1.17. Please take a few minutes to tell us about your install/upgrade experience! https://forms.gle/hMHGiwZHPU7UQRWe9
- istio-system 네임스페이스에 있는 모든 IstioOperator 리소스를 조회하여 이름, 리비전, 상태, 생성된 시간을 표시합니다.
root@myk8s-control-plane:/# kubectl get istiooperators -n istio-system
NAME REVISION STATUS AGE
installed-state 72s
- Istio 1.17.8의 기본 프로파일로 클러스터에 설치된 설정을 정의합니다. 주요 설정으로는 ingress 게이트웨이 활성화, egress 게이트웨이 비활성화, Pilot 및 텔레메트리 활성화, 프록시 자동 주입, 그리고 리소스 제한 등이 포함됩니다. 대부분의 설정은 기본값을 사용하며, 클러스터 환경에 맞춘 최소한의 커스터마이징이 적용되었습니다.
root@myk8s-control-plane:/# kubectl get istiooperators -n istio-system -o yaml
...
spec:
components: #Istio의 개별 구성 요소(예: pilot, gateways 등)를 활성화하거나 비활성화하는 설정
base:
enabled: true #Istio의 기본 리소스(예: CRD)를 활성화
cni:
enabled: false #CNI(Container Network Interface) 플러그인을 비활성화
egressGateways: #외부로 나가는 트래픽을 처리하는 egress 게이트웨이 설정
- enabled: false #Egress 게이트웨이를 비활성화
name: istio-egressgateway
ingressGateways: #클러스터로 들어오는 트래픽을 처리하는 ingress 게이트웨이 설정
- enabled: true #Ingress 게이트웨이를 활성화
name: istio-ingressgateway
istiodRemote:
enabled: false #원격 Istiod 기능을 비활성화
pilot:
enabled: true #Istio의 제어 평면 구성 요소인 Pilot(istiod)을 활성화
hub: docker.io/istio #Istio 이미지의 기본 레지스트리를 docker.io/istio로 설정
meshConfig:
defaultConfig:
proxyMetadata: {} #프록시(Envoy)에 전달되는 기본 메타데이터를 비워둡니다.
enablePrometheusMerge: true #Istio의 메트릭과 Prometheus 메트릭을 병합하도록 설정
profile: default #Istio 설치 프로파일을 기본(default)으로 설정
tag: 1.17.8 #사용할 Istio 이미지의 버전을 1.17.8로 지정
values: #[Istio의 세부 설정 값을 정의하는 섹션]
base:
enableCRDTemplates: false #CRD 템플릿 생성을 비활성화합니다.
validationURL: "" #CRD 유효성 검사를 위한 URL을 지정하지 않습니다.
defaultRevision: "" #기본 Istio 리비전을 설정하지 않습니다.
gateways:
istio-egressgateway:
autoscaleEnabled: true #Egress 게이트웨이의 오토스케일링을 활성화
env: {} #Egress 게이트웨이에 추가 환경 변수를 설정하지 않습니다.
name: istio-egressgateway
secretVolumes: #Egress 게이트웨이에 마운트할 시크릿 볼륨 설정
- mountPath: /etc/istio/egressgateway-certs #Egress 게이트웨이 인증서를 /etc/istio/egressgateway-certs에 마운트
name: egressgateway-certs
secretName: istio-egressgateway-certs
- mountPath: /etc/istio/egressgateway-ca-certs #Egress 게이트웨이 CA 인증서를 /etc/istio/egressgateway-ca-certs에 마운트
name: egressgateway-ca-certs
secretName: istio-egressgateway-ca-certs
type: ClusterIP #Egress 게이트웨이의 서비스 타입을 ClusterIP로 설정
istio-ingressgateway:
autoscaleEnabled: true #Ingress 게이트웨이의 오토스케일링을 활성화
env: {} #Ingress 게이트웨이에 추가 환경 변수를 설정하지 않습니다.
name: istio-ingressgateway
secretVolumes: #Ingress 게이트웨이에 마운트할 시크릿 볼륨 설정
- mountPath: /etc/istio/ingressgateway-certs #Ingress 게이트웨이 인증서를 /etc/istio/ingressgateway-certs에 마운트
name: ingressgateway-certs
secretName: istio-ingressgateway-certs
- mountPath: /etc/istio/ingressgateway-ca-certs #Ingress 게이트웨이 CA 인증서를 /etc/istio/ingressgateway-ca-certs에 마운트
name: ingressgateway-ca-certs
secretName: istio-ingressgateway-ca-certs
type: LoadBalancer #Ingress 게이트웨이의 서비스 타입을 LoadBalancer로 설정하여 외부 접근을 허용
global: #[Istio의 전역 설정을 정의하는 섹션]
configValidation: true #구성 유효성 검사를 활성화
defaultNodeSelector: {}
defaultPodDisruptionBudget: #PDB을 활성화하여 가용성을 보장
enabled: true
defaultResources:
requests:
cpu: 10m #파드의 기본 CPU 요청량을 10밀리코어로 설정
imagePullPolicy: ""
imagePullSecrets: [] #이미지 레지스트리 인증 시크릿을 설정하지 않습니다.
istioNamespace: istio-system #Istio 리소스가 배포될 네임스페이스를 istio-system으로 지정
istiod:
enableAnalysis: false
jwtPolicy: third-party-jwt
logAsJson: false
logging:
level: default:info #로그 형식을 JSON이 아닌 일반 텍스트로 설정
meshNetworks: {}
mountMtlsCerts: false #mTLS 인증서 자동 마운트를 비활성화
multiCluster:
clusterName: ""
enabled: false #멀티 클러스터 기능을 비활성화
network: ""
omitSidecarInjectorConfigMap: false
oneNamespace: false
operatorManageWebhooks: false
pilotCertProvider: istiod #Pilot의 인증서 제공자를 istiod로 설정
priorityClassName: ""
proxy:
autoInject: enabled #사이드카 자동 주입을 활성화
clusterDomain: cluster.local #클러스터 내부 도메인을 cluster.local로 설정
componentLogLevel: misc:error #프록시의 기타 로그 레벨을 error로 설정
enableCoreDump: false
excludeIPRanges: ""
excludeInboundPorts: ""
excludeOutboundPorts: ""
image: proxyv2 #프록시 이미지로 proxyv2를 사용
includeIPRanges: '*' #프록시가 모든 IP 범위를 포함하도록 설정
logLevel: warning #프록시의 로그 레벨을 warning으로 설정
privileged: false
readinessFailureThreshold: 30 #프록시 준비 상태 확인 실패 임계값을 30으로 설정
readinessInitialDelaySeconds: 1 #프록시 준비 상태 확인 초기 지연을 1초로 설정
readinessPeriodSeconds: 2 #프록시 준비 상태 확인 주기를 2초로 설정
resources:
limits:
cpu: 2000m #프록시의 CPU 제한을 2000밀리코어로 설정
memory: 1024Mi #프록시의 메모리 제한을 1024MiB로 설정
requests:
cpu: 100m #프록시의 CPU 요청량을 100밀리코어로 설정
memory: 128Mi #프록시의 메모리 요청량을 128MiB로 설정
statusPort: 15020 #프록시 상태 확인 포트를 15020으로 설정
tracer: zipkin #프록시의 분산 추적 시스템을 Zipkin으로 설정
proxy_init: #[프록시 초기화 컨테이너 설정]
image: proxyv2
resources:
limits:
cpu: 2000m #프록시 초기화의 CPU 제한을 2000밀리코어로 설정
memory: 1024Mi #프록시 초기화의 메모리 제한을 1024MiB로 설정
requests:
cpu: 10m #프록시 초기화의 CPU 요청량을 10밀리코어로 설정
memory: 10Mi #프록시 초기화의 메모리 요청량을 10MiB로 설정
sds:
token:
aud: istio-ca #SDS(Secret Discovery Service)의 토큰 대상(audience)을 istio-ca로 설정
sts:
servicePort: 0 #STS(Security Token Service) 포트를 0으로 설정하여 비활성화
tracer:
datadog: {}
lightstep: {}
stackdriver: {}
zipkin: {}
useMCP: false
istiodRemote:
injectionURL: ""
pilot:
autoscaleEnabled: true #Pilot의 오토스케일링을 활성화
autoscaleMax: 5 #Pilot 파드의 최대 오토스케일 수를 5로 설정
autoscaleMin: 1 #Pilot 파드의 최소 오토스케일 수를 1로 설정
configMap: true #Pilot 설정을 ConfigMap으로 관리하도록 설정
cpu:
targetAverageUtilization: 80 #Pilot의 CPU 평균 사용률 목표를 80%로 설정
deploymentLabels: null
enableProtocolSniffingForInbound: true #인바운드 트래픽의 프로토콜 탐지를 활성화
enableProtocolSniffingForOutbound: true #아웃바운드 트래픽의 프로토콜 탐지를 활성화
env: {}
image: pilot #Pilot 이미지로 pilot을 사용
keepaliveMaxServerConnectionAge: 30m #Pilot 서버 연결의 최대 유지 시간을 30분으로 설정
nodeSelector: {}
podLabels: {}
replicaCount: 1 #Pilot 파드의 기본 복제본 수를 1로 설정
traceSampling: 1 #추적 샘플링 비율을 1%로 설정
telemetry:
enabled: true #텔레메트리 기능을 활성화
v2:
enabled: true #Istio 텔레메트리 v2 기능을 활성화
metadataExchange:
wasmEnabled: false #메타데이터 교환을 위한 WASM 모듈을 비활성화
prometheus:
enabled: true #Prometheus 메트릭 수집을 활성화
wasmEnabled: false
stackdriver:
configOverride: {}
enabled: false #Stackdriver 통합을 비활성화
logging: false
monitoring: false
topology: false
...
- istio-system 네임스페이스에서 실행 중인 Istio 관련 리소스(파드, 서비스, 디플로이먼트, 레플리카셋, HPA, 엔드포인트, 서비스 어카운트, 컨피그맵, 시크릿, PDB)를 확인합니다.
- istio-ingressgateway와 istiod가 정상 실행 중이며, 기본 프로파일로 설치된 Istio 환경이 잘 구성되었음을 확인할 수 있습니다. 서비스는 LoadBalancer(외부 접근)와 ClusterIP(내부 접근)로 설정되었고, 오토스케일링과 가용성 보장이 적용되었습니다.
root@myk8s-control-plane:/# kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
NAME READY STATUS RESTARTS AGE
pod/istio-ingressgateway-996bc6bb6-vgg65 1/1 Running 0 44s
pod/istiod-7df6ffc78d-5swsh 1/1 Running 0 59s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/istio-ingressgateway LoadBalancer 10.200.1.29 <pending> 15021:30873/TCP,80:32037/TCP,443:32477/TCP 44s
service/istiod ClusterIP 10.200.1.45 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/istio-ingressgateway 1/1 1 1 44s
deployment.apps/istiod 1/1 1 1 59s
NAME DESIRED CURRENT READY AGE
replicaset.apps/istio-ingressgateway-996bc6bb6 1 1 1 44s
replicaset.apps/istiod-7df6ffc78d 1 1 1 59s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/istio-ingressgateway Deployment/istio-ingressgateway <unknown>/80% 1 5 1 44s
horizontalpodautoscaler.autoscaling/istiod Deployment/istiod <unknown>/80% 1 5 1 59s
NAME ENDPOINTS AGE
endpoints/istio-ingressgateway 10.10.0.6:15021,10.10.0.6:8080,10.10.0.6:8443 44s
endpoints/istiod 10.10.0.5:15012,10.10.0.5:15010,10.10.0.5:15017 + 1 more... 59s
NAME SECRETS AGE
serviceaccount/default 1 60s
serviceaccount/istio-ingressgateway-service-account 1 44s
serviceaccount/istio-reader-service-account 1 60s
serviceaccount/istiod 1 59s
serviceaccount/istiod-service-account 1 60s
NAME DATA AGE
configmap/istio 2 59s
configmap/istio-ca-root-cert 1 47s
configmap/istio-gateway-deployment-leader 0 47s
configmap/istio-gateway-status-leader 0 47s
configmap/istio-leader 0 47s
configmap/istio-namespace-controller-election 0 47s
configmap/istio-sidecar-injector 2 59s
configmap/kube-root-ca.crt 1 60s
NAME TYPE DATA AGE
secret/default-token-mml9m kubernetes.io/service-account-token 3 60s
secret/istio-ca-secret istio.io/ca-root 5 47s
secret/istio-ingressgateway-service-account-token-bvr5n kubernetes.io/service-account-token 3 44s
secret/istio-reader-service-account-token-hhdhh kubernetes.io/service-account-token 3 60s
secret/istiod-service-account-token-k99lq kubernetes.io/service-account-token 3 60s
secret/istiod-token-vrr4n kubernetes.io/service-account-token 3 59s
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
poddisruptionbudget.policy/istio-ingressgateway 1 N/A 0 44s
poddisruptionbudget.policy/istiod 1 N/A 0 59s
- Istio가 설치되면서 생성된 15개의 CRD를 보여줍니다. 이 CRD들은 Istio의 네트워킹, 보안, 텔레메트리, 확장 기능을 관리하는 데 핵심적인 역할을 합니다. 이는 Istio가 클러스터에 성공적으로 배포되었음을 확인하는 중요한 정보입니다.
root@myk8s-control-plane:/# kubectl get crd | grep istio.io | sort
authorizationpolicies.security.istio.io 2025-04-12T09:20:18Z
destinationrules.networking.istio.io 2025-04-12T09:20:18Z
envoyfilters.networking.istio.io 2025-04-12T09:20:18Z
gateways.networking.istio.io 2025-04-12T09:20:18Z
istiooperators.install.istio.io 2025-04-12T09:20:18Z
peerauthentications.security.istio.io 2025-04-12T09:20:18Z
proxyconfigs.networking.istio.io 2025-04-12T09:20:18Z
requestauthentications.security.istio.io 2025-04-12T09:20:18Z
serviceentries.networking.istio.io 2025-04-12T09:20:18Z
sidecars.networking.istio.io 2025-04-12T09:20:18Z
telemetries.telemetry.istio.io 2025-04-12T09:20:18Z
virtualservices.networking.istio.io 2025-04-12T09:20:18Z
wasmplugins.extensions.istio.io 2025-04-12T09:20:18Z
workloadentries.networking.istio.io 2025-04-12T09:20:18Z
workloadgroups.networking.istio.io 2025-04-12T09:20:18Z
- authorizationpolicies.security.istio.io
Istio의 인증 정책(Authorization Policy)을 정의하여 서비스 간 접근 제어를 설정합니다. - destinationrules.networking.istio.io
트래픽의 라우팅 대상(서비스 버전, 서브셋 등)을 정의합니다. - envoyfilters.networking.istio.io
Envoy 프록시의 동작을 커스터마이징하기 위한 필터를 정의합니다. - gateways.networking.istio.io
클러스터의 ingress/egress 트래픽을 관리하는 게이트웨이를 설정합니다. - istiooperators.install.istio.io
Istio 설치와 구성을 관리하는 IstioOperator 리소스를 정의합니다. - peerauthentications.security.istio.io
서비스 간 상호 TLS(mTLS) 인증 정책을 설정합니다. - proxyconfigs.networking.istio.io
Istio 프록시(Envoy)의 전역 설정을 정의합니다. - requestauthentications.security.istio.io
JWT와 같은 요청 인증 정책을 정의합니다. - serviceentries.networking.istio.io
외부 서비스(클러스터 외부)나 내부 서비스를 Istio 메시로 등록합니다. - sidecars.networking.istio.io
특정 워크로드의 사이드카 프록시 동작(예: 트래픽 범위 제한)을 설정합니다. - telemetries.telemetry.istio.io
메트릭, 로그, 추적 등 텔레메트리 설정을 정의합니다. - virtualservices.networking.istio.io
트래픽 라우팅 규칙(예: A/B 테스트, 카나리 배포)을 정의합니다. - wasmplugins.extensions.istio.io
WebAssembly(WASM) 플러그인을 통해 Envoy 기능을 확장합니다. - workloadentries.networking.istio.io
비 쿠버네티스 워크로드(예: VM)를 Istio 메시로 통합합니다. - workloadgroups.networking.istio.io
워크로드 그룹을 정의하여 외부 워크로드의 관리를 간소화합니다.
- Istio의 samples/addons 디렉토리에 포함된 YAML 파일들을 적용하여 Istio와 함께 사용할 모니터링 및 추적 도구(Grafana, Jaeger, Kiali, Prometheus)를 설치합니다
- Grafana: Istio 메트릭을 시각화하는 대시보드 제공.
- Jaeger: 서비스 간 요청의 분산 추적 제공.
- Kiali: Istio 메시의 상태와 트래픽 흐름을 시각적으로 관리.
- Prometheus: 메트릭 수집 및 모니터링.
root@myk8s-control-plane:/# kubectl apply -f istio-$ISTIOV/samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created
Grafana 관련 리소스:
- serviceaccount/grafana created
Grafana 애플리케이션을 실행하기 위한 서비스 어카운트가 생성되었습니다. - configmap/grafana created
Grafana의 설정을 정의하는 ConfigMap이 생성되었습니다. - service/grafana created
Grafana에 접근하기 위한 쿠버네티스 서비스가 생성되었습니다. - deployment.apps/grafana created
Grafana를 실행하는 디플로이먼트가 생성되었습니다. - configmap/istio-grafana-dashboards created
Istio 관련 메트릭을 시각화하는 Grafana 대시보드 설정이 생성되었습니다. - configmap/istio-services-grafana-dashboards created
Istio 서비스별 대시보드를 위한 Grafana 설정이 생성되었습니다.
Jaeger 관련 리소스:
- deployment.apps/jaeger created
분산 추적 시스템인 Jaeger를 실행하는 디플로이먼트가 생성되었습니다. - service/tracing created
Jaeger의 추적 데이터를 수집하기 위한 서비스가 생성되었습니다. - service/zipkin created
Zipkin 프로토콜을 지원하는 Jaeger 서비스가 생성되었습니다. - service/jaeger-collector created
Jaeger의 데이터 수집을 위한 콜렉터 서비스가 생성되었습니다.
Kiali 관련 리소스:
- serviceaccount/kiali created
Kiali 애플리케이션을 실행하기 위한 서비스 어카운트가 생성되었습니다. - configmap/kiali created
Kiali의 설정을 정의하는 ConfigMap이 생성되었습니다. - clusterrole.rbac.authorization.k8s.io/kiali-viewer created
Kiali의 읽기 전용 권한을 정의하는 클러스터 역할이 생성되었습니다. - clusterrole.rbac.authorization.k8s.io/kiali created
Kiali의 전체 권한을 정의하는 클러스터 역할이 생성되었습니다. - clusterrolebinding.rbac.authorization.k8s.io/kiali created
Kiali 서비스 어카운트에 클러스터 역할을 바인딩하여 권한을 부여했습니다. - role.rbac.authorization.k8s.io/kiali-controlplane created
Kiali의 제어 평면 관련 권한을 정의하는 역할이 생성되었습니다. - rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
Kiali 서비스 어카운트에 제어 평면 역할을 바인딩했습니다. - service/kiali created
Kiali에 접근하기 위한 쿠버네티스 서비스가 생성되었습니다. - deployment.apps/kiali created
Kiali 대시보드를 실행하는 디플로이먼트가 생성되었습니다.
Prometheus 관련 리소스:
- serviceaccount/prometheus created
Prometheus 애플리케이션을 실행하기 위한 서비스 어카운트가 생성되었습니다. - configmap/prometheus created
Prometheus의 설정(예: 스크래핑 규칙)을 정의하는 ConfigMap이 생성되었습니다. - clusterrole.rbac.authorization.k8s.io/prometheus created
Prometheus가 메트릭을 수집할 수 있도록 클러스터 권한을 정의했습니다. - clusterrolebinding.rbac.authorization.k8s.io/prometheus created
Prometheus 서비스 어카운트에 클러스터 권한을 바인딩했습니다. - service/prometheus created
Prometheus에 접근하기 위한 쿠버네티스 서비스가 생성되었습니다. - deployment.apps/prometheus created
Prometheus 메트릭 수집 서버를 실행하는 디플로이먼트가 생성되었습니다.
- istio-system 네임스페이스에서 Istio 핵심 컴포넌트(istio-ingressgateway, istiod)와 애드온 도구 (grafana, jaeger, kiali, prometheus)의 파드가 모두 정상적으로 실행 중임을 확인니다.
root@myk8s-control-plane:/# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-b854c6c8-pfncw 1/1 Running 0 43s
istio-ingressgateway-996bc6bb6-vgg65 1/1 Running 0 2m6s
istiod-7df6ffc78d-5swsh 1/1 Running 0 2m21s
jaeger-5556cd8fcf-4tftt 1/1 Running 0 43s
kiali-648847c8c4-sb6n8 1/1 Running 0 43s
prometheus-7b8b9dd44c-6fbvs 2/2 Running 0 43s
- myk8s-control-plane 호스트의 루트 셸 세션을 종료하고, ubuntu 사용자의 셸로 돌아갑니다.
root@myk8s-control-plane:/# exit
exit
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$
- istio-system 네임스페이스의 istio ConfigMap을 보여주며, Istio 메시의 핵심 설정(프록시 발견 주소, Zipkin 추적, Prometheus 통합, 네임스페이스, 신뢰 도메인 등)을 확인합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-UQRJB87:~/istio-in-action/book-source-code-master$ kubectl get cm -n istio-system istio -o yaml | kubectl neat
apiVersion: v1
data:
mesh: |-
defaultConfig:
discoveryAddress: istiod.istio-system.svc:15012 #프록시가 Istio 제어 평면(Istiod)과 통신할 주소와 포트를 지정
proxyMetadata: {}
tracing:
zipkin:
address: zipkin.istio-system:9411 #추적 데이터를 Zipkin 서비스(istio-system의 zipkin 서비스, 포트 9411)로 전송하도록 설정
enablePrometheusMerge: true #Istio 메트릭과 Prometheus 메트릭을 병합하도록 활성화
rootNamespace: istio-system #Istio의 루트 네임스페이스를 istio-system으로 설정
trustDomain: cluster.local #Istio의 보안 신뢰 도메인을 cluster.local로 설정
meshNetworks: 'networks: {}'
kind: ConfigMap
metadata:
labels:
install.operator.istio.io/owning-resource: unknown #ConfigMap을 생성한 리소스가 명시되지 않았음
install.operator.istio.io/owning-resource-namespace: istio-system
istio.io/rev: default #Istio 리비전이 기본값(default)으로 설정
operator.istio.io/component: Pilot #ConfigMap이 Istio의 Pilot 컴포넌트(제어 평면)와 관련 있음
operator.istio.io/managed: Reconcile #Istio 오퍼레이터가 이 리소스를 관리하며 조정(Reconcile) 중
operator.istio.io/version: 1.17.8
release: istio
name: istio
namespace: istio-system #ConfigMap이 속한 네임스페이스는 istio-system