Bookinfo у віртуальній машині

Цей приклад розгортає застосунок Bookinfo у Kubernetes з одним сервісом, що працює на віртуальній машині (VM), і ілюструє, як контролювати цю інфраструктуру як єдину мережу.

Огляд

Bookinfo, що працює у VM
Bookinfo, що працює у 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 сервісу рейтингів.

Zip
$ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2-mysql-vm.yaml@

Створіть правила маршрутизації, які примусово використовують бекенд рейтингів у Bookinfo:

Zip
$ 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.

Очищення

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!