Настройка ServiceAccount Jenkins для K8s

Данную мини-заметку пишу для себя, но вдруг кому-то это тоже будет интересно.

Иногда возникают задачи, в которых мне нужно настроить K8s-кластер таким образом, чтоб из Jenkins можно было взаимодействовать с K8s. Например, развертывание приложений или их обновление.

В этой заметке я не буду описывать процесс написания Jenkins-пайплайна. Каждый случай уникален, да и информации в интернете много. Также здесь не будет процесса создания kube-config файла. Возможно, опишу работу с rbac-в отдельной статье.

Создание манифестов

Для базовой настройки ServiceAccount можно использовать следующий файл:


### Создаем Namespace, в котором будет хранить все ресурсы
apiVersion: v1
kind: Namespace
metadata:
  name: jenkins
  labels:
    name: jenkins
---
###Создаем ServiceAccount (пользователя) под которым jenkins будет обращаться в кластер
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: jenkins
  annotations:
    kubernetes.io/service-account.name: jenkins
---
###Привязываем пользователя к роли. В данном случае роль не создаем, а даем нашему SA права администратора кластера
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: jenkins
---
###Создаем секрет со статичным именем для JWT-token'a
apiVersion: v1
kind: Secret
metadata:
  name: jenkins-token
  namespace: jenkins
  annotations:
    kubernetes.io/service-account.name: jenkins
type: kubernetes.io/service-account-token

Представленный вариант носит схематичный характер и больше похож на шпаргалку конфига, который я кладу сюда, чтоб не искать его по серверам :D