diff --git a/readme.md b/readme.md index 7ea5249..710c9d5 100644 --- a/readme.md +++ b/readme.md @@ -70,3 +70,4 @@ * [14.1. Создание и использование секретов](/src/homework/14-kubernetes-security/14.1) * [14.2. Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2) * [14.3. Карты конфигураций](/src/homework/14-kubernetes-security/14.3) +* [14.4. Сервис-аккаунты](/src/homework/14-kubernetes-security/14.4) diff --git a/src/homework/14-kubernetes-security/14.4/config/netology.yml b/src/homework/14-kubernetes-security/14.4/config/netology.yml new file mode 100644 index 0000000..9265a7b --- /dev/null +++ b/src/homework/14-kubernetes-security/14.4/config/netology.yml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + creationTimestamp: "2023-01-10T02:49:45Z" + name: netology + namespace: default + resourceVersion: "2173" + uid: 84e1eeb6-7f11-469f-8d90-3dd24ceb1a4c diff --git a/src/homework/14-kubernetes-security/14.4/config/serviceaccounts.json b/src/homework/14-kubernetes-security/14.4/config/serviceaccounts.json new file mode 100644 index 0000000..993c82d --- /dev/null +++ b/src/homework/14-kubernetes-security/14.4/config/serviceaccounts.json @@ -0,0 +1,31 @@ +{ + "apiVersion": "v1", + "items": [ + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "creationTimestamp": "2023-01-10T02:33:23Z", + "name": "default", + "namespace": "default", + "resourceVersion": "325", + "uid": "ed1a01af-98a5-412f-a726-57540bf11255" + } + }, + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "creationTimestamp": "2023-01-10T02:49:45Z", + "name": "netology", + "namespace": "default", + "resourceVersion": "2173", + "uid": "84e1eeb6-7f11-469f-8d90-3dd24ceb1a4c" + } + } + ], + "kind": "List", + "metadata": { + "resourceVersion": "" + } +} diff --git a/src/homework/14-kubernetes-security/14.4/readme.md b/src/homework/14-kubernetes-security/14.4/readme.md new file mode 100644 index 0000000..da1efab --- /dev/null +++ b/src/homework/14-kubernetes-security/14.4/readme.md @@ -0,0 +1,161 @@ +Выполнение [домашнего задания](https://github.com/netology-code/clokub-homeworks/blob/clokub-5/14.4.md) +по теме "14.4. Сервис-аккаунты" + +## Q/A + +### Задача 1 + +> Работа с сервис-аккаунтами через утилиту kubectl в установленном minikube. +> +> #### Как создать сервис-аккаунт? +> +> ``` +> kubectl create serviceaccount netology +> ``` + +```text +serviceaccount/netology created +``` + +> #### Как просмотреть список сервис-акаунтов? +> +> ``` +> kubectl get serviceaccounts +> ``` + +```text +AME SECRETS AGE +default 0 16m +netology 0 16s +``` + +> #### Как получить информацию в формате YAML и/или JSON? +> +> ``` +> kubectl get serviceaccount netology -o yaml +> kubectl get serviceaccount default -o json +> ``` + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + creationTimestamp: "2023-01-10T02:49:45Z" + name: netology + namespace: default + resourceVersion: "2173" + uid: 84e1eeb6-7f11-469f-8d90-3dd24ceb1a4c +``` + +```json +{ + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "creationTimestamp": "2023-01-10T02:33:23Z", + "name": "default", + "namespace": "default", + "resourceVersion": "325", + "uid": "ed1a01af-98a5-412f-a726-57540bf11255" + } +} +``` + +> #### Как выгрузить сервис-акаунты и сохранить его в файл? +> +> ``` +> kubectl get serviceaccounts -o json > config/serviceaccounts.json +> kubectl get serviceaccount netology -o yaml > config/netology.yml +> ``` + +После выполнения команд созданы два файла: +* [netology.yml](./config/netology.yml) +* [serviceaccounts.json](./config/serviceaccounts.json) + +> #### Как удалить сервис-акаунт? +> +> ``` +> kubectl delete serviceaccount netology +> ``` + +```text +serviceaccount "netology" deleted +``` + +> #### Как загрузить сервис-акаунт из файла? +> +> ``` +> kubectl apply -f config/netology.yml +> ``` + +```text +serviceaccount/netology created +``` + +### Задание 2 + +> Работа с сервис-акаунтами внутри модуля. +> +> Выбрать любимый образ контейнера, подключить сервис-акаунты и проверить +> доступность API Kubernetes +> +> ``` +> kubectl run -i --tty fedora --image=fedora --restart=Never -- sh +> ``` +> +> Просмотреть переменные среды +> +> ``` +> env | grep KUBE +> ``` + +```text +KUBERNETES_SERVICE_PORT_HTTPS=443 +KUBERNETES_SERVICE_PORT=443 +KUBERNETES_PORT_443_TCP=tcp://10.233.0.1:443 +KUBERNETES_PORT_443_TCP_PROTO=tcp +KUBERNETES_PORT_443_TCP_ADDR=10.233.0.1 +KUBERNETES_SERVICE_HOST=10.233.0.1 +KUBERNETES_PORT=tcp://10.233.0.1:443 +KUBERNETES_PORT_443_TCP_PORT=443 +``` + +> Получить значения переменных +> +> ``` +> K8S=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT +> SADIR=/var/run/secrets/kubernetes.io/serviceaccount +> TOKEN=$(cat $SADIR/token) +> CACERT=$SADIR/ca.crt +> NAMESPACE=$(cat $SADIR/namespace) +> ``` +> +> Подключаемся к API +> +> ``` +> curl -H "Authorization: Bearer $TOKEN" --cacert $CACERT $K8S/api/v1/ +> ``` +> +> В случае с minikube может быть другой адрес и порт, который можно взять здесь +> +> ``` +> cat ~/.kube/config +> ``` +> +> или здесь +> +> ``` +> kubectl cluster-info +> ``` + +Ответ на запрос к api kubernetes: + +```json +{ + "kind": "APIResourceList", + "groupVersion": "v1", + "resources": [ + "..." + ] +} +```