Безпека
Безпека є важливою темою для більшості організацій і людей, які запускають кластери Kubernetes. Базовий список перевірки безпеки можна знайти в іншому місці документації Kubernetes.
Щоб дізнатися, як розгортати аспекти безпеки Kubernetes і керувати ними, ви можете пройти посібники з цього розділу.
1 - Застосування Стандартів безпеки Podʼів на рівні простору імен
Примітка
Цей посібник призначено лише для нових кластерів.Pod Security Admission — це контролер допуску, який застосовує Стандарти безпеки Podʼів під час створення Podʼів. Ця можливість загальнодоступна (GA) з 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.37.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ʼи, що не відповідають останній версії стандарту безпеки Podʼів baseline.
kubectl label --overwrite ns example \
pod-security.kubernetes.io/warn=baseline \
pod-security.kubernetes.io/warn-version=latest
Ви можете налаштувати кілька перевірок стандартів безпеки Podʼів для будь-якого простору імен за допомогою міток. Ця команда застосовуватиме (enforce) Стандарт безпеки Podʼів baseline, а для Стандартів безпеки Podʼів restricted за останньою версією (стандартне значення) виконуватиме warn і audit
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 рівня baseline у просторі імен 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 рівня baseline у просторі імен default:
kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
Вивід буде подібний до такого:
pod/nginx created
Налаштування примусового застосування Стандартів безпеки Podʼів і попереджень застосовано лише до простору імен example. Ви могли б створити такий самий Pod у просторі імен default без жодних попереджень.
Очищення
Тепер видаліть кластер, який ви створили вище, виконавши цю команду:
kind delete cluster --name psa-ns-level
Що далі