从 k8s 程序读取 configmap

Alb*_*rto 3 azure kubernetes azure-aks

I\xe2\x80\x99ve 一个 go 程序,需要访问配置映射,当使用以下 clusterRole 时,我们得到错误禁止

\n
kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: s-access\n labels:\n  app.kubernetes.io/instance: te-mger\nrules:\n - verbs:\n   - get\n   - watch\n   - list\n   - update\n  apiGroups:\n   - dpt.com\n  resources:\n   - pods\n
Run Code Online (Sandbox Code Playgroud)\n

现在,当我将其更改为以下内容时,它就可以工作了(添加 apiGroups \'\')并configmaps添加到resources\n由于这是一种解决方法,我们应该为长期解决方案做什么

\n
kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: s-access\n labels:\n  app.kubernetes.io/instance: te-mger\nrules:\n - verbs:\n   - get\n   - watch\n   - list\n   - update\n  apiGroups:\n   - dpt.com\n   - \'\'\n  resources:\n   - pods\n   - configmaps\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

我想避免使用apiGroups: \'\'

\n

Jak*_*kub 5

每个 Kubernetes 资源都是某个 API 组的一部分。API 组定义了这些资源的可用路径。例如,您可以在 Kubernetes API 参考中找到它们(对于每个资源,您都有组、版本和种类)。

正如您在这里所看到的,例如对于 ConfigMap,该组是core. 引用资源时,需要在ClusterRole(或Role)中使用资源所属的组。这是正确指定您正在谈论的资源所必需的,因为资源名称本身不一定是唯一的,而只能与组组合使用。

通常情况下,组只是写在那里,但对于core组,您通常只是放在那里""如此处所述)。

所以在你的例子中,这个:

rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - dpt.com
    resources:
      - configmaps
Run Code Online (Sandbox Code Playgroud)

将涵盖您自己的 API 组中pod指定的一些资源,但不涵盖该组中真正的 Kubernetes 资源。要覆盖它们,您需要指定正确的组,如下所示:configmapdsp.comcore

rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - ""
    resources:
      - configmaps
Run Code Online (Sandbox Code Playgroud)

如果您只想授予对特定 ConfigMap 的访问权限,则可以使用该resourceNames字段。

rules:
  - verbs:
      - get
      - watch
      - list
      - update
    apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      - my-config-map
      - my-config-map
Run Code Online (Sandbox Code Playgroud)

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