Встановлення Istio з Pod Security Admission

Слідуйте цьому посібнику для встановлення, налаштування та використання Istio mesh з контролером допуску Pod Security Admission (PSA), який забезпечує дотримання baseline політики у просторах імен всередині mesh.

Стандартно Istio вставляє init контейнер, istio-init, у podʼи, розгорнуті в mesh. istio-init вимагає, щоб користувач або службовий обліковий запис, що розгортає podʼи в mesh, мав достатні права Kubernetes RBAC для розгортання контейнерів з можливостями NET_ADMIN та NET_RAW.

Однак, політика baseline не включає NET_ADMIN або NET_RAW до своїх дозволених можливостей. Щоб уникнути примусового застосування політики privileged у всіх просторах імен в mesh, необхідно використовувати Istio mesh з втулком Istio Container Network Interface. DaemonSet istio-cni-node у просторі імен istio-system вимагає томів hostPath для доступу до локальних тек CNI. Оскільки це не дозволено у політиці baseline, простір імен, де буде розгорнутий DaemonSet CNI, повинен забезпечувати дотримання політики privileged policy. Стандартно цей простір імен — istio-system.

Встановлення Istio з PSA

  1. Створіть простір імен istio-system і призначте йому мітку для забезпечення дотримання політики privileged.

    $ kubectl create namespace istio-system
    $ kubectl label --overwrite ns istio-system \
        pod-security.kubernetes.io/enforce=privileged \
        pod-security.kubernetes.io/enforce-version=latest
    namespace/istio-system labeled
  2. Встановіть Istio з CNI в кластер Kubernetes версії 1.25 або пізнішої.

    $ istioctl install --set components.cni.enabled=true -y
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ CNI installed
    ✔ Installation complete

Розгортання демонстраційного застосунку

  1. Додайте мітку простору імен для забезпечення дотримання політики baseline для простору імен default, де буде запущено демонстраційний застосунок:

    $ kubectl label --overwrite ns default \
        pod-security.kubernetes.io/enforce=baseline \
        pod-security.kubernetes.io/enforce-version=latest
    namespace/default labeled
  2. Розгорніть демонстраційний застосунок, використовуючи конфігураційні ресурси з увімкненим PSA:

    Zip
    $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-psa.yaml@
    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
  3. Перевірте, чи застосунок працює всередині кластера і відображає HTML-сторінки, перевіряючи заголовок сторінки у відповіді:

    $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>

Видалення

  1. Видаліть демонстраційний застосунок

    $ kubectl delete -f samples/bookinfo/platform/kube/bookinfo-psa.yaml
  2. Видаліть мітки з простору імен default

    $ kubectl label namespace default pod-security.kubernetes.io/enforce- pod-security.kubernetes.io/enforce-version-
  3. Видаліть Istio

    $ istioctl uninstall -y --purge
  4. Видаліть простір імен istio-system

    $ kubectl delete namespace istio-system
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

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