【问题标题】:Creating a deployment in Redhat Openshift using a specific USER id使用特定 USER id 在 Redhat Openshift 中创建部署
【发布时间】:2021-05-11 10:58:32
【问题描述】:

Redhat Openshift 自动创建一系列可在给定命名空间中使用的用户 ID,例如

$ oc describe namespace xyz-123
Name:         xyz-123
Labels:       <none>
Annotations:  xx.com/accountID: id-testcluster-account
              xx.com/type: System
              openshift.io/sa.scc.mcs: s0:c25,c20
              openshift.io/sa.scc.supplemental-groups: 1000640000/10000
              openshift.io/sa.scc.uid-range: 1000640000/10000

问题来了:

在创建 docker 镜像时,我在 Dockerfile 中设置 USER id:

USER 1001121001:1001121001

我在 Helm 图表中指定 runAsUser 来部署此映像:

runAsUser : 1001121001

当我尝试创建部署时,部署失败。因为用户 ID 1001121001 不在上述范围内,即 [1000640000, 1000640000+10000]。

部署错误:

$ oc get deployment abc-123 -n xyz-123 -o yaml
....
....
    message: 'pods "abc-123-7f8fc74765-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.runAsUser: Invalid value: 1000321001: must be in the ranges: [1000660000, 1000669999]]'
....
....

尝试过的选项 - 1:

使用 anyuid 的工作方式如下所述:https://www.openshift.com/blog/a-guide-to-openshift-and-uids 但文件说: “在仔细检查‘anyuid’ SCC 后,很明显,任何用户和任何组都可以被具有访问‘anyuid’ SCC 的 ServiceAccount 启动的 Pod 使用。‘RunAsAny’ 策略有效地跳过了默认的 OpenShift限制和授权允许 Pod 选择任何 ID。”

因此,我不想使用这个 anyuid 选项。

尝试了选项 2: 创建命名空间后,获取该命名空间允许的范围并从该范围中选择一个 id(比如 1000660000),并在部署时通过为 runAsUser 设置该 id 来使用它:1000660000。

docker 映像中的所有文件/文件夹的所有权/权限都设置为 USER 1001121001,并且容器以 id 1000660000 启动,因此由于读/写/执行权限,运行容器会出现问题。 为了克服这个问题,我需要为所有文件授予 o+rwx 权限,这是有风险的。

有没有其他方法可以在 Dockerfile 中指定 USER 并在 Redhat Openshift 中部署时使用相同的 USER id?

$ oc version
Client Version: 4.6.9
Server Version: 4.6.9
Kubernetes Version: v1.19.0+7070803

解决方案: Ritesh 的建议奏效了。 创建了指定 UID 范围并覆盖特定 USER ID 的命名空间。然后在这个命名空间中创建部署:

在部署到命名空间之前,创建了一个具有预定义用户 ID 范围(覆盖特定 USER id 1001121001)的命名空间。

apiVersion: v1
kind: Namespace
metadata:
  name: xyz-123
  annotations:
      annotations:
    openshift.io/sa.scc.mcs: 's0:c26,c5'
    openshift.io/sa.scc.supplemental-groups: 1001120001/10000
    openshift.io/sa.scc.uid-range: 1001120001/10000

【问题讨论】:

    标签: docker openshift


    【解决方案1】:

    如果您在部署时或之前创建命名空间,则可以使用以下选项。使用这个你可以使用runAsUser : 1001121001(或任何其他用户) 定义yaml文件

    apiVersion: v1
    kind: Namespace
    metadata:
      name: dspx-dummy-runtimeid
      annotations:
        openshift.io/sa.scc.mcs: <>
        openshift.io/sa.scc.supplemental-groups: <>
        openshift.io/sa.scc.uid-range: <>
    

    使用kubectl apply -f &lt;namespace.yaml&gt;oc apply -f &lt;namespace.yaml&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2020-09-06
      相关资源
      最近更新 更多