가상 머신과 함께하는 Bookinfo
가상 머신과 함께하는 Bookinfo
이 예제는 하나의 서비스가 가상 머신(VM)에서 실행되는 Bookinfo 애플리케이션을 쿠버네티스에 걸쳐 배포하고, 이 인프라를 단일 메시로 제어하는 방법을 보여줘요.
출처: Istio 문서
본문
이 예제는 Bookinfo 애플리케이션을 쿠버네티스에 걸쳐 배포하되, 한 서비스는 가상 머신(VM)에서 실행하게 하고, 이 인프라를 단일 메시로 제어하는 방법을 보여줘요.
개요
시작하기 전에
- Virtual Machine Installation 가이드의 지침을 따라 Istio를 설정하세요.
- Bookinfo 샘플 애플리케이션을 (bookinfo 네임스페이스에) 배포하세요.
- VM을 만들고, Configure the virtual machine의 단계를 따라 vm 네임스페이스에 추가하세요.
VM에서 MySQL 실행하기
먼저 VM에 MySQL을 설치하고 ratings 서비스의 백엔드로 구성할 거예요. 아래 모든 명령은 VM에서 실행해야 해요.
mariadb를 설치하세요.
$ sudo apt-get update && sudo apt-get install -y mariadb-server
$ sudo sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/mysql/mariadb.conf.d/50-server.cnf
인증을 설정하세요.
$ cat <<EOF | sudo mysql
# Grant access to root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
# Grant root access to other IPs
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit;
EOF
$ sudo systemctl restart mysql
MySQL 구성에 대한 자세한 내용은 Mysql에서 찾을 수 있어요.
VM에서 mysql에 ratings 데이터베이스를 추가하세요.
$ curl -LO https://raw.githubusercontent.com/istio/istio/release-1.31/samples/bookinfo/src/mysql/mysqldb-init.sql
$ mysql -u root -ppassword < mysqldb-init.sql
Bookinfo 애플리케이션 출력의 차이를 시각적으로 쉽게 확인하려면 다음 명령으로 생성되는 ratings를 변경할 수 있어요. 먼저 ratings를 확인하세요.
$ mysql -u root -ppassword test -e "select * from ratings;"
+----------+--------+
| ReviewID | Rating |
+----------+--------+
| 1 | 5 |
| 2 | 4 |
+----------+--------+
그리고 ratings를 변경하세요.
$ mysql -u root -ppassword test -e "update ratings set rating=1 where reviewid=1;select * from ratings;"
+----------+--------+
| ReviewID | Rating |
+----------+--------+
| 1 | 1 |
| 2 | 4 |
+----------+--------+
mysql 서비스를 메시에 노출하기
가상 머신이 시작되면 자동으로 메시에 등록돼요. 하지만 Pod를 만들 때와 마찬가지로, 쉽게 접근하려면 Service를 먼저 만들어야 해요.
$ cat <<EOF | kubectl apply -f - -n vm
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
EOF
mysql 서비스 사용하기
Bookinfo의 ratings 서비스는 머신의 DB를 사용할 거예요. 제대로 작동하는지 확인하려면 VM의 mysql db를 사용하는 ratings 서비스 버전 2를 만드세요. 그런 다음 review 서비스가 ratings 버전 2를 사용하도록 강제하는 라우트 규칙을 지정하세요.
$ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2-mysql-vm.yaml@
Bookinfo가 ratings 백엔드를 사용하도록 강제하는 라우트 규칙을 만드세요.
$ kubectl apply -n bookinfo -f @samples/bookinfo/networking/virtual-service-ratings-mysql-vm.yaml@
Bookinfo 애플리케이션 출력이 Reviewer1에서 별 1개, Reviewer2에서 별 4개를 보여주는지 확인하거나, VM에서 ratings를 변경해서 결과를 확인할 수 있어요.
가상 머신에서 쿠버네티스 서비스에 접근하기
위 예제에서는 가상 머신을 서버로만 취급했어요. 가상 머신에서 쿠버네티스 서비스를 매끄럽게 호출할 수도 있어요.
$ curl productpage.bookinfo:9080/productpage
...
<title>Simple Bookstore App</title>
...
Istio의 DNS 프록시가 가상 머신용 DNS를 자동으로 구성해서 쿠버네티스 호스트네임으로 호출할 수 있게 해줘요.
정리
- Bookinfo cleanup의 단계를 따라 Bookinfo 샘플 애플리케이션과 그 구성을 삭제하세요.
- mysqldb Service를 삭제하세요.
$ kubectl delete service mysqldb
- virtual-machine uninstall의 단계를 따라 VM을 정리하세요.