Полное руководство по объединению привязок ролей с пространствами имен в Kubernetes

В Kubernetes управление доступом на основе ролей (RBAC) — это важный механизм управления разрешениями и контроля доступа к ресурсам. Привязки ролей позволяют назначать определенные роли пользователям, группам или учетным записям служб в пространстве имен. Объединение привязок ролей с пространствами имен обеспечивает мощный способ организации и контроля доступа к ресурсам в кластере. В этой статье мы рассмотрим различные методы объединения привязок ролей с пространствами имен, а также приведем примеры кода.

Методы:

  1. Метод 1. Создание привязок ролей в пространстве имен YAML:

    • Шаг 1. Создайте YAML-файл пространства имен.
    • Шаг 2. Определите роль и привязку ролей в пространстве имен YAML.
    • Шаг 3. Примените пространство имен YAML, используя kubectl apply -f namespace.yaml.

    Пример:

    apiVersion: v1
    kind: Namespace
    metadata:
     name: my-namespace
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
     namespace: my-namespace
     name: my-role
    rules:
    - apiGroups: [""]
     resources: ["pods"]
     verbs: ["get", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: my-namespace
     name: my-role-binding
    roleRef:
     apiGroup: rbac.authorization.k8s.io
     kind: Role
     name: my-role
    subjects:
    - kind: User
     name: john
  2. Метод 2. Использование kubectlкоманд:

    • Шаг 1. Создайте пространство имен, используя kubectl create namespace my-namespace.
    • Шаг 2. Создайте роль с помощью kubectl create role my-role --verb=get,list --resource=pods -n my-namespace.
    • Шаг 3. Создайте привязку ролей, используя kubectl create rolebinding my-role-binding --role=my-role --user=john -n my-namespace.

    Пример:

    $ kubectl create namespace my-namespace
    $ kubectl create role my-role --verb=get,list --resource=pods -n my-namespace
    $ kubectl create rolebinding my-role-binding --role=my-role --user=john -n my-namespace
  3. Метод 3. Использование диаграмм Helm:

    • Шаг 1. Определите пространство имен, роль и привязку ролей в шаблонах диаграммы Helm.
    • Шаг 2. Установите Helm Chart с помощью helm install my-chart --namespace my-namespace.

    Пример (фрагмент из шаблонов Helm Chart):

    # templates/namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
     name: {{ .Values.namespace }}
    # templates/role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
     namespace: {{ .Values.namespace }}
     name: my-role
    rules:
    - apiGroups: [""]
     resources: ["pods"]
     verbs: ["get", "list"]
    # templates/rolebinding.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: {{ .Values.namespace }}
     name: my-role-binding
    roleRef:
     apiGroup: rbac.authorization.k8s.io
     kind: Role
     name: my-role
    subjects:
    - kind: User
     name: john
    $ helm install my-chart --namespace my-namespace

Объединение привязок ролей с пространствами имен в Kubernetes — фундаментальный подход к управлению разрешениями и контролем доступа. В этой статье мы рассмотрели три метода достижения этой цели, включая создание привязок ролей в пространстве имен YAML, использование команд kubectlи использование диаграмм Helm. Эти методы обеспечивают гибкость и масштабируемость при организации и защите ресурсов Kubernetes.