Налаштування 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
.
Для отримання додаткової інформації про ці обмеження, перевірте тут та тут.