Розширюйте waypoint з втулками WebAssembly

Istio надає можливість розширювати waypoint-проксі за допомогою модулів WebAssembly (Wasm) через API TrafficExtension. У режимі ambient ресурси TrafficExtension повинні бути прикріплені до waypoint-проксі за допомогою targetRefs.

Перед початком роботи

  1. Налаштуйте Istio, дотримуючись посібника з початку роботи в режимі ambient.

  2. Розгорніть демонстраційний застосунок Bookinfo.

  3. Додайте простір імен default до ambient mesh.

  4. Розгорніть демонстраційний застосунок curl як тестове джерело:

    Zip
    $ 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-фільтр на шлюзі, посилаючись на цей файл.

Перевірка трафіку через шлюз

  1. Перевірте /productpage без облікових даних:

    $ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null "http://bookinfo-gateway-istio.default.svc.cluster.local/productpage"
    401
  2. Перевірте /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-проксі

  1. Перевірте внутрішню точку доступу /productpage без облікових даних:

    $ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null http://productpage:9080/productpage
    401
  2. Перевірте внутрішню точку доступу /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

Перевірка трафіку до сервісу

  1. Перевірте внутрішню точку доступу /productpage з обліковими даними, налаштованими на загальному проксі waypoint:

    $ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" http://productpage:9080/productpage
    200
  2. Перевірте внутрішню точку доступу /reviews з обліковими даними, налаштованими для сервісу reviews:

    $ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null -H "Authorization: Basic MXQtaW4zOmFkbWluMw==" http://reviews:9080/reviews/1
    200
  3. Перевірте внутрішню точку доступу /reviews без облікових даних:

    $ kubectl exec deploy/curl -- curl -s -w "%{http_code}" -o /dev/null http://reviews:9080/reviews/1
    401

Очищення

  1. Видаліть ресурси TrafficExtension:

    $ kubectl delete trafficextension basic-auth-at-gateway basic-auth-at-waypoint basic-auth-for-service
  2. Дотримуйтесь керівництва з видалення в режимі ambient, щоб видалити Istio та демонстраційні застосунки.

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

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