Как настроить мастер и динамические агенты Jenkins в разных облаках?С плагином Kubernetes - PullRequest
0 голосов
/ 26 сентября 2018

Для контекста, я работаю в большой компании с командами в разных облаках (Azure и IBM cloud ранее Bluemix).В конечном итоге команда Ops будет контролировать мастера Дженкинса, но поскольку моя команда в первую очередь нуждается в этом, мы настраиваем его.

Что у нас есть:

  • Мастер Дженкинса находится вAzure ( облако A ), последняя версия, и у нас есть плагин Kubernetes (среди прочего) для динамической подготовки агентов.
  • Моя команда работает в кластерах IBM Kubernetes ( облако B ).В этом облаке у нас есть пространство имен для devops в кластере k8s, где мы хотим, чтобы подчиненные агенты были созданы и запущены.В этом облаке мы также создали учетные записи служб в этом пространстве имен, роли и привязке к роли.

Проблема: настройка главного устройства Jenkins для подключения к такому пространству имен в облаке IBM для предоставления агентов и выполнения заданий по мере необходимости,В частности, в Jenkins> Управление> Настройка системы> Облако.Здесь у меня есть:

  • URL Kubernetes, установленный на IP: порт главного узла кластера
  • Ключ сертификата сервера Kubernetes, я помещаю сюда сертификат, полученный при созданиислужебная учетная запись.
  • Пространство имен, учетные данные У меня есть служебная учетная запись и, наконец, URL Jenkins.

Когда я пробую эту конфигурацию и протестирую соединение, получаю:

Ошибка тестирования соединения https://ip:port: Ошибка выполнения: GET at: https://ip:port/api/v1/namespaces/devops/pods. Сообщение: не авторизовано!У настроенной учетной записи службы нет доступа.Сервисный аккаунт может быть аннулирован.Несанкционированный.

Вопросы:

  • Кто-нибудь знает, как это сделать или имеет ссылки на что-то подобное?
  • Что на картинке я должен указать в kubernetes URL?Согласно документации, я должен ввести конечную точку кластерного движка контейнера, что это такое в IBM Cloud?У меня есть IP-адрес и порт главного узла.

Я прочитал много документации от IBM, плагин kubernetes для Jenkins (https://github.com/jenkinsci/kubernetes-plugin) и множество других сообщений, объясняющих, какнастроить jenkins с помощью kubernetes и динамической инициализации, и многие из них сказали, что можно использовать jenkins и slave в разных облаках, но никто из них не объяснил, как это сделать ..

Заранее спасибо.

++++++++++++++++++ ОБНОВЛЕНИЕ +++++++++++++++++++++++

На следующем снимке экрана показаны используемые конфигурации. В частности, поля Kubernetes URL и namespace .

Спасибо @ samhain1138 за помощьпока что, но я не могу получить успешное тестирование соединения в разделе конфигурации плагина Jenkins Kubernetes. Я думаю, что я не могу ввести правильную информацию в некоторые поля в этом разделе.

Примечание: пожалуйста, имейте в виду, что мои настройки следующие: мастер Jenkins находится в облаке A (Azure), и я хочу, чтобы узлы агента работали в другом кластере в другом облаке, назовите его Cloud B (в моем случае это IBM Cloud).

enter image description here

На скриншоте выше я уверен, что у меня есть правильные значения для Kubernetes URL и пространства имен , но я не уверен насчет других полей ( Kubernetes serverКлюч сертификата и Учетные данные .)

В поле Ключ сертификата сервера Kubernetes Я попытался поставить:

  • Пример.сертификат учетной записи службы в кластере kubernetes в IBM.(Получено 1. созданием учетной записи службы, получением секрета этой учетной записи службы и извлечением ca.cert из такого секрета)
  • «Токен» с сервера, который я получаю, выполняя представление конфигурации kubectl вкластер kubernetes в IBM.Токен находится в поле users> user> auth-provider> config> id-token при выполнении команды «kubectl config view»

В учетных данных я создал и попробовал разные Kinds :

  • Имя пользователя и пароль: я попробовал это с моими учетными данными для кластера IBM и с учетными данными учетной записи службы (Когда я создал учетную запись службы, роль и привязку роли, я заметил, что был создан пользователь, который был serviceaccountname-namespace-cluster)
  • Учетная запись службы Kubernetes

Я перепробовал все их комбинации и не смог получить Соединение успешно при тестировании соединения .

Erros Я получаю:

  • Ошибка тестирования соединения https://APISERVER: Ошибка при выполнении: GET at: https://APISERVER/api/v1/namespaces/a-devops-namespace/pods. Сообщение: не авторизовано!У настроенной учетной записи службы нет доступа.Сервисный аккаунт может быть аннулирован.Не авторизован.

  • Ошибка тестирования соединения https://APISERVER: Ошибка при выполнении: GET at: https://APISERVER/api/v1/namespaces/a-devops-namespace/pods. Сообщение: запрещено! У настроенной учетной записи службы нет доступа.Сервисный аккаунт может быть аннулирован.pods запрещен: Пользователь "system: anonymous" не может перечислить pods в пространстве имен "a-devops-namespace".

1 Ответ

0 голосов
/ 29 сентября 2018

Хорошо, вам нужно изменить несколько вещей в мастере Jenkins UI , который, если я правильно понимаю, работает в вашей учетной записи Azure.

Прежде всего, мастер Jenkinsпытаясь подключиться к локальному (Azure) мастеру Kubernetes.
Вам нужно будет установить для него значение, которое разрешается для мастера Kubernetes, работающего в IBM.
В этом отношении имя хоста будет не оканчивается на ".local".

Я сомневаюсь, что учетные данные, которые вы используете на скриншоте, который вы разместили, соответствуют мастеру Kubernetes в IBM (они соответствуют мастеру Azure Kubernetes, в противном случае вы получитеошибка), поэтому вам также необходимо обновить их.
Это покрыто здесь , а когда вы закончите, здесь (в разделе "Затем установитевведите учетные данные HTTP, выполнив следующие действия ", игнорируйте команду gcloud, используемую для извлечения пароля.
Убедитесь, что мастер Kubernetes в IBM доступен из мастер Jenkins в Azure, используя tКнопка «Проверить соединение».

Тогда вы, похоже, также перепутали настройку пространства имен Kubernetes.
Ваша учетная запись службы использует пространство имен devops, в то время как ваш мастер Jenkins настроен на использование пространства имен kubernetes-plugin.
Учетные записи служб соответствуют пространствам имен, поэтому вам нужно обновить этот параметр до devops.

Это по-прежнему крайне плохая идея, особенно с точки зрения безопасности (если я прослушиваю ваше соединение, я могу скопироватьи используйте учетную запись пароля + службы вашего мастера IBM k8s, что позволяет мне запускать модули!).
Вы действительно должны запустить мастер Jenkins в IBM или, если у вас есть веские причины для такой странной настройки, по крайней мере, убедитесь, чтоэто соединение идет через VPN ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...