Налаштування RunAsUserName для Podʼів та контейнерів Windows
Kubernetes v1.18 [stable]Ця сторінка показує, як використовувати параметр runAsUserName для Podʼів та контейнерів, які будуть запущені на вузлах Windows. Це приблизно еквівалент параметра runAsUser, який використовується для Linux, і дозволяє виконувати програми в контейнері від імені іншого імені користувача, ніж типово.
Перш ніж ви розпочнете
Вам потрібно мати кластер Kubernetes, а також інструмент командного рядка kubectl повинен бути налаштований для взаємодії з вашим кластером. Очікується, що в кластері будуть використовуватися вузли Windows, де будуть запускатися Podʼи з контейнерами, що виконують робочі навантаження у Windows.
Встановлення імені користувача для Podʼа
Щоб вказати імʼя користувача, з яким потрібно виконати процеси контейнера Podʼа, включіть поле securityContext (PodSecurityContext) в специфікацію Podʼа, а всередині нього — поле windowsOptions (WindowsSecurityContextOptions), що містить поле runAsUserName.
Опції безпеки Windows, які ви вказуєте для Podʼа, застосовуються до всіх контейнерів та контейнерів ініціалізації у Podʼі.
Ось конфігураційний файл для Podʼа Windows зі встановленим полем runAsUserName:
apiVersion: v1
kind: Pod
metadata:
name: run-as-username-pod-demo
spec:
securityContext:
windowsOptions:
runAsUserName: "ContainerUser"
containers:
- name: run-as-username-demo
image: mcr.microsoft.com/windows/servercore:ltsc2019
command: ["ping", "-t", "localhost"]
nodeSelector:
kubernetes.io/os: windows
Створіть Pod:
kubectl apply -f https://k8s.io/examples/windows/run-as-username-pod.yaml
Перевірте, що Контейнер Podʼа працює:
kubectl get pod run-as-username-pod-demo
Отримайте доступ до оболонки контейнера:
kubectl exec -it run-as-username-pod-demo -- powershell
Перевірте, що оболонка працює від імені відповідного користувача:
echo $env:USERNAME
Вивід повинен бути:
ContainerUser
Встановлення імені користувача для контейнера
Щоб вказати імʼя користувача, з яким потрібно виконати процеси контейнера, включіть поле securityContext (SecurityContext) у маніфесті контейнера, а всередині нього — поле windowsOptions (WindowsSecurityContextOptions), що містить поле runAsUserName.
Опції безпеки Windows, які ви вказуєте для контейнера, застосовуються тільки до цього окремого контейнера, і вони перевизначають налаштування, зроблені на рівні Podʼа.
Ось конфігураційний файл для Podʼа, який має один Контейнер, а поле runAsUserName встановлене на рівні Podʼа та на рівні Контейнера:
apiVersion: v1
kind: Pod
metadata:
name: run-as-username-container-demo
spec:
securityContext:
windowsOptions:
runAsUserName: "ContainerUser"
containers:
- name: run-as-username-demo
image: mcr.microsoft.com/windows/servercore:ltsc2019
command: ["ping", "-t", "localhost"]
securityContext:
windowsOptions:
runAsUserName: "ContainerAdministrator"
nodeSelector:
kubernetes.io/os: windows
Створіть Pod:
kubectl apply -f https://k8s.io/examples/windows/run-as-username-container.yaml
Перевірте, що Контейнер Podʼа працює:
kubectl get pod run-as-username-container-demo
Отримайте доступ до оболонки контейнера:
kubectl exec -it run-as-username-container-demo -- powershell
Перевірте, що оболонка працює від імені відповідного користувача (того, який встановлений на рівні контейнера):
echo $env:USERNAME
Вивід повинен бути:
ContainerAdministrator
Обмеження імен користувачів Windows
Для використання цієї функції значення, встановлене у полі runAsUserName, повинно бути дійсним імʼям користувача. Воно повинно мати наступний формат: DOMAIN\USER, де DOMAIN\ є необовʼязковим. Імена користувачів Windows регістронезалежні. Крім того, існують деякі обмеження стосовно DOMAIN та USER:
- Поле
runAsUserNameне може бути порожнім і не може містити керуючі символи (ASCII значення:0x00-0x1F,0x7F) DOMAINможе бути або NetBios-імʼям, або DNS-імʼям, кожне з власними обмеженнями:- NetBios імена: максимум 15 символів, не можуть починатися з
.(крапка), і не можуть містити наступні символи:\ / : * ? " < > | - DNS-імена: максимум 255 символів, містять тільки буквено-цифрові символи, крапки та дефіси, і не можуть починатися або закінчуватися
.(крапка) або-(дефіс).
- NetBios імена: максимум 15 символів, не можуть починатися з
USERможе мати не більше 20 символів, не може містити тільки крапки або пробіли, і не може містити наступні символи:" / \ [ ] : ; | = , + * ? < > @.
Приклади припустимих значень для поля runAsUserName: ContainerAdministrator, ContainerUser, NT AUTHORITY\NETWORK SERVICE, NT AUTHORITY\LOCAL SERVICE.
Для отримання додаткової інформації про ці обмеження, перевірте тут та тут.