Налаштування API сервера розширення
Налаштування API сервера розширення для роботи з шаром агрегації дозволяє розширювати apiserver Kubernetes додатковими API, які не є частиною основних API Kubernetes.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.- Необхідно налаштувати шар агрегації та увімкнути прапорці apiserver.
Налаштування API сервера розширення для роботи з шаром агрегації
Наступні кроки описують налаштування apiserverʼа розширення на високому рівні. Ці кроки застосовуються незалежно від того, чи використовуєте ви YAML конфігурації, чи API. Робиться спроба конкретно визначити будь-які відмінності між цими двома підходами. Для конкретного прикладу їх реалізації за допомогою YAML конфігурацій, ви можете ознайомитися з sample-apiserver у репозиторії Kubernetes.
Альтернативно, ви можете використовувати наявне стороннє рішення, таке як apiserver-builder, яке має згенерувати кістяк та автоматизувати всі наступні кроки для вас.
- Переконайтеся, що APIService API увімкнено (перевірте
--runtime-config
). Воно має бути типово увімкнене, якщо воно не було свідомо вимкнено у вашому кластері. - Можливо, вам потрібно створити правило RBAC, яке дозволяє додавати обʼєкти APIService, або попросити адміністратора вашого кластера створити його. (Оскільки розширення API впливають на весь кластер, не рекомендується проводити тестування/розробку/налагодження розширення API у робочому кластері.)
- Створіть простір імен Kubernetes, у якому ви хочете запустити свій api-сервер розширення.
- Отримайте сертифікат CA, який буде використовуватися для підпису сертифіката сервера, що використовує api-сервер розширення для HTTPS.
- Створіть серверний сертифікат/ключ для api-сервера, який буде використовуватися для HTTPS. Цей сертифікат повинен бути підписаний вище згаданим CA. Він також повинен мати CN у вигляді імені Kube DNS. Це імʼя формується на основі сервісу Kubernetes і має вигляд
<service name>.<service name namespace>.svc
. - Створіть Secret Kubernetes з серверним сертифікатом/ключем у вашому просторі імен.
- Створіть Deployment Kubernetes для api-сервера розширення і переконайтеся, що ви завантажуєте Secret як том. Він повинен містити посилання на робочий образ вашого api-сервера розширення. Deployment також повинен бути у вашому просторі імен.
- Переконайтеся, що ваш api-сервер розширення завантажує ці сертифікати з того тому і що вони використовуються в процесі рукостискання (handshake) HTTPS.
- Створіть службовий обліковий запис (service account) Kubernetes у вашому просторі імен.
- Створіть кластерну роль Kubernetes для операцій, які ви хочете дозволити над вашими ресурсами.
- Створіть привʼязку кластерної ролі до службового облікового запису (service account) у вашому просторі імен до створеної кластерної ролі.
- Створіть привʼязку кластерної ролі до службового облікового запису (service account) у вашому просторі імен до кластерної ролі
system:auth-delegator
для делегування рішень щодо автентифікації на основному API серверу Kubernetes. - Створіть привʼязку службового облікового запису (service account) у вашому просторі імен до ролі
extension-apiserver-authentication-reader
. Це дозволяє вашому api-серверу розширення отримувати доступ до ConfigMapextension-apiserver-authentication
. - Створіть apiservice Kubernetes. CA сертифікат повинен бути закодований в base64, не містити позбавлений нових рядків і використаний як spec.caBundle в apiservice. Він не повинен бути привʼязаний до простору імен. Якщо ви використовуєте kube-aggregator API, передайте лише PEM-кодований CA bundle, оскільки кодування в base64 виконується за вас.
- Використовуйте kubectl для отримання вашого ресурсу. Під час запуску kubectl повинен повернути "No resources found.". Це повідомлення вказує на те, що все спрацювало, але наразі у вас немає створених обʼєктів цього типу ресурсу.
Що далі
- Пройдіть кроки, щоб налаштувати шар агрегації API та увімкнути прапорці apiserver.
- Для загального огляду дивіться Розширення API Kubernetes за допомогою шару агрегації.
- Дізнайтеся, як Розширити API Kubernetes за допомогою Custom Resource Definitions.