# kubectl

## Подключение к кластеру по токену

Секрет и цепочку сертификатов можно найти на ControlPanel ноде (по умолчанию, порт 22623) https\://\<Address Node>:22623/config/master или /config/worker

Там будет конфиг `kubeconfig`:

```yaml
clusters:
- cluster:
    certificate-authority-data: LS0t...
  name: someName
contexts:
- context:
    cluster: someName
    user: userSecret
  name: contextName
current-context: contextName
preferences: {}
users:
- name: userSecret
  user:
    token: eyJhbGc...
```

`certificate-authority-data` мы декодируем из base64 (там будет цепочка PEM сертификатов) и записываем в файл `cert.crt`. Далее, настраиваем контекст в `kubectl`:

```
kubectl config set-credentials "userSecret" --token="<JWT>"
kubectl config set-cluster clusterName --server="https://<Address Node>:6443" --certificate-authority="/path/to/chain/cert.crt"  --embed-certs
kubectl config set-context contextName --cluster="clusterName" --user="usereSecret"
kubectl config use-context contextName
kubectl get pods
```

## Примеры использования kubectl

Получаем список пространств\
kubectl get namespaces\
kubectl get ns\
\
Создать пространство:\
kubectl create ns \<name>\
\
Удалить пространство: \
kubectl delete namespaces \<name>

Работа с подами\
Получить информацию о поде: \
kubectl describe pod re-privategallery-backend-978dddf6-d2wgx\
\
Все поды: kubectl get pods

Текущий контекст: kubectl config current-context\
Переключить в контексте на другой namespace: kubectl config set-context \<CONTEXT, ex: minikube> --namespace \<NAMESPACE>

Посмотреть Persistance Volume: kubectl get pv\
Посмотреть Persistance Volume Claim: kubectl get pvc

## Troubleshooting

<https://managedkube.com/kubernetes/k8sbot/troubleshooting/imagepullbackoff/2019/02/23/imagepullbackoff.html>

## Что еще можем получить

Запуск без проверки сертификата:

```
$ kubectl --insecure-skip-tls-verify <cmd>
```

Доступные ресурсы (= информация о k8s-ноде)

```
kubectl --insecure-skip-tls-verify api-resources
```

Можно получить HTTP запрос, соотв команде kubectl:

```
$ kubectl --insecure-skip-tls-verify auth can-i list pods -v 9
I0112 16:04:38.235938   37941 round_trippers.go:435] curl -k -v -XGET  -H "Accept: application/json, */*" -H "Authorization: Bearer <masked>" -H "User-Agent: kubectl/v1.21.5 (darwin/amd64) kubernetes/aea7bba" 'https://<IP>:6443/api/v1?timeout=32s'
...
I0112 16:04:38.270815   37941 round_trippers.go:435] curl -k -v -XPOST  -H "Accept: application/json, */*" -H "Content-Type: application/json" -H "User-Agent: kubectl/v1.21.5 (darwin/amd64) kubernetes/aea7bba" -H "Authorization: Bearer <masked>" 'https://<IP>:6443/apis/authorization.k8s.io/v1/selfsubjectaccessreviews'
```

## Плагины

У kubectl есть система плагинов. Есть плагин **Krew**, который упрощает установку других плагинов. Как поставить Krew <https://krew.sigs.k8s.io/docs/user-guide/quickstart/>

Полезные плагины:

### rakkess / access-matrix

Позволяет посмотреть все полномочия, которые были предоставлены пользователю

```
$ kubectl krew install access-matrix 
$ kubectl access-matrix -n my-project-dev --as jean
```

### kubectl-who-can

[Этот проект](https://github.com/aquasecurity/kubectl-who-can) позволяет нам узнать, какие пользователи могут выполнить определенное действие. Он помогает ответить на вопрос: «Кто может это сделать?».

### rbac-lookup

[Этот проект](https://github.com/reactiveops/rbac-lookup) предоставляет обзор RBAC-правил. Он помогает ответить на вопросы: «В какую роль входят `jean` и `sarah`?», «В какую роль входят все пользователи?», «В какую роль входит вся группа?».&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://appsecurity.gitbook.io/offensive/cloud/sandboxes-containers-virtualization/k8s/tools/kubectl.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
