Bookinfo у віртуальній машині
Цей приклад розгортає застосунок Bookinfo у Kubernetes з одним сервісом, що працює на віртуальній машині (VM), і ілюструє, як контролювати цю інфраструктуру як єдину мережу.
Огляд
Перед тим як почати
Налаштуйте Istio, дотримуючись інструкцій з посібника з встановлення віртуальних машин.
Розгорніть демонстраційний застосунок Bookinfo (у просторі імен
bookinfo
).Створіть VM і додайте її до простору імен
vm
, дотримуючись кроків з Налаштування віртуальної машини.
Запуск MySQL на VM
Спочатку ми встановимо MySQL у VM і налаштуємо його як бекенд для сервісу рейтингу. Всі команди нижче потрібно виконати у 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
# Надати доступ root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
# Надати доступ root для інших IP
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.
$ curl -LO https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/src/mysql/mysqldb-init.sql
$ mysql -u root -ppassword < mysqldb-init.sql
Щоб легко візуально перевірити різницю у виводі застосунку Bookinfo, ви можете змінити рейтинги, що генеруються, використовуючи наступні команди для перевірки рейтингів:
$ mysql -u root -ppassword test -e "select * from ratings;"
+----------+--------+
| ReviewID | Rating |
+----------+--------+
| 1 | 5 |
| 2 | 4 |
+----------+--------+
і для зміни рейтингів
$ 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, нам потрібно створити Сервіс, щоб ми могли легко до нього доступитися.
$ 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 буде використовувати БД на машині. Щоб перевірити, чи це працює, створіть версію 2 сервісу рейтингів, що використовує mysql db на VM. Потім вкажіть правила маршрутизації, які примусово використовують версію 2 сервісу рейтингів.
$ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2-mysql-vm.yaml@
Створіть правила маршрутизації, які примусово використовують бекенд рейтингів у Bookinfo:
$ kubectl apply -n bookinfo -f @samples/bookinfo/networking/virtual-service-ratings-mysql-vm.yaml@
Ви можете перевірити, що вивід Bookinfo показує 1 зірку від Reviewer1 і 4 зірки від Reviewer2 або змініть рейтинги у вашій VM і перегляньте результати.
Доступ до сервісів Kubernetes з віртуальної машини
У наведеному прикладі ми розглядали нашу віртуальну машину лише як сервер. Ми також можемо безперешкодно викликати сервіси Kubernetes з нашої віртуальної машини:
$ curl productpage.bookinfo:9080/productpage
...
<title>Simple Bookstore App</title>
...
DNS-проксіювання в Istio автоматично налаштовує DNS для віртуальної машини, що дозволяє нам викликати хости Kubernetes.
Очищення
Видаліть демонстраційний застосунок
Bookinfo
та його конфігурацію, дотримуючись кроків зОчищення Bookinfo
.Видаліть Сервіс
mysqldb
:$ kubectl delete service mysqldb
Виконайте очищення VM, дотримуючись кроків з Видалення віртуальної машини.