Застосування Стандартів безпеки Pod на рівні простору імен
Примітка
Цей посібник застосовується лише для нових кластерів.Pod Security Admission — це контролер допуску, який застосовує Стандарти безпеки Pod при створенні Podʼів. Це функція, яка є загально доступною з v1.25. У цьому посібнику ви будете застосовувати Стандарт безпеки Pod baseline
, по одному простору імен за раз.
Ви також можете застосовувати Стандарти безпеки Pod до кількох просторів імен одночасно на рівні кластера. Щоб дізнатися більше, перейдіть за посиланням Застосування Стандартів безпеки Pod на рівні кластера.
Перш ніж ви розпочнете
Встановіть на ваш компʼютер наступне:
Створення кластера
Створіть кластер
kind
наступним чином:kind create cluster --name psa-ns-level
Вивід буде подібний до цього:
Creating cluster "psa-ns-level" ... ✓ Ensuring node image (kindest/node:v1.31.0) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-psa-ns-level" You can now use your cluster with: kubectl cluster-info --context kind-psa-ns-level Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
Встановіть контекст kubectl для нового кластера:
kubectl cluster-info --context kind-psa-ns-level
Вивід буде подібний до цього:
Kubernetes control plane is running at https://127.0.0.1:50996 CoreDNS is running at https://127.0.0.1:50996/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Створення простору імен
Створіть новий простір імен з назвою example
:
kubectl create ns example
Вивід буде подібний до цього:
namespace/example created
Увімкнення перевірки Стандартів безпеки Pod для цього простору імен
Увімкніть Стандарти безпеки Pod на цьому просторі імен за допомогою підтримуваних міток, вбудованих в Pod Security Admission. На цьому кроці ви налаштуєте перевірку, щоб система попереджувала про Podʼи, які не відповідають останньої версії стандарту безпеки підсистеми baseline.
kubectl label --overwrite ns example \ pod-security.kubernetes.io/warn=baseline \ pod-security.kubernetes.io/warn-version=latest
Ви можете налаштувати кілька перевірок стандартів безпеки Podʼів для будь-якого простору імен за допомогою міток. Наступна команда буде застосовувати стандарт безпеки Pod
baseline
, алеwarn
таaudit
для стандартів безпеки Podrestricted
згідно з останньою версією (стандартне значення)kubectl label --overwrite ns example \ pod-security.kubernetes.io/enforce=baseline \ pod-security.kubernetes.io/enforce-version=latest \ pod-security.kubernetes.io/warn=restricted \ pod-security.kubernetes.io/warn-version=latest \ pod-security.kubernetes.io/audit=restricted \ pod-security.kubernetes.io/audit-version=latest
Перевірте дотримання стандарту безпеки Podʼів
Створіть Pod з базовим стандартом в просторі імен
example
:kubectl apply -n example -f https://k8s.io/examples/security/example-baseline-pod.yaml
Pod дійсно запускається; вивід містить попередження. Наприклад:
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") pod/nginx created
Створіть Pod з базовим стандартом у просторі імен
default
:kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
Вивід буде подібний до такого:
pod/nginx створено
Виконання стандартів безпеки Podʼів та налаштування попереджень було застосовано лише до простору імен example
. Ви можете створити такий самий Pod в просторі імен default
без будь-яких попереджень.
Очищення
Тепер видаліть кластер, який було створено:
kind delete cluster --name psa-ns-level
Що далі
Виконайте скрипт для виконання всіх попередніх кроків одночасно.
- Створіть кластер kind.
- Створіть новий простір імен.
- Застосуйте стандарт безпеки підсистеми
baseline
в режиміenforce
, при цьому застосовуючи стандарт безпеки підсистемиrestricted
також у режиміwarn
таaudit
. - Створіть новий Pod з застосованими стандартами безпеки Podʼів.