Создание изолированных сред для разработчиков с использованием 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 пользователю, которому предоставить доступ.