使用特定的用户 ID 在 Redhat Openshift 中创建部署

Creating a deployment in Redhat Openshift using a specific USER id

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 中设置用户 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: 创建命名空间后,获取该命名空间允许的范围和 select 该范围内的一个 ID(例如 1000660000),并在部署时通过为 runAsUser 设置该 ID 使用它:1000660000。

docker 图像中的所有 files/folders 将 ownership/permissions 设置为 USER 1001121001 并且容器以 id 1000660000 开始,因此存在问题 运行容器由于 read/write/execute 权限。 为了克服这个问题,我需要为所有文件授予 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 范围(涵盖特定用户 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

如果您在部署时或之前创建命名空间,则可以使用以下选项。使用这个你可以使用 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 <namespace.yaml>oc apply -f <namespace.yaml>