Встановлення 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