Усунення несправностей kubectl
Ця документація присвячена дослідженню та діагностиці повʼязаних проблем kubectl. Якщо ви зіткнулися з проблемами доступу до kubectl
або зʼєднанням з вашим кластером, цей документ окреслює різні загальні сценарії та потенційні рішення, які допоможуть виявити та усунути ймовірну причину.
Перш ніж ви розпочнете
- Вам потрібно мати кластер Kubernetes.
- Вам також потрібно встановити
kubectl
— дивіться встановлення інструментів
Перевірка налаштувань kubectl
Переконайтеся, що ви правильно встановили та налаштували kubectl
на вашому локальному компʼютері. Перевірте версію kubectl
, щоб впевнитися, що вона актуальна та сумісна з вашим кластером.
Перевірка версії kubectl:
kubectl version
Ви побачите подібний вивід:
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, і правильно налаштували змінну середовища $PATH
.
Перевірка kubeconfig
kubectl
вимагає файл kubeconfig
для зʼєднання з Kubernetes кластером. Файл kubeconfig
зазвичай знаходиться в теці ~/.kube/config
. Переконайтеся, що у вас є валідний файл kubeconfig
. Якщо у вас немає файлу kubeconfig
, ви можете отримати його у вашого адміністратора Kubernetes, або ви можете скопіювати його з теки /etc/kubernetes/admin.conf
вашої панелі управління Kubernetes. Якщо ви розгортали ваш Kubernetes кластер на хмарній платформі та втратили ваш файл kubeconfig
, ви можете згенерувати його знову за допомогою інструментів вашого хмарного провайдера. Дивіться документацію хмарного провайдера щодо генерації файлу kubeconfig
.
Перевірте, чи правильно налаштовано змінну середовища $KUBECONFIG
. Ви можете встановити змінну середовища $KUBECONFIG
або використовувати параметр --kubeconfig
з kubectl, щоб вказати теку файлу kubeconfig
.
Перевірка VPN зʼєднання
Якщо ви використовуєте Віртуальну Приватну Мережу (VPN) для доступу до вашого Kubernetes кластеру, переконайтеся, що ваше VPN зʼєднання активне і стабільне. Іноді, перебої у зʼєднанні VPN можуть призвести до проблем зі зʼєднанням з кластером. Підʼєднайтеся до VPN знову і спробуйте отримати доступ до кластера знову.
Автентифікація та авторизація
Якщо ви використовуєте автентифікацію на базі токенів і kubectl повертає помилку щодо автентифікаційного токена або адреси сервера автентифікації, перевірте, що токен автентифікації Kubernetes та адреса сервера автентифікації налаштовані правильно.
Якщо kubectl повертає помилку щодо авторизації, переконайтеся, що ви використовуєте дійсні дані користувача. Та маєте дозвіл на доступ до ресурсу, який ви запросили.
Перевірка контекстів
Kubernetes підтримує роботу з кількома кластерами та контекстами. Переконайтеся, що ви використовуєте правильний контекст для взаємодії з вашим кластером.
Перелік доступних контекстів:
kubectl config get-contexts
Перемикання на відповідний контекст:
kubectl config use-context <context-name>
API сервер та балансувальник навантаження
kube-apiserver є центральним компонентом кластера Kubernetes. Якщо сервер API або балансувальник навантаження, який працює перед вашими серверами API, не доступний або не реагує, ви не зможете взаємодіяти з кластером.
Перевірте, чи доступний хост сервера API, використовуючи команду ping
. Перевірте мережеве зʼєднання кластера та файервол. Якщо ви використовуєте хмарного провайдера для розгортання кластера, перевірте стан проб справності вашого хмарного провайдера для сервера API кластера.
Перевірте стан балансувальника навантаження (якщо використовується), щоб переконатися, що він справний і передає трафік на сервер API.
Проблеми з TLS
- Потрібні додаткові інструменти —
base64
таopenssl
версії 3.0 або вище.
Сервер API Kubernetes типово обслуговує лише HTTPS запити. У цьому випадку можуть виникнути проблеми з TLS з різних причин, таких як закінчення строку дії сертифіката або дійсність ланцюга довіри.
Ви можете знайти TLS сертифікат у файлі kubeconfig, який знаходиться у теці ~/.kube/config
. Атрибут certificate-authority
містить сертифікат ЦА, а атрибут client-certificate
містить клієнтський сертифікат.
Перевірте строк дії цих сертифікатів:
kubectl config view --flatten --output 'jsonpath={.clusters[0].cluster.certificate-authority-data}' | base64 -d | openssl x509 -noout -dates
вивід:
notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 10 06:02:47 2034 GMT
kubectl config view --flatten --output 'jsonpath={.users[0].user.client-certificate-data}'| base64 -d | openssl x509 -noout -dates
вивід:
notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 12 06:02:50 2025 GMT
Перевірка допоміжних інструментів kubectl
Деякі допоміжні інструменти kubectl забезпечують легкий доступ до кластерів Kubernetes. Якщо ви використовували такі інструменти та стикаєтеся з проблемами зʼєднання, переконайтеся, що необхідні налаштування все ще присутні.
Перевірте конфігурацію kubectl для отримання інформації про автентифікацію:
kubectl config view
Якщо раніше ви використовували допоміжний інструмент (наприклад, kubectl-oidc-login
), переконайтеся, що він все ще встановлений і правильно налаштований.