当前位置: 首页 > 知识库问答 >
问题:

尝试使用kubectl在AWS EKS集群中创建命名空间-Getting:服务器错误(禁止):命名空间被禁止

钱繁
2023-03-14

我试图在AWS EKS集群中创建一个名称空间,并不断收到一个错误。

我可以使用默认名称空间做任何我想做的事情,但是当我尝试创建一个新的名称空间时,我被禁止。

这一定是我对用户“thera-eks”做的不正确的事情。也许角色绑定?

看起来我给了角色访问所有内容的权限,因为在规则中我给了它*通配符。

我使用的命令是-

kubectl create namespace ernie

我得到的错误是-

Error from server (Forbidden): namespaces is forbidden: User "thera-eks" cannot create resource "namespaces" in API group "" at the cluster scope

我的role.yaml是:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: full_access
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]

我的rolebinding.yaml是:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: full_access_role_binding
subjects:
- kind: User
  name: thera-eks
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: full_access
  apiGroup: rbac.authorization.k8s.io

aws认证配置映射为:

data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::9967xxxxxxxx:role/eksctl-ops-nodegroup-linux-ng-sys-NodeInstanceRole-346VJPTOXI7L
      username: system:node:{{EC2PrivateDNSName}}
    - groups:
      - eks-role
      - system:master
      rolearn: arn:aws:iam::9967xxxxxxxx:role/thera-eks
      username: thera-eks
  mapUsers: |
    - userarn: arn:aws:iam::9967xxxxxxxx:user/test-ecr
    username: test-ecr
    groups:
    - eks-role

角色"thera-eks"的AWS IAM权限JSON是-

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:GetDownloadUrlForLayer",
                "ecr:InitiateLayerUpload",
                "ecr:ListImages",
                "ecr:PutImage",
                "ecr:UploadLayerPart",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:ListRoles",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

共有1个答案

谷彦君
2023-03-14

@mdaniel和@PEkambaram是正确的,但为了更好地理解,我想用官方文档对其进行扩展和备份:

RBACRoleClusterRole包含表示一组权限的规则。权限纯粹是可加的(没有拒绝规则)。

角色始终在特定命名空间内设置权限;创建角色时,必须指定它所属的命名空间。

相比之下,ClusterRole是非命名空间的资源。资源有不同的名称(RoleClusterRole),因为库伯内特斯对象总是必须有名称空间或没有名称空间;它不能两者兼而有之。

ClusterRoles有多种用途。您可以使用ClusterRole来:

>

  • 定义对命名空间资源的权限,并在单个命名空间内授予权限

    定义对命名空间资源的权限,并跨所有命名空间授予权限

    定义群集范围资源的权限

    如果要在命名空间中定义角色,请使用角色;如果要在集群范围内定义角色,请使用ClusterRole

    您还可以找到一个ClusterRole的示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      # "namespace" omitted since ClusterRoles are not namespaced
      name: secret-reader
    rules:
    - apiGroups: [""]
      #
      # at the HTTP level, the name of the resource for accessing Secret
      # objects is "secrets"
      resources: ["secrets"]
      verbs: ["get", "watch", "list"]
    

    对于ClusterRoleBinding:

    apiVersion: rbac.authorization.k8s.io/v1
    # This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
    kind: ClusterRoleBinding
    metadata:
      name: read-secrets-global
    subjects:
    - kind: Group
      name: manager # Name is case sensitive
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: secret-reader
      apiGroup: rbac.authorization.k8s.io
    

    链接的文档将向您展示所有必要的细节,其中包含有助于理解和设置RBAC的示例。

  •  类似资料:
    • 网址: /apis/apps/v1/namespaces/diyclientapps/deployments ){“kind”:“Status”,“apiVersion”:“v1”,“metadata”:{},“Status”:“Failure”,“message”:“deployments”。应用被禁止:用户“system:serviceaccount:default:default\”无法创建

    • 为什么using指令在包含在匿名命名空间中时表现得好像出现在全局范围?

    • Azure Service Bus有两种身份验证机制: SAS:共享访问签名 根据这里的说法, 对于2014年8月之前创建的所有(服务总线)命名空间,都会创建一个附带的ACS命名空间。 现在是2014年8月之后,所以当您通过Azure管理门户创建服务总线名称空间时,不会创建附带的ACS名称空间。 上面的同一链接还指示使用以下Azure PowerShell cmd let: 但事实证明,useAc

    • 问题内容: AngularJS如何处理服务名称之间的冲突?例如,如果我声明了两个模块,每个模块包含一个名为“ foo”的服务。如果我想创建一个可重用的模块或要避免与其他第三方模块发生冲突,哪种是“​​命名空间”服务的好方法? 问题答案: 到目前为止,AngularJS不会处理服务的名称空间冲突, 因此,如果您使用相同的方式将两个不同的模块命名为服务,并且在应用程序中包含了两个模块,则只有一个服务可

    • 我有以下代码示例(MSVC 2015编译) https://godbolt.org/g/kccgtb(用于可执行演示) 在msvc下生成以下错误 实例cpp公司 /opt/compiler-explorer/windows/19.00.24210/include/xlocale(341):警告C4530:使用了C异常处理程序,但未启用展开语义。指定/EHsc /opt/compiler-explo

    • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码