Встановлення 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
Створіть простір імен
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Встановіть 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
Розгортання демонстраційного застосунку
Додайте мітку простору імен для забезпечення дотримання політики
baselineдля простору імен default, де буде запущено демонстраційний застосунок:$ kubectl label --overwrite ns default \ pod-security.kubernetes.io/enforce=baseline \ pod-security.kubernetes.io/enforce-version=latest namespace/default labeledРозгорніть демонстраційний застосунок, використовуючи конфігураційні ресурси з увімкненим PSA:
$ 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Перевірте, чи застосунок працює всередині кластера і відображає 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>
Видалення
Видаліть демонстраційний застосунок
$ kubectl delete -f samples/bookinfo/platform/kube/bookinfo-psa.yamlВидаліть мітки з простору імен default
$ kubectl label namespace default pod-security.kubernetes.io/enforce- pod-security.kubernetes.io/enforce-version-Видаліть Istio
$ istioctl uninstall -y --purgeВидаліть простір імен
istio-system$ kubectl delete namespace istio-system