Files
netology-devops/src/homework/14-kubernetes-security/14.4

Выполнение домашнего задания по теме "14.4. Сервис-аккаунты"

Q/A

Задача 1

Работа с сервис-аккаунтами через утилиту kubectl в установленном minikube.

Как создать сервис-аккаунт?

kubectl create serviceaccount netology
serviceaccount/netology created

Как просмотреть список сервис-акаунтов?

kubectl get serviceaccounts
AME       SECRETS   AGE
default    0         16m
netology   0         16s

Как получить информацию в формате YAML и/или JSON?

kubectl get serviceaccount netology -o yaml
kubectl get serviceaccount default -o json
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2023-01-10T02:49:45Z"
  name: netology
  namespace: default
  resourceVersion: "2173"
  uid: 84e1eeb6-7f11-469f-8d90-3dd24ceb1a4c
{
    "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

После выполнения команд созданы два файла:

Как удалить сервис-акаунт?

kubectl delete serviceaccount netology
serviceaccount "netology" deleted

Как загрузить сервис-акаунт из файла?

kubectl apply -f config/netology.yml
serviceaccount/netology created

Задание 2

Работа с сервис-акаунтами внутри модуля.

Выбрать любимый образ контейнера, подключить сервис-акаунты и проверить доступность API Kubernetes

kubectl run -i --tty fedora --image=fedora --restart=Never -- sh

Просмотреть переменные среды

env | grep KUBE
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:

{
  "kind": "APIResourceList",
  "groupVersion": "v1",
  "resources": [
    "..."
  ]
}