web-dev-qa-db-ja.com

kubernetes PodSecurityPolicyがrunAsNonRootに設定され、コンテナにrunAsNonRootがあり、イメージに非数値のユーザー(appuser)が含まれている、ユーザーが非rootであることを確認できない

kubernetes PodSecurityPolicyがrunAsNonRootに設定され、ポッドが開始されない取得エラーエラーの投稿:コンテナーにrunAsNonRootがあり、イメージに非数値のユーザー(appuser)が含まれている、ユーザーが非rootであることを確認できない

ユーザー(appuser)uid-> 999とグループ(appgroup)gid-> 999をdockerコンテナーに作成し、そのユーザーでコンテナーを開始します。

しかし、ポッドの作成はエラーをスローします。

    Events:
      Type     Reason                 Age                From                           Message
      ----     ------                 ----               ----                           -------
      Normal   Scheduled              53s                default-scheduler              Successfully assigned app-578576fdc6-nfvcz to appmagent01
      Normal   SuccessfulMountVolume  52s                kubelet, appagent01  MountVolume.SetUp succeeded for volume "default-token-ksn46"
      Warning  DNSConfigForming       11s (x6 over 52s)  kubelet, appagent01  Search Line limits were exceeded, some search paths have been omitted, the applied search line is: app.svc.cluster.local svc.cluster.local cluster.local 
      Normal   Pulling                11s (x5 over 51s)  kubelet, appagent01  pulling image "app.dockerrepo.internal.com:5000/app:9f51e3e7ab91bb835d3b85f40cc8e6f31cdc2982"
      Normal   Pulled                 11s (x5 over 51s)  kubelet, appagent01  Successfully pulled image "app.dockerrepo.internal.com:5000/app:9f51e3e7ab91bb835d3b85f40cc8e6f31cdc2982"
      Warning  Failed                 11s (x5 over 51s)  kubelet, appagent01  Error: container has runAsNonRoot and image has non-numeric user (appuser), cannot verify user is non-root

.
7
user1819071

検証の 実装 は次のとおりです。

case uid == nil && len(username) > 0:
    return fmt.Errorf("container has runAsNonRoot and image has non-numeric user (%s), cannot verify user is non-root", username)

そして、これがコメント付きの 検証呼び出し です。

// Verify RunAsNonRoot. Non-root verification only supports numeric user.
if err := verifyRunAsNonRoot(pod, container, uid, username); err != nil {
    return nil, cleanupAction, err
}

ご覧のとおり、このメッセージの唯一の理由はuid == nilです。ソースコードのコメントに基づいて、数値のユーザー値を設定する必要があります。

したがって、UID = 999のユーザーの場合は、ポッド定義でそれを行うことができます そのように

securityContext:
    runAsUser: 999
11
Anton Kostenko