Istio
Kubernetes 구축 환경을 보면 대부분 쓰더라고..
설치
1.1. Istio 다운로드 (Control Plane)
1
2
3
ubuntu@cplane:~$ curl -L https://istio.io/downloadIstio | sh -
ubuntu@cplane:~$ cd ./istio-1.20.2/bin
ubuntu@cplane:~$ sudo cp istioctl /usr/local/bin
1.2. Istio 설치 (Control Plane)
Configuration Profiles
먼저 알아야 할 것이, 설치 환경에 따라 프로파일을 선택해야 한다.
default | demo | minimal | remote | empty | preview | ambient | |
---|---|---|---|---|---|---|---|
Core components | |||||||
istio-egressgateway | v | ||||||
istio-ingressgateway | v | v | v | ||||
istiod | v | v | v | v | v | ||
CNI | v | ||||||
Ztunnel | v |
- default : 운영 환경과 멀티 클러스터 환경에서 메인 클러스터에 권장.
- demo : 적절한 리소스 요구사항(데모앱)으로 Istio의 기능을 확인. 추적 및 로깅이 빡세서 성능 테스트에는 적합하지 않음.
- minimal : default와 동일하지만, Control Plane 구성요소만 설치.
나머지는 알 필요 있나.. ㅎ
document대로 demo로 설치해서 테스트 해보기로 함
istio 설치 (사용자 등록한 원격 PC에서도 istioctl로 설치 가능)
1
2
3
4
5
6
7
ubuntu@cplane:~$ istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
Made this installation the default for injection and validation.
default 네임스페이스에 레이블 생성 - default 네임스페이스에 생성되는 자원은 istio 적용
1
2
ubuntu@cplane:~$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
샘플 애플리케이션 배포
2.1. Bookinfo 앱 배포
문서에 나와 있는대로 진행. 명령 실행 후 모든 자원이 준비되는지 확인.
1
2
3
4
5
ubuntu@cplane:~/istio-1.20.2$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
ubuntu@cplane:~/istio-1.20.2$ kubectl get pods
# 설치 확인
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
2.2. 접속 테스트
외부에서 접속할 수 있도록 gateway 및 virtualservice 생성
1
2
3
ubuntu@cplane:~$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
ubuntu@cplane:~$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
위 설정에선 gateway가 LoadBalancer 환경에서 배포되도록 되어 있으나, 지금 내 테스트 환경은 LoadBalancer가 지원되는 환경은 아니므로, NodePort로 변경한다.
1
2
ubuntu@cplane:~$ kubectl patch svc istio-ingressgateway -n istio-system -p '{"spec": {"type": "NodePort"}}'
service/istio-ingressgateway patched
환경변수에 Ingress 포트 설정
1
2
ubuntu@cplane:~$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
ubuntu@cplane:~$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
환경변수에 Ingress IP 설정
1
ubuntu@cplane:~$ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
환경변수에 Gateway URL 설정
1
ubuntu@cplane:~$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
확인
1
2
ubuntu@cplane:~$ echo $GATEWAY_URL
192.168.193.134:30597 # 뭐 이런식으로 나옴
Ingress-nginx 와 비슷한 느낌이고, 좀 더 편해보이기도 함.
Kiali 대시보드
3.1. Kiali 설치
1
2
3
ubuntu@cplane:~/istio-1.20.2$ kubectl apply -f samples/addons
ubuntu@cplane:~/istio-1.20.2$ kubectl rollout status deployment/kiali -n istio-system
# kiali deployment 가 전부 켜질때까지 기다리기
3.2. 접속
위에서 설정한 GATEWAY_URL에 접속하고, Kiali 에 접속해보면 아래와 같은 화면을 확인할 수 있다. 짱이다. istio와 argocd를 통합하는 과정을 확인해볼 필요가 있음.
1
ubuntu@cplane:~/istio-1.20.2$ istioctl dashboard kiali
3.3. 후기
- ArgoCD에 적용해보았는데 모니터링 할 필요가 없고, 불필요한 메모리를 사용하므로 이후에도 ArgoCD에는 적용하지 않는 것이 좋음.
- 설치 시 samples/addons/ 폴더 밑에 grafana.yaml, jaeger.yaml, kiali.yaml, prometheus.yaml 만 설치하면 됨.