В процессе эксплуатации кластеров Kubernetes на базе Nutanix Karbon одним из первых моментов, с чем приходиться столкнуться – получение непосредственного доступа к управлению Kubernetes.
Сделать это достаточно просто. В интерфейсе Karbon необходимо выбрать требуемый кластер и с помощью пункта меню Actions загрузить файл Kubeconfig.
На машине, с которой планируется управление кластером, необходимо установить kubectl версии аналогичной той, которая развернута с помощью Nutanix Karbon. Далее, следуя инструкции разместить файл на машине, с которой планируется подключение к кластеру и использовать переменную KUBECONFIG, либо разместить файл в /home/user/.kube под именем config.
На этом можно было бы закончить, но здесь есть моменты, на которые стоит обратить внимание.
Если посмотреть внутрь файла kubeconfig, то на первый взгляд все выглядит привычно – описание кластера, адрес кластера, сертификаты, пользователь, его token для доступа.
Больше всего нас интересует user token, которой «зашифрован» в Base64 кодировке. При раскодировании можно обратить внимание на некоторые поля:
- username: admin – Это пользователь, от имени которого будет осуществляться подключение к кластеру Kubernetes, данное имя пользователя должно фигурировать в RBAC и этот момент за пользователя admin Karbon отработал самостоятельноl;
- groups: null – Список групп, в которых состоит пользователь.
Чтобы не сбивать сразу с толку – пользователь в файле Kubeconfig – это пользователь, от имени которого был совершен логин в Prism Central и от чьего имени был загружен файл Kubeconfig с веб-интерфейса Prism. Groups – группа, в которой состоит пользователь. Так же берется из Prism Central.
Если зайти в Prism Central пользователем vmik и скачать файл Kubeconfig, на выходе мы получим username: vmik.
Какие трудности могут возникнуть в таком случае? – Если на уровне Kubernetes не настроен RBAC и пользователю vmik не разрешено ничего, подключение к кластеру, соответственно, не удастся. Такая вот связка – пользователи Nutanix и пользователи в Kubernetes.
С одной стороны, непривычно, а с другой избавляет от необходимости выпускать сертификаты для аутентификации самостоятельно. Все что требуется – написать нужные Role и Rolebinding от учетной записи администратора для учетных записей Nutanix Prism Central. Единственные учетные записи, для которых отсутствует необходимость в настройке RBAC – учетные записи Prism Central, с назначенной ролью User Admin. Они будут иметь администраторский доступ в кластера Kubernetes.
Следующее, крайне важное поле в токене – exp: 1600856733. Это дата и время в формате Epoch Time, когда данный токен будет просрочен и выполнять какие-либо операции в кластере с его помощью не получится. По умолчанию, это одни сутки с момента его выпуска, т.е. с момента загрузки файла Kubeconfig с Prism Central на свой пк.
Чтобы получить доступ к кластеру вновь, необходимо в очередной скачать Kubeconfig с Prism Central на машину, с которой производится подключение к кластеру Kubernetes. В полученном файле будет новый токен, сроком жизни в еще одни сутки.
Если подключение к кластеру происходит редко (что маловероятно), скачать файл не оставляет никаких проблем, но, если это ежедневная процедура, будет неплохо автоматизировать этот процесс. Для этого можно использовать предоставляемый Prism Central API для Karbon.
Ниже привожу версию своего кода на python, который запрашивает Kubeconfig для пользователя, под которым проходит аутентификацию в API и размещает его в указанной домашней директории:
#!/usr/bin/python3.6
import requests
import json
import os
#Nutanix cluster variables
nutanix_prism_central_addr = "10.10.10.50"
nutanix_prism_central_user = "vmik"
nutanix_prism_central_passwd = "admin#123"
nutanix_karbon_cluster_name = "my-k8s-cluster"
#Dev linux machine variables
linux_user = "vmik"
#Main
karbon_api_url = "https://"+nutanix_prism_central_addr+":9440/karbon/v1/k8s/clusters/"+nutanix_karbon_cluster_name
session = requests.Session();
session.auth = (nutanix_prism_central_user,nutanix_prism_central_passwd)
session.verify = False
#Requesting kubeconfig from Karbon API as json
karbon_api_response = session.get(karbon_api_url + '/kubeconfig')
kube_config_json = json.loads(karbon_api_response.text)
#Creating default config directory for specified linux user
if not os.path.exists ("/home/"+linux_user+"/.kube/"):
os.mkdir("/home/"+linux_user+"/.kube/")
#Saving kubeconfig into specified directory
kube_config_file = open("/home/"+linux_user+"/.kube/config","w")
kube_config_file.write(kube_config_json['kube_config'])
kube_config_file.close()
Ничего сложного:
- Выполняется подключение к API Prism Central указанным пользователем и производится запрос файла Kubeconfig в формате json;
- В домашнем каталоге пользователя Linux создается подкаталог .kube;
- В данный каталог сохраняется конфигурационный файл для доступа к кластеру Kubernetes под именем config.
Вот и все, можно подключиться к кластеру с помощью kubectl. При необходимости можно добавить исполнение программы в crontab на ежедневной основе и всегда иметь свежий токен для подключения к кластеру.
В качестве заключения:
- Karbon упрощает процедуру доступа к кластерам Kubernetes. Получить готовый Kubeconfig и токен можно просто скачав его с веб-интерфейса, выбрав нужный кластер;
- При получении Kubeconfig пользователь и группа берутся на основании текущих данных из Prism Central;
- При настройке RBAC в кластере Kubernetes, стоит ориентироваться на пользователей и группы из Prism Central;
- Для получения полных прав на кластер Kubernetes, учетная запись в Prism Central должна быть с правами User Admin;
- Токен для подключения к кластеру действителен одни сутки. Через 24 часа необходимо получить новый.