从k8s程序读取configmap

3

我有一个需要访问配置映射的Go程序,当使用以下ClusterRole时,我们遇到了“forbidden”错误。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: s-access
 labels:
  app.kubernetes.io/instance: te-mger
rules:
 - verbs:
   - get
   - watch
   - list
   - update
  apiGroups:
   - dpt.com
  resources:
   - pods

现在,当我将它改成以下内容时,它可以正常工作(添加apiGroups''和configmapsresources中)。 由于这是一种解决方法,那么对于长期的解决方案,我们应该怎么办呢?

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: s-access
 labels:
  app.kubernetes.io/instance: te-mger
rules:
 - verbs:
   - get
   - watch
   - list
   - update
  apiGroups:
   - dpt.com
   - ''
  resources:
   - pods
   - configmaps

我阅读了以下内容但没有帮助: https://kubernetes.io/docs/reference/access-authn-authz/rbac/

我想避免使用apiGroups: ''


我想避免使用 apiGroups: '',但是不行! - DevLounge
1个回答

5
每个Kubernetes资源都属于某个API组。 API组定义了这些资源可用的路径。 您可以在Kubernetes API参考文档中找到它们(对于每个资源,您都有组、版本和类型)。
例如,如此处所示,对于ConfigMap,组是core。当引用资源时,在ClusterRole(或Role)中需要使用所属资源的组。这是必要的,以正确指定您正在讨论哪个资源,因为资源名称本身不一定唯一,而只有与组结合使用才是唯一的。
通常,组名直接写在其中,但对于core组,通常只需放置""(如此处所述)。
因此,在您的示例中,应该是:
rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - dpt.com
    resources:
      - configmaps

将会涵盖来自你自己API组的一些名为podconfigmap的资源,但不包括来自core组的真正Kubernetes资源。如果要涵盖它们,需要指定正确的组,操作如下:

rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - ""
    resources:
      - configmaps

如果你想只授权特定的ConfigMap访问权限,可以使用resourceNames字段。

rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      - my-config-map
      - my-config-map

但是您需要逐个命名配置映射。它不支持任何通配符、正则表达式或其他东西。


谢谢,但这不太通用吧?(使用 "")它不应该更严格,只针对configmaps或特定的configmaps吗?这是我使用的,但我担心可能会有一些风险,因为它很通用...如果我在这里错了,请纠正我。谢谢! - Jenney
如果您想仅授予对特定ConfigMap的访问权限,可以使用resourceNames字段。我在答案中添加了一个示例。但它只能列出特定名称,没有通配符、正则表达式或其他任何内容。 - Jakub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接