Трафік 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 details
Error 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