基于角色的访问控制

最佳实践指南的这一部分讨论了 chart 清单中 RBAC 资源的创建和格式化。

RBAC 资源是:

  • ServiceAccount (namespaced)
  • Role (namespaced)
  • ClusterRole
  • RoleBinding (namespaced)
  • ClusterRoleBinding

YAML 配置

RBAC 和 ServiceAccount 配置应该在单独的密钥下进行。他们是不同的东西。将 YAML 中的这两个概念拆分出来可以消除混淆并使其更清晰。

  1. rbac:
  2. # Specifies whether RBAC resources should be created
  3. create: true
  4. serviceAccount:
  5. # Specifies whether a ServiceAccount should be created
  6. create: true
  7. # The name of the ServiceAccount to use.
  8. # If not set and create is true, a name is generated using the fullname template
  9. name

此结构可以扩展到需要多个 ServiceAccounts 的更复杂的 chart。

  1. serviceAccounts:
  2. client:
  3. create: true
  4. name:
  5. server:
  6. create: true
  7. name:

RBAC 资源应该默认创建

rbac.create 应该是一个布尔值,控制是否创建 RBAC 资源。默认应该是 true。想要管理 RBAC 访问控制的用户可以将此值设置为 false(在这种情况下请参阅下文)。

使用 RBAC 资源

serviceAccount.name 应设置为由 chart 创建的访问控制资源使用的 ServiceAccount 的名称。如果 serviceAccount.create 为 true,则应该创建一个带有该名称的 ServiceAccount。如果名称未设置,则使用该 fullname 模板生成名称,如果 serviceAccount.create 为 false,则不应创建该名称,但它仍应与相同的资源相关联,以便稍后通过手动创建的 RBAC 资源将引用它从而功能正常。如果 serviceAccount.create 为 false 且名称未指定,则使用默认的 ServiceAccount。

为 ServiceAccount 使用以下 helper 模板。

  1. {{/*
  2. Create the name of the service account to use
  3. */}}
  4. {{- define "mychart.serviceAccountName" -}}
  5. {{- if .Values.serviceAccount.create -}}
  6. {{ default (include "mychart.fullname" .) .Values.serviceAccount.name }}
  7. {{- else -}}
  8. {{ default "default" .Values.serviceAccount.name }}
  9. {{- end -}}
  10. {{- end -}}