Создание изолированных сред для разработчиков с использованием RBAC¶
Создание изолированных сред для разработчиков и команд является важной практикой, особенно в контексте обучения и разработки. Это позволяет обеспечить безопасность, управляемость и контроль над доступом к ресурсам. В этой статье мы рассмотрим, как создать пространство имен (namespace) в Kubernetes и настроить Service Account с ограниченным доступом, используя систему контроля доступа на основе ролей (RBAC).
1. Создание пространства имен¶
Прежде чем настроить доступ, необходимо создать пространство имен. Допустим, наше пространство имен называется mynamespace.
kubectl create namespace mynamespace
2. Создание Service Account и настройка RBAC¶
Создадим Service Account, который имеет доступ только к этому конкретному пространству имен, используя систему контроля доступа на основе ролей (RBAC) Kubernetes.
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: mynamespace-user
namespace: mynamespace
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: mynamespace-user-full-access
namespace: mynamespace
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["batch"]
resources:
- jobs
- cronjobs
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: mynamespace-user-view
namespace: mynamespace
subjects:
- kind: ServiceAccount
name: mynamespace-user
namespace: mynamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: mynamespace-user-full-access
3. Получение токена и сертификата¶
- получить имя секрета из сервисного аккаунта
kubectl describe sa mynamespace-user -n mynamespace - получить токены,допустим что получили имя токена mynamespace-user-token-xxxxx
- Вот как получить токен пользователя:
kubectl get secret mynamespace-user-token-xxxxx -n mynamespace -o "jsonpath={.data.token}" | base64 -D - А вот как получить сертификат:
kubectl get secret mynamespace-user-token-xxxxx -n mynamespace -o "jsonpath={.data['ca\.crt']}"
- Вот как получить токен пользователя:
4. Собираем kube config:¶
Соберем файл конфигурации для Kubernetes (kube config), используя полученные токен и сертификат.
apiVersion: v1
kind: Config
preferences: {}
# Define the cluster
clusters:
- cluster:
certificate-authority-data: PLACE CERTIFICATE HERE
# You'll need the API endpoint of your Cluster here:
server: https://YOUR_KUBERNETES_API_ENDPOINT
name: my-cluster
# Define the user
users:
- name: mynamespace-user
user:
as-user-extra: {}
client-key-data: PLACE CERTIFICATE HERE
token: PLACE USER TOKEN HERE
# Define the context: linking a user to a cluster
contexts:
- context:
cluster: my-cluster
namespace: mynamespace
user: mynamespace-user
name: mynamespace
# Define current context
current-context: mynamespace
Не забудьте заменить PLACE_CERTIFICATE_HERE на ваш сертификат, а PLACE_USER_TOKEN_HERE на ваш токен.
Примечание. Другой способ написать конфиг – напрямую использовать kubectl.
Теперь можно передать этот файл конфигурации Kube пользователю, которому предоставить доступ.