Book info 애플리케이션 설치와 테스트
istio설치를 완료하였다면, istio 공식페이지에서 제공하는 book info 앱을 설치하고 테스트 해보자.
앱 설치 전 사전 준비
먼저 default 네임스페이스에 istio인젝션을 위한 라벨을 추가하자. 사이드카로 추가하는 것에 대한 자세한 내용은 여기를 보자.
kubectl label namespace default istio-injection=enabled --overwrite
Book Info 앱 설치하기
1. Book Info 앱 배포
이제 Book Info 앱을 배포해보자.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
공식 페이지에서는 kubectl apply -f sample/bookinfo/platform/kube/bookinfo.yaml
을 이용해서 설치하는데 bookinfo.yaml을 클릭해보면 주소가 나온다.
여기서는 이렇게 설치했다.
**kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.11/samples/bookinfo/platform/kube/bookinfo.yaml**
2. 외부에서 Book Info에 접속하기 위한 게이트웨이 배포
이제 앱에 접속하기 위한 게이트웨이를 배포해보자.
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.11/samples/bookinfo/networking/bookinfo-gateway.yaml
인그레그 게이트웨이 아이피 확인하기
istio의 인그레스 게이트웨이의 아이피가 localhost이기 때문에 http://localhost/productpage로 접속해보자.
destination rule 배포
마지막으로 destination rule을 배포한다.
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
https://raw.githubusercontent.com/istio/istio/release-1.11/samples/bookinfo/networking/destination-rule-all.yaml
위에서 설치한 bookinfo-gateway.yaml 파일의 내부를 보면 Gateway와 VirtualService 오브젝트를 생성하는 것을 알 수 있다. gateway를 통해서 들어온 서비스가 VirautlService의 오브젝트에 명시된 규칙에 따라 쿠버네티스의 서비스로 트래픽을 보낸다.
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
destination rule 규칙을 살펴보면 각각의 서비스로 들어온 트래픽을 어떠한 파드로 보낼 것인지 라우팅 해주는 것이다.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
트래픽 확인해보기
실제로 어떻게 서비스가 되는지 눈으로 살펴볼 수 있도록 kiali를 설치해보자.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.11/samples/addons/kiali.yaml
프로메테우스가 설치되어있지 않다면 설치해보자.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.11/samples/addons/prometheus.yaml
설치가 완료되었으면 다음 명령어를 통해 대시보드를 열자.
istioctl dashboard kiali
설치 후 트러블 슈팅
쿠버네티스 리셋버튼이 있어서 설치 및 삭제를 하다보니
istio의 gateway에 로드밸런서가 팬딩 상태에서 벗어나지 못하는 문제가 발생했다.
확인해보니 vpnkit-controoler 에서 에러가 발생한걸 확인했다.
그런데 다른데에서 443포트나 80포트를 사용하고 있지는 않은데
➜ ~ kubectl logs vpnkit-controller -n kube-system
2021/10/23 11:36:30 Starting kube-vpnkit-forwarder...
time="2021-10-23T11:37:24Z" level=error msg="Port 15021 for service istio-ingressgateway is already opened by another service"
time="2021-10-23T11:37:24Z" level=error msg="Port 80 for service istio-ingressgateway is already opened by another service"
time="2021-10-23T11:37:24Z" level=error msg="Port 443 for service istio-ingressgateway is already opened by another service"
time="2021-10-23T11:37:30Z" level=error msg="Port 15021 for service istio-ingressgateway is already opened by another service"
time="2021-10-23T11:37:30Z" level=error msg="Port 80 for service istio-ingressgateway is already opened by another service"
time="2021-10-23T11:37:30Z" level=error msg="Port 443 for service istio-ingressgateway is already opened by another service"
원인은 아직 찾지 못했지만 NodePort로 타입을 변경해보면 서비스가 되는걸 확인할 수 있다.
time="2021-10-23T11:45:32Z" level=info msg="Closed port 15021"
time="2021-10-23T11:45:32Z" level=info msg="Closed port 80"
time="2021-10-23T11:45:32Z" level=info msg="Closed port 443"
time="2021-10-23T11:45:32Z" level=info msg="Opened port 30802 for service istio-ingressgateway:15021"
time="2021-10-23T11:45:32Z" level=info msg="Opened port 30722 for service istio-ingressgateway:80"
time="2021-10-23T11:45:32Z" level=info msg="Opened port 32763 for service istio-ingressgateway:443"
➜ ~ kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway NodePort 10.98.212.10 <none> 15021:30802/TCP,80:30722/TCP,443:32763/TCP 9m
istiod ClusterIP 10.105.235.224 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 9m4s
이후에 LoadBalancer 타입으로 변경하면 다시 잘 localhost로 설정된다.
Author And Source
이 문제에 관하여(Book info 애플리케이션 설치와 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nueah/Book-info-애플리케이션-설치와-테스트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)