Есть чарт с проектом opencti. У нас есть цель из одного git репозитория подключить его в другой, где лежит flux.
Пример структуры opencti репозитория:
$ tree
.
├── base
│ ├── harbor-creds-secret.yaml
│ ├── helmrelease.yaml
│ ├── kustomization.yaml
│ ├── rabbitmq-endpoint.yaml
│ ├── rabbitmq-svc.yaml
│ ├── repository.yaml
│ ├── tls-secret.yaml
│ ├── vault-auth-sa-token.yaml
│ └── vault-auth-sa.yaml
├── overlays
│ ├── ingest
│ │ ├── kustomization.yaml
│ │ └── opencti-ingest-release.yaml
│ └── web
│ ├── kustomization.yaml
│ └── opencti-web-release.yaml
└── README.md
Выше - базовый слой + несколько оверлеев, которые переопределяют базу. Все работает, если просто выполнить например:
kubectl apply -k overlays/<overlay_name>
Но, мы хотим полноценный GitOps и у нас есть flux репозиторий.
Там на уровне кластера подключаем следующие файл:
1. GitRepository
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: opencti
namespace: flux-system
spec:
interval: 1m0s
url: ssh://git@<domain>/path/to/opencti.git
ref:
branch: main
secretRef:
name: opencti-git-secret
Это "указатель" на то, что смотреть мы будем не во flux репо, а другой гит репозиторий.
2. Secret для авторизации в гите. У меня это ssh ключи для flux. Секрет должен иметь вид:
apiVersion: v1
kind: Secret
metadata:
name: opencti-git-secret
namespace: flux-system
stringData:
identity: ""
identity.pub: ""
known_hosts: ""
type: Opaque
3. Kustomization для оверлея веб.
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: opencti-web
namespace: flux-system
spec:
interval: 2m
path: ./overlays/web
prune: true
targetNamespace: opencti
sourceRef:
kind: GitRepository
name: opencti
namespace: flux-system
wait: true
timeout: 10m0s
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: opencti-web
4. Тоже самое для ingest оверлея.
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: opencti-ingest
namespace: flux-system
spec:
interval: 2m
path: ./overlays/ingest
prune: true
targetNamespace: opencti
sourceRef:
kind: GitRepository
name: opencti
namespace: flux-system
wait: true
timeout: 10m0s
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: opencti-ingest
Ну и основной kustomization, где все подключаем:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- repository.yaml
- repository-secret.yaml
- kustomization-web.yaml
- kustomization-ingest.yaml
Затем эту директорию подключаем в kustomization уровнем выше, у меня это уровень кластера.
#fluxcd