Перейти к содержимому

Предисловие ​

Иногда нет возможности разместить серверы внутри одного broadcast домена, тогда можно добавить машину самостоятельно, без механизма auto discovery.

Для выполнения этой инструкции понадобится:

  • openssl
  • base64
  • kubectl
  • kubeconfig администратора
  • Адрес (K8SCPIP) и CA controlplane

Подготовка сервера ​

Подробно процесс подготовки описан в разделе Подготовка ОС. Выполните все шаги из той инструкции.

Генерация конфигурации для host-agent ​

Внимание!

В этой инструкции будут использоваться placeholder! Замените вручную их на соответствующие параметры.

Для удобства они будут отмечены зелёным цветом, вот так

Генерация нового приватного ключа ​

bash
openssl genrsa -out {++$hostname++}.key 2048

Генерирация CSR и кодирование его в base64 ​

Внимание

При генерации CSR очень важно заполнить поля Organization name (O) и Common Name (CN).

Organization Name всегда должен быть равен byoh:hosts

Common Name заполните по следующему паттерну byoh:host:$hostname

Запустите генерацию CSR:

bash
openssl req -new -key {++$hostname++}.key -out {++$hostname++}.csr

Появится помощник с интерактивными вопросами. Для регистрации сервера в кластере заполните их без ошибок.

Ответы на интерактивные вопросы

Organization Name (eg, company) [Internet Widgits Pty Ltd]: byoh:hosts

Common Name (e.g. server FQDN or YOUR name) []: byoh:host:$hostname

Получите содержимое запроса сертификата в base64:

bash
cat {++$hostname++}.csr | base64 | tr -d '\n'

Получившуюся строку сохраните, она понадобится позже. В месте её использования будет placeholder $csr_base64.

Создайте CertificateSigningRequest

yaml
---
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: byoh-csr-{++$hostname++}
spec:
  request: {++$csr_base64++}
  signerName: kubernetes.io/kube-apiserver-client
  usages:
    - client auth
  expirationSeconds: 31536000

Примените его в менеджмент кластере с помощью kubectl apply.

Проверьте его статус:

bash
kubectl get csr {++byoh-csr-$hostname++}

В правой колонке должно быть Approved,Issued.

Получите сертификат ​

bash
kubectl get csr byoh-csr-{++$hostname++} -o jsonpath='{.status.certificate}'

Получившуюся строку сохраните, она понадобится далее. В месте её использования будет placeholder $cert_base64.

Закодируйте ключ в base64

bash
cat {++$hostname++}.key | base64| tr -d '\n'

Получившуюся строку сохраните, она понадобится далее. В месте её использования будет placeholder $key_base64.

Создаем kubeconfig для машины ​

Переменные $apiserver_addr и $apiserver_ca вы можете скопировать с уже зарегистрированных машин или в cluster-admin kubeconfig, который хранится на любом мастере по пути /etc/kubernetes/admin.conf

Заметка

kubeconfig из веб-интерфейса rancher не подойдёт.

yaml
---
apiVersion: v1
clusters:
  - cluster:
      certificate-authority-data: {++$apiserver_ca++}
      server: {++$apiserver_addr++}
    name: default-cluster
contexts:
  - context:
      cluster: default-cluster
      namespace: default
      user: default-auth
    name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
  - name: default-auth
    user:
      client-certificate-data: {++$cert_base64++} # можно получить с помощью kubectl get csr {++byoh-csr-$hostname++} -o jsonpath='{.status.certificate}'
      client-key-data: {++$key_base64++} # можно получить с помощью cat {++$hostname++}.key | base64 | tr -d '\n'

Сохраните этот конфиг на машине, которую планируете завести в кластер по пути /root/.byoh/config.

Владелец и группа файла должны быть root, права 0600(rw-------).

Запустите агент с помощью systemctl start host-agent. Проверьте в менеджмент кластере появление машины с помощью

bash
kubectl get byoh {++$hostname++}

Команда Боцман