Home [K8S] Istio
Post
Cancel

[K8S] Istio

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

먼저 알아야 할 것이, 설치 환경에 따라 프로파일을 선택해야 한다.

 defaultdemominimalremoteemptypreviewambient
Core components       
istio-egressgateway v     
istio-ingressgatewayvv   v 
istiodvvv  vv
CNI      v
Ztunnel      v
  1. default : 운영 환경과 멀티 클러스터 환경에서 메인 클러스터에 권장.
  2. demo : 적절한 리소스 요구사항(데모앱)으로 Istio의 기능을 확인. 추적 및 로깅이 빡세서 성능 테스트에는 적합하지 않음.
  3. 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  # 뭐 이런식으로 나옴

접속해보면 아래와 같은 화면을 확인할 수 있음 00

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

01

3.3. 후기

  1. ArgoCD에 적용해보았는데 모니터링 할 필요가 없고, 불필요한 메모리를 사용하므로 이후에도 ArgoCD에는 적용하지 않는 것이 좋음.
  2. 설치 시 samples/addons/ 폴더 밑에 grafana.yaml, jaeger.yaml, kiali.yaml, prometheus.yaml 만 설치하면 됨.
This post is licensed under CC BY 4.0 by the author.