지난 시간에는 istio가 무엇인지, 그리고 왜 사용하는지에 대해서 알아보았다.
이번 시간에는 istio를 설치 해 보고 간단한 어플리케이션을 배포 한 후에 istio가 무엇인지 눈으로 확인해보려 한다.
1. istioctl 설치 / 환경변수 적용
## istio를 설치하는 바이너리를 curl로 설치하겠다.
curl -L https://istio.io/downloadIstio | sh -
## istioctl은 바이너리 형태로 설치가 되며 해당 폴더에 들어가서 ./istioctl 로 명령어를 입력할수 있지만
## 모든 폴더에서 적용가능 하도록 export를 이용해서 환경변수를 수정하겠다.
export PATH="$PATH:/root/istio/istio-1.16.2/bin"
2. istio install
## profile을 데모로 하는것은
## have a good set of defaults for testing 테스트 용도로 좋은 값으로 세팅이 되어있기 때문이다.
istioctl install --set profile=demo -y
## istio-injection을 라벨링 걸어줌으로써 해당 네임스페이스에 생기는 파드들은
## 사이드카 패턴으로 적용이 된다.
kubectl label namespace default istio-injection=enabled
3. Sample Application ( bookinfo )
## istio 바이너리 파일들을 설치한 폴더에 위치하여 경로에 맞게 명령어를 입력한다.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
4. Traffic Management
## 경로는 istio 바이너리 폴더에서 실행하여야 한다.
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
## 접속정보를 모르는 경우 ingress ip와 port를 입력합니다.
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
echo "$GATEWAY_URL"
bookinfo 배포가 끝났으며
kubectl get svc -n instio-system 으로 조회하면
istio-ingress-gateway에 접속 EXTERNAL -IP 가 나오는데 해당 ip에 prefix / exact 등 옵션을 통해서
yaml로 세팅한 fqdn으로 접속하여 k8s 리소스 service까지 접근이 가능하다.
번외로, bookinfo-gateway와 virtual Service를 확인해보자
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
이 코드의 yaml을 분석해보자. custom으로 작성하는 연습을 몇번 해보면 더 이해가 잘 갈 것이다.
###
root@ip-172-31-5-75:~/cicd/eurekaserver/k8s# vim gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: eureka-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: eureka
spec:
hosts:
- "eureka.taskoo.net"
gateways:
- eureka-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
host: eureka
port:
number: 8761
'컨테이너 > istio' 카테고리의 다른 글
[istio] (4). Traffic Management (0) | 2021.12.09 |
---|---|
[istio] (3) istio Telemetry (0) | 2021.12.09 |
[istio] (1) istio란 무엇인가? (0) | 2020.12.21 |