Розширюйте waypoint з втулками WebAssembly
Istio надає можливість розширювати waypoint-проксі за допомогою модулів WebAssembly (Wasm) через API TrafficExtension. У режимі ambient ресурси TrafficExtension повинні бути прикріплені до waypoint-проксі за допомогою targetRefs.
Перед початком роботи
Налаштуйте Istio, дотримуючись посібника з початку роботи в режимі ambient.
Розгорніть демонстраційний застосунок Bookinfo.
Розгорніть демонстраційний застосунок curl як тестове джерело:
$ kubectl apply -f @samples/curl/curl.yaml@
На шлюзі
Завдяки Kubernetes Gateway API, Istio надає централізовану точку входу для керування трафіком у сервісній мережі. Ми налаштуємо TrafficExtension на рівні шлюзу, забезпечуючи, щоб весь трафік, який проходить через шлюз, підлягав розширеним правилам автентифікації.
Налаштування втулка WebAssembly для шлюзу
У цьому прикладі ви додасте модуль HTTP Basic auth до вашого mesh. Ви налаштуєте Istio на завантаження модуля Basic auth із віддаленого реєстру образів та його завантаження. Він буде налаштований для виконання при викликах до /productpage. Ці кроки схожі на ті, що описані в Виконання модулів WebAssembly, з тією різницею, що використовується поле targetRefs замість селекторів міток.
Отримайте назву шлюзу:
$ kubectl get gateway
NAME CLASS ADDRESS PROGRAMMED AGE
bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 42mСтворіть TrafficExtension, націлений на bookinfo-gateway:
$ kubectl apply -f - <<EOF
apiVersion: extensions.istio.io/v1alpha1
kind: TrafficExtension
metadata:
name: basic-auth-at-gateway
spec:
targetRefs:
- kind: Gateway
group: gateway.networking.k8s.io
name: bookinfo-gateway
phase: AUTHN
wasm:
url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
pluginConfig:
basic_auth_rules:
- prefix: "/productpage"
request_methods:
- "GET"
- "POST"
credentials:
- "ok:test"
- "YWRtaW4zOmFkbWluMw=="
EOFБуде виконано інʼєкцію HTTP-фільтра на шлюзі як фільтр автентифікації. Агент Istio інтерпретуватиме конфігурацію TrafficExtension, завантажуватиме віддалені модулі Wasm з реєстру образів OCI до локального файлу та вбудовувати HTTP-фільтр на шлюзі, посилаючись на цей файл.
Перевірка трафіку через шлюз
Перевірте
/productpageбез облікових даних:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null "http://bookinfo-gateway-istio.default.svc.cluster.local/productpage" 401Перевірте
/productpageз обліковими даними, налаштованими у ресурсіTrafficExtension:$ kubectl exec deploy/curl -- curl -s -o /dev/null -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" -w "%{http_code}" "http://bookinfo-gateway-istio.default.svc.cluster.local/productpage" 200
На waypoint для всіх сервісів у просторі імен
Waypoint-проксі відіграють важливу роль у режимі ambient Istio, забезпечуючи безпечну та ефективну комунікацію в межах mesh-мережі. Нижче ми розглянемо, як застосувати конфігурацію Wasm до waypoint, покращуючи функціональність проксі динамічно.
Розгортання waypoint-проксі
Дотримуйтесь інструкцій з розгортання waypoint для розгортання waypoint-проксі у просторі імен bookinfo:
$ istioctl waypoint apply --enroll-namespace --waitПереконайтеся, що трафік досягає сервісу:
$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null http://productpage:9080/productpage
200Налаштування втулка WebAssembly для waypoint
Отримайте назву waypoint-шлюзу:
$ kubectl get gateway
NAME CLASS ADDRESS PROGRAMMED AGE
bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 23h
waypoint istio-waypoint 10.96.202.82 True 21hСтворіть TrafficExtension, націлений на waypoint:
$ kubectl apply -f - <<EOF
apiVersion: extensions.istio.io/v1alpha1
kind: TrafficExtension
metadata:
name: basic-auth-at-waypoint
spec:
targetRefs:
- kind: Gateway
group: gateway.networking.k8s.io
name: waypoint
phase: AUTHN
wasm:
url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
pluginConfig:
basic_auth_rules:
- prefix: "/productpage"
request_methods:
- "GET"
- "POST"
credentials:
- "ok:test"
- "YWRtaW4zOmFkbWluMw=="
EOFПерегляд сконфігурованого втулка
$ kubectl get trafficextension
NAME AGE
basic-auth-at-gateway 28m
basic-auth-at-waypoint 14mПеревірка трафіку через waypoint-проксі
Перевірте внутрішню точку доступу
/productpageбез облікових даних:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null http://productpage:9080/productpage 401Перевірте внутрішню точку доступу
/productpageз обліковими даними:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" http://productpage:9080/productpage 200
На waypoint для конкретного сервісу
Створіть TrafficExtension, націлений на сервіс reviews, щоб розширення застосовувалося лише до сервісу reviews. У цій конфігурації автентифікаційний токен і префікс налаштовані спеціально для сервісу reviews, забезпечуючи, що лише запити, спрямовані до нього, підлягають цьому механізму автентифікації.
$ kubectl apply -f - <<EOF
apiVersion: extensions.istio.io/v1alpha1
kind: TrafficExtension
metadata:
name: basic-auth-for-service
spec:
targetRefs:
- kind: Service
group: ""
name: reviews
phase: AUTHN
wasm:
url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
pluginConfig:
basic_auth_rules:
- prefix: "/reviews"
request_methods:
- "GET"
- "POST"
credentials:
- "ok:test"
- "MXQtaW4zOmFkbWluMw=="
EOFПеревірка трафіку до сервісу
Перевірте внутрішню точку доступу
/productpageз обліковими даними, налаштованими на загальному проксіwaypoint:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" http://productpage:9080/productpage 200Перевірте внутрішню точку доступу
/reviewsз обліковими даними, налаштованими для сервісуreviews:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null -H "Authorization: Basic MXQtaW4zOmFkbWluMw==" http://reviews:9080/reviews/1 200Перевірте внутрішню точку доступу
/reviewsбез облікових даних:$ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null http://reviews:9080/reviews/1 401
Очищення
Видаліть ресурси
TrafficExtension:$ kubectl delete trafficextension basic-auth-at-gateway basic-auth-at-waypoint basic-auth-for-serviceДотримуйтесь керівництва з видалення в режимі ambient, щоб видалити Istio та демонстраційні застосунки.