6.4 KiB
| title | description | weight | aliases | keywords | owner | test | |||
|---|---|---|---|---|---|---|---|---|---|
| Встановлення Istio з Pod Security Admission | Встановлення та використання Istio з контролером допуску Pod Security Admission. | 65 |
|
|
istio/wg-networking-maintainers | yes |
Слідуйте цьому посібнику для встановлення, налаштування та використання 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.
{{< warning >}}
Простори імен у mesh також можуть використовувати політику restricted policy. Вам потрібно налаштувати seccompProfile для ваших застосунків відповідно до специфікацій політики.
{{< /warning >}}
Встановлення Istio з PSA
-
Створіть простір імен
istio-systemі призначте йому мітку для забезпечення дотримання політикиprivileged.{{< text bash >}} $ 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 {{< /text >}} -
Встановіть Istio з CNI в кластер Kubernetes версії 1.25 або пізнішої.
{{< text bash >}} $ istioctl install --set components.cni.enabled=true -y ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ CNI installed ✔ Installation complete {{< /text >}}
Розгортання демонстраційного застосунку
-
Додайте мітку простору імен для забезпечення дотримання політики
baselineдля простору імен default, де буде запущено демонстраційний застосунок:{{< text bash >}} $ kubectl label --overwrite ns default
pod-security.kubernetes.io/enforce=baseline
pod-security.kubernetes.io/enforce-version=latest namespace/default labeled {{< /text >}} -
Розгорніть демонстраційний застосунок, використовуючи конфігураційні ресурси з увімкненим PSA:
{{< text bash >}} $ 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 {{< /text >}}
-
Перевірте, чи застосунок працює всередині кластера і відображає HTML-сторінки, перевіряючи заголовок сторінки у відповіді:
{{< text bash >}}
{{< /text >}}kubectl exec "(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
Видалення
-
Видаліть демонстраційний застосунок
{{< text bash >}} $ kubectl delete -f samples/bookinfo/platform/kube/bookinfo-psa.yaml {{< /text >}}
-
Видаліть мітки з простору імен default
{{< text bash >}} $ kubectl label namespace default pod-security.kubernetes.io/enforce- pod-security.kubernetes.io/enforce-version- {{< /text >}}
-
Видаліть Istio
{{< text bash >}} $ istioctl uninstall -y --purge {{< /text >}}
-
Видаліть простір імен
istio-system{{< text bash >}} $ kubectl delete namespace istio-system {{< /text >}}