Вспомнил давно забытые преподские дела 🙂 да.
Записал начало видео курса по Кубернетес.
А что? Самоизоляция, она кого угодно достанет…
Метка: kubernetes
Kubernetes, включение RBAC на namespace
Создадим namespace artur, доступ к которому будем разрешать пользователю artur:
# kubectl create namespace artur
Как создавать пользователя было описано тут.
Создаём файл с описанием role и rolebindig — 01. yaml следующего содержания:
--- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: artur # namespace к которому применяются огранияения name: artur-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods", "services", "replicationcontrollers"] verbs: ["create", "get", "update", "list", "delete"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get", "list"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create"] - apiGroups: ["apps"] resources: ["deployments","daemonsets","replicasets","statefulsets"] verbs: ["create", "get", "update", "patch", "list", "delete", "deploy"] - apiGroups: ["autoscaling"] resources: ["horizontalpodautoscalers"] verbs: ["create", "get", "update", "list", "delete"] - apiGroups: ["batch"] resources: ["jobs","cronjobs"] verbs: ["create", "get", "update", "list", "delete"]--- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: artur-rb namespace: artur subjects: - kind: User name: artur apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: artur-role apiGroup: rbac.authorization.k8s.io
Создаем роли и биндинги в кубернетес.
# cubectl apply -f 01.yaml
Всё, что тут написано — это художественная обработка материалов доброго человека.
Kubernetes, доступ по сертификату пользователя
В принципе — это шпаргалка, что бы не забыть как все на самом деле происходит 🙂
Создание SSL ключа и сертификата пользователя
Создаём временную директорию:
# mkdir tmp # cd tmp
Генерируем SSL ключ пользователя:
# openssl genrsa -out artur.key 4096
Создаём конфигурационный файл для openssl — csr.cnf следующего содержания:
[ req ] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [ dn ] CN = artur O = dev [ v3_ext ] authorityKeyIdentifier=keyid,issuer:always basicConstraints=CA:FALSE keyUsage=keyEncipherment,dataEncipherment extendedKeyUsage=serverAuth,clientAuth
Генерируем запрос на сертификат:
# openssl req -config csr.cnf -new -key artur.key -nodes -out artur.csr
Формируем запрос на сертификат в формате base64 и помещаем его в переменную среды окружения:
# export BASE64_CSR=$(cat artur.csr | base64 | tr -d '\n')
Создаём yaml файл csr.yaml с запросом на подпись следующего содержания:
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: artur_csr
spec:
groups:
- system:authenticated
request: ${BASE64_CSR}
usages:
- digital signature
- key encipherment
- server auth
- client auth
Помещаем запрос в кубернетес:
# cat csr.yaml | envsubst | kubectl apply -f -
Контролируем наличие запроса:
# kubectl get csr
Подписываем и генерируем сертификат:
# kubectl certificate approve artur_csr
Копируем во временную директорию файл ~/.kube/config и в разделе users удаляем из него строки client-certificate-data и client-key-data.
Добавляем в config строку с сертификатом клиента в формате base64:
# echo "client-certificate-data: $(kubectl get csr artur_csr -o jsonpath={.status.certificate})" >> config
В редакторе делаем правильное выравнивание строки. Также везде меняем пользователя на artur.
Добавляем в config файл ключ пользователя в формате base64:
# kubectl --kubeconfig ./config config set-credentials artur --client-key=artur.key --embed-certs=true
Смотрим получившийся конфигурационный файл:
# kubectl --kubeconfig ./config config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.0.45:6443
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: artur
name: artur@cluster.local
current-context: artur@cluster.local
kind: Config
preferences: {}
users:
- name: artur
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
Передаём файл config пользователю или копируем его в директорию ~/.kube пользователя.
Шпаргалка сделана по мотивам записок доброго человека.