Трафік HTTP
Це завдання показує, як налаштувати політику авторизації Istio з дією ALLOW для HTTP трафіку в mesh Istio.
Перед початком
Перед початком цього завдання виконайте наступні кроки:
Ознайомтеся з концепціями авторизації Istio.
Дотримуйтесь посібника з установки Istio, щоб встановити Istio з увімкненим взаємним TLS.
Розгорніть демонстраційний застосунок Bookinfo.
Після розгортання застосунку Bookinfo перейдіть на сторінку продукту Bookinfo за адресою http://$GATEWAY_URL/productpage. На сторінці продукту ви побачите такі розділи:
- Деталі книги в середній частині сторінки, що включає: тип книги, кількість сторінок, видавець тощо.
- Огляди книг в нижній частині сторінки.
Коли ви оновите сторінку, застосунок показує різні версії оглядів на сторінці продукту. Застосунок представляє огляди у стилі “кругового розподілу” (round robin): червоні зірки, чорні зірки або без зірок.
Налаштування контролю доступу для навантажень за допомогою HTTP трафіку
Використовуючи Istio, ви можете легко налаштувати контроль доступу для робочого навантаження у вашому mesh. Це завдання показує, як налаштувати контроль доступу за допомогою авторизації Istio. Спочатку ви налаштовуєте просту політику allow-nothing, яка відхиляє всі запити до навантаження, а потім поступово надаєте більше доступу до навантаження.
Запустіть наступну команду для створення політики
allow-nothingу просторі іменdefault. Політика не має поляselector, що застосовує політику до всіх навантажень у просторі іменdefault. Полеspec:політики має пусте значення{}. Це значення означає, що жоден трафік не дозволяється, ефективно відмовляючи всім запитам.$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {} EOFВідкрийте в оглядачі сторінку продукту Bookinfo (
http://$GATEWAY_URL/productpage). Ви повинні побачити"RBAC: access denied". Ця помилка показує, що конфігурована політикаdeny-allпрацює як потрібно, і в Istio немає жодних правил, які дозволяють доступ до навантажень у mesh.Запустіть наступну команду для створення політики
productpage-viewer, щоб дозволити доступ з методомGETдо навантаженняproductpage. Політика не встановлює полеfromуrules, що означає, що дозволені всі джерела, ефективно дозволяючи доступ усім користувачам та навантаженням:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"] EOFВідкрийте в браузері сторінку продукту Bookinfo (
http://$GATEWAY_URL/productpage). Тепер ви повинні побачити сторінку “Bookinfo Sample”. Однак на сторінці можуть з’явитися наступні помилки:Error fetching product detailsError fetching product reviews
Ці помилки є очікуваними, оскільки ми ще не надали навантаженню
productpageдоступ до навантаженьdetailsіreviews. Далі вам потрібно налаштувати політику для надання доступу до цих навантажень.Запустіть наступну команду для створення політики
details-viewer, щоб дозволити навантаженнюproductpage, яке надсилає запити за допомогою службового облікового записуcluster.local/ns/default/sa/bookinfo-productpage, отримувати доступ до навантаженняdetailsчерез методиGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "details-viewer" namespace: default spec: selector: matchLabels: app: details action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-productpage"] to: - operation: methods: ["GET"] EOFЗапустіть наступну команду для створення політики
reviews-viewer, щоб дозволити навантаженнюproductpage, яке надсилає запити за допомогою службового облікового записуcluster.local/ns/default/sa/bookinfo-productpage, отримувати доступ до навантаженняreviewsчерез методиGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "reviews-viewer" namespace: default spec: selector: matchLabels: app: reviews action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-productpage"] to: - operation: methods: ["GET"] EOFВідкрийте в оглядачі сторінку продукту Bookinfo (
http://$GATEWAY_URL/productpage). Тепер ви повинні побачити сторінку “Bookinfo Sample” з розділами “Деталі книги” з лівого нижнього кута і “Огляди книг” з правого нижнього кута. Однак у розділі “Огляди книг” може зʼявитися помилкаRatings service currently unavailable.Це повʼязано з тим, що навантаження
reviewsне має дозволу на доступ до навантаженняratings. Щоб розвʼязати цю проблему, потрібно надати навантаженнюreviewsдоступ до навантаженняratings. Далі налаштуйте політику для надання доступу навантаженнюreviews.Запустіть наступну команду для створення політики
ratings-viewer, щоб дозволити навантаженнюreviews, яке надсилає запити за допомогою службового облікового записуcluster.local/ns/default/sa/bookinfo-reviews, отримувати доступ до навантаженняratingsчерез методиGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "ratings-viewer" namespace: default spec: selector: matchLabels: app: ratings action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-reviews"] to: - operation: methods: ["GET"] EOFВідкрийте в оглядачі сторінку продукту Bookinfo (
http://$GATEWAY_URL/productpage). Тепер ви повинні побачити “чорні” та “червоні” рейтинги у розділі “Огляди книг”.Вітаємо! Ви успішно застосували політику авторизації для забезпечення контролю доступу для навантажень за допомогою HTTP трафіку.
Очищення
Видаліть усі політики авторизації з вашої конфігурації:
$ kubectl delete authorizationpolicy.security.istio.io/allow-nothing
$ kubectl delete authorizationpolicy.security.istio.io/productpage-viewer
$ kubectl delete authorizationpolicy.security.istio.io/details-viewer
$ kubectl delete authorizationpolicy.security.istio.io/reviews-viewer
$ kubectl delete authorizationpolicy.security.istio.io/ratings-viewer