Kubernetes 為Windows的Pod和容器配置RunAsUserName

2022-06-09 11:01 更新

為 Windows 的 Pod 和容器配置 RunAsUserName

FEATURE STATE: Kubernetes v1.18 [stable]

本頁(yè)展示如何為運(yùn)行為在 Windows 節(jié)點(diǎn)上運(yùn)行的 Pod 和容器配置 ?RunAsUserName?。 大致相當(dāng)于 Linux 上的 ?runAsUser?,允許在容器中以與默認(rèn)值不同的用戶(hù)名運(yùn)行應(yīng)用。

在開(kāi)始之前

你必須有一個(gè) Kubernetes 集群,并且 kubectl 必須能和集群通信。 集群應(yīng)該要有 Windows 工作節(jié)點(diǎn),將在其中調(diào)度運(yùn)行 Windows 工作負(fù)載的 pod 和容器。

為 Pod 設(shè)置 Username 

要指定運(yùn)行 Pod 容器時(shí)所使用的用戶(hù)名,請(qǐng)?jiān)?nbsp;Pod 聲明中包含 ?securityContext ?(PodSecurityContext) 字段, 并在其內(nèi)部包含 ?windowsOptions ?(WindowsSecurityContextOptions) 字段的 ?runAsUserName ?字段。

你為 Pod 指定的 Windows SecurityContext 選項(xiàng)適用于該 Pod 中(包括 init 容器)的所有容器。

這兒有一個(gè)已經(jīng)設(shè)置了 ?runAsUserName ?字段的 Windows Pod 的配置文件:

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

創(chuàng)建 Pod:

kubectl apply -f https://k8s.io/examples/windows/run-as-username-pod.yaml

驗(yàn)證 Pod 容器是否在運(yùn)行:

kubectl get pod run-as-username-pod-demo

獲取該容器的 shell:

kubectl exec -it run-as-username-pod-demo -- powershell

檢查運(yùn)行 shell 的用戶(hù)的用戶(hù)名是否正確:

echo $env:USERNAME

輸出結(jié)果應(yīng)該是這樣:

ContainerUser

為容器設(shè)置 Username 

要指定運(yùn)行容器時(shí)所使用的用戶(hù)名,請(qǐng)?jiān)谌萜髑鍐沃邪?nbsp;?securityContext ?(SecurityContext) 字段,并在其內(nèi)部包含 ?windowsOptions ?(WindowsSecurityContextOptions) 字段的 runAsUserName 字段。

你為容器指定的 Windows SecurityContext 選項(xiàng)僅適用于該容器,并且它會(huì)覆蓋 Pod 級(jí)別設(shè)置。

這里有一個(gè) Pod 的配置文件,其中只有一個(gè)容器,并且在 Pod 級(jí)別和容器級(jí)別都設(shè)置了 ?runAsUserName?:

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

創(chuàng)建 Pod:

kubectl apply -f https://k8s.io/examples/windows/run-as-username-container.yaml

驗(yàn)證 Pod 容器是否在運(yùn)行:

kubectl get pod run-as-username-container-demo

獲取該容器的 shell:

kubectl exec -it run-as-username-container-demo -- powershell

檢查運(yùn)行 shell 的用戶(hù)的用戶(hù)名是否正確(應(yīng)該是容器級(jí)別設(shè)置的那個(gè)):

echo $env:USERNAME

輸出結(jié)果應(yīng)該是這樣:

ContainerAdministrator

Windows Username 的局限性 

想要使用此功能,在 ?runAsUserName ?字段中設(shè)置的值必須是有效的用戶(hù)名。 它必須是 ?DOMAIN\USER? 這種格式,其中 ?DOMAIN\? 是可選的。 Windows 用戶(hù)名不區(qū)分大小寫(xiě)。此外,關(guān)于 ?DOMAIN ?和 ?USER ?還有一些限制:

  • ?runAsUserName ?字段不能為空,并且不能包含控制字符(ASCII 值:?0x00-0x1F?、?0x7F?)
  • ?DOMAIN ?必須是 NetBios 名稱(chēng)或 DNS 名稱(chēng),每種名稱(chēng)都有各自的局限性:
    • NetBios 名稱(chēng):最多 15 個(gè)字符,不能以 ?.?(點(diǎn))開(kāi)頭,并且不能包含以下字符:?\ / : * ? " < > |?
    • DNS 名稱(chēng):最多 255 個(gè)字符,只能包含字母、數(shù)字、點(diǎn)和中劃線,并且不能以 ?.?(點(diǎn))或 ?-?(中劃線)開(kāi)頭和結(jié)尾。
  • ?USER ?最多不超過(guò) 20 個(gè)字符,不能 只 包含點(diǎn)或空格,并且不能包含以下字符:?" / \ [ ] : ; | = , + * ? < > @?

?runAsUserName ?字段接受的值的一些示例:?ContainerAdministrator?、?ContainerUser?、 ?NT AUTHORITY\NETWORK SERVICE?、?NT AUTHORITY\LOCAL SERVICE?。

關(guān)于這些限制的更多信息,可以查看這里這里


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)