# Усунення несправностей kubectl

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Ця документація присвячена дослідженню та діагностиці повʼязаних проблем <a class='glossary-tooltip' title='Інструмент командного рядка для взаємодії з кластерами Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/reference/kubectl/' target='_blank' aria-label='kubectl'>kubectl</a>. Якщо ви зіткнулися з проблемами доступу до `kubectl` або зʼєднанням з вашим кластером, цей документ окреслює різні загальні сценарії та потенційні рішення, які допоможуть виявити та усунути ймовірну причину.

<!-- body -->

## Перш ніж ви розпочнете

* Вам потрібно мати кластер Kubernetes.
* Вам також потрібно встановити `kubectl` — дивіться [встановлення інструментів](/docs/tasks/tools/#kubectl)

## Перевірка налаштувань kubectl {#verify-kubectl-setup}

Переконайтеся, що ви правильно встановили та налаштували `kubectl` на вашому локальному компʼютері. Перевірте версію `kubectl`, щоб впевнитися, що вона актуальна та сумісна з вашим кластером.

Перевірка версії kubectl:

```shell
kubectl version
```

Ви побачите подібний вивід:

```console
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4",GitCommit:"fa3d7990104d7c1f16943a67f11b154b71f6a132", GitTreeState:"clean",BuildDate:"2023-07-19T12:20:54Z", GoVersion:"go1.20.6", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.3",GitCommit:"25b4e43193bcda6c7328a6d147b1fb73a33f1598", GitTreeState:"clean",BuildDate:"2023-06-14T09:47:40Z", GoVersion:"go1.20.5", Compiler:"gc", Platform:"linux/amd64"}

```

Якщо замість `Server Version` ви бачите `Unable to connect to the server: dial tcp <server-ip>:8443: i/o timeout`, вам потрібно дослідити проблеми зʼєднання kubectl з вашим кластером.

Переконайтеся, що ви встановили kubectl, слідуючи [офіційній документації з встановлення kubectl](/docs/tasks/tools/#kubectl), і правильно налаштували змінну середовища `$PATH`.

## Перевірка kubeconfig {#check-kubeconfig}

`kubectl` вимагає файл `kubeconfig` для зʼєднання з Kubernetes кластером. Файл `kubeconfig` зазвичай знаходиться в теці `~/.kube/config`. Переконайтеся, що у вас є валідний файл `kubeconfig`. Якщо у вас немає файлу `kubeconfig`, ви можете отримати його у вашого адміністратора Kubernetes, або ви можете скопіювати його з теки `/etc/kubernetes/admin.conf` вашої панелі управління Kubernetes. Якщо ви розгортали ваш Kubernetes кластер на хмарній платформі та втратили ваш файл `kubeconfig`, ви можете згенерувати його знову за допомогою інструментів вашого хмарного провайдера. Дивіться документацію хмарного провайдера щодо генерації файлу `kubeconfig`.

Перевірте, чи правильно налаштовано змінну середовища `$KUBECONFIG`. Ви можете встановити змінну середовища `$KUBECONFIG` або використовувати параметр `--kubeconfig` з kubectl, щоб вказати теку файлу `kubeconfig`.

## Перевірка VPN зʼєднання {#check-vpn-connectivity}

Якщо ви використовуєте Віртуальну Приватну Мережу (VPN) для доступу до вашого Kubernetes кластеру, переконайтеся, що ваше VPN зʼєднання активне і стабільне. Іноді, перебої у зʼєднанні VPN можуть призвести до проблем зі зʼєднанням з кластером. Підʼєднайтеся до VPN знову і спробуйте отримати доступ до кластера знову.

## Автентифікація та авторизація {#authentication-and-authorization}

Якщо ви використовуєте автентифікацію на базі токенів і kubectl повертає помилку щодо автентифікаційного токена або адреси сервера автентифікації, перевірте, що токен автентифікації Kubernetes та адреса сервера автентифікації налаштовані правильно.

Якщо kubectl повертає помилку щодо авторизації, переконайтеся, що ви використовуєте дійсні дані користувача. Та маєте дозвіл на доступ до ресурсу, який ви запросили.

## Перевірка контекстів {#verify-contexts}

Kubernetes підтримує роботу з [кількома кластерами та контекстами](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/). Переконайтеся, що ви використовуєте правильний контекст для взаємодії з вашим кластером.

Перелік доступних контекстів:

```shell
kubectl config get-contexts
```

Перемикання на відповідний контекст:

```shell
kubectl config use-context <context-name>
```

## API сервер та балансувальник навантаження {#api-server-and-load-balancer}

<a class='glossary-tooltip' title='Компонент панелі управління, що обслуговує API Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/architecture/#kube-apiserver' target='_blank' aria-label='kube-apiserver'>kube-apiserver</a> є центральним компонентом кластера Kubernetes. Якщо сервер API або балансувальник навантаження, який працює перед вашими серверами API, не доступний або не реагує, ви не зможете взаємодіяти з кластером.

Перевірте, чи доступний хост сервера API, використовуючи команду `ping`. Перевірте мережеве зʼєднання кластера та файервол. Якщо ви використовуєте хмарного провайдера для розгортання кластера, перевірте стан проб справності вашого хмарного провайдера для сервера API кластера.

Перевірте стан балансувальника навантаження (якщо використовується), щоб переконатися, що він справний і передає трафік на сервер API.

## Проблеми з TLS {#tls-problems}

* Потрібні додаткові інструменти — `base64` та `openssl` версії 3.0 або вище.

Сервер API Kubernetes типово обслуговує лише HTTPS запити. У цьому випадку можуть виникнути проблеми з TLS з різних причин, таких як закінчення строку дії сертифіката або дійсність ланцюга довіри.

Ви можете знайти TLS сертифікат у файлі kubeconfig, який знаходиться у теці `~/.kube/config`. Атрибут `certificate-authority` містить сертифікат ЦА, а атрибут `client-certificate` містить клієнтський сертифікат.

Перевірте строк дії цих сертифікатів:

```shell
kubectl config view --flatten --output 'jsonpath={.clusters[0].cluster.certificate-authority-data}' | base64 -d | openssl x509 -noout -dates
```

вивід:

```console
notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 10 06:02:47 2034 GMT
```

```shell
kubectl config view --flatten --output 'jsonpath={.users[0].user.client-certificate-data}'| base64 -d | openssl x509 -noout -dates
```

вивід:

```console
notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 12 06:02:50 2025 GMT
```

## Перевірка допоміжних інструментів kubectl {#verify-kubectl-helpers}

Деякі допоміжні інструменти kubectl забезпечують легкий доступ до кластерів Kubernetes. Якщо ви використовували такі інструменти та стикаєтеся з проблемами зʼєднання, переконайтеся, що необхідні налаштування все ще присутні.

Перевірте конфігурацію kubectl для отримання інформації про автентифікацію:

```shell
kubectl config view
```

Якщо раніше ви використовували допоміжний інструмент (наприклад, `kubectl-oidc-login`), переконайтеся, що він все ще встановлений і правильно налаштований.
