Jenkins + Kubenetes: Как использовать kubectl в плагине kubernetes - PullRequest
0 голосов
/ 06 сентября 2018

Я настраиваю Jenkins в системе Kubernetes. Работает нормально для сборки. Но для развертывания нам нужно вызвать kubectl или helm. В настоящее время я использую

  • lachlanevenson / K8S-kubectl: v1.8.8
  • lachlanevenson / K8S-штурвал: последние

Это ошибка и выдается исключение: «Ошибка с сервера (запрещено): блоки запрещены: пользователь» system: serviceaccount: jenkins: default »не может перечислить блоки в пространстве имен« jenkins »«

Сценарий Дженкинса прост:

def label = "worker-${UUID.randomUUID().toString()}"

podTemplate(label: label,containers: [
  containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.8.8', command: 'cat', ttyEnabled: true)
],
volumes: [
  hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]){
  node(label) {
    stage('Run kubectl') {
        container('kubectl') {
            sh "kubectl get pods"
        }    
    }
  }
}

Не могли бы вы дать мне знать, что не так?

Спасибо

1 Ответ

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

Мастер Kubernetes (k8s), начиная с Kubernetes v1.8, по умолчанию реализует управление доступом на основе ролей (RBAC) управления безопасностью при доступе к его API. Элементы управления RBAC ограничивают доступ к API k8s вашими рабочими нагрузками только теми ресурсами и методами, которые вы явно разрешили.

Вам необходимо создать роль , которая разрешает доступ к list ресурсу pod ресурса (и любым другим ресурсам, которые вам требуются 1 ), создать учетную запись службы объект и, наконец, создание привязки роли , которая назначает роль учетной записи службы.

Наконец, укажите учетную запись службы для развертывания Jenkins, указав ее имя в свойстве serviceAccountName шаблона Pod. Убедитесь, что automountServiceAccountToken равен true, чтобы k8s установил ключ API в ваш Pod. Попытки получить доступ к API k8s с использованием встроенных оболочек и библиотек API k8s должны найти этот ключ и автоматически аутентифицировать ваши запросы.

1 Если вы планируете выполнять развертывание из Jenkins, вам, безусловно, потребуется больше, чем просто перечислить блоки, поскольку вам потребуется мутировать объекты в системе. Однако, если вы используете Helm, именно модуль Helm's Tiller влияет на нижестоящие объекты k8s для ваших развертываний, поэтому набор разрешений, которые вам требуются для Helm Tiller и для Jenkins для связи с Tiller, будет различным.

...