Si vous ne savez pas ce qu’est Dependency Track, je vous invite à lire mon article d’introduction à Dependency Track ici.

Configuration

Les éléments à déployer sont très simples :

  • Un namespace pour isoler les ressources de Dependency Track
  • Un HelmRepository pour indiquer à FluxCD où trouver les charts de Dependency Track
  • Un HelmRelease pour déployer Dependency Track avec les valeurs de configuration souhaitées

dependency-track.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: dependency-track

---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: dependency-track
  namespace: dependency-track
spec:
  interval: 1h
  url: https://dependencytrack.github.io/helm-charts

---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: dependency-track
  namespace: dependency-track
spec:
  interval: 1h
  timeout: 15m
  chart:
    spec:
      chart: dependency-track
      version: "0.44.0"
      sourceRef:
        kind: HelmRepository
        name: dependency-track
        namespace: dependency-track
  values:
    frontend:
      image:
        tag: "4.14.1"
    apiServer:
      image:
        tag: "4.14.1"
      persistentVolume:
        enabled: true
        size: 20Gi
      resources:
        requests:
          cpu: "500m"
          memory: 1Gi
        limits:
          memory: 5Gi

On applique la configuration avec :

kubectl apply -f dependency-track.yaml

Verification de l’installation

On contrôle que l’installation s’est bien passée avec :

kubectl get deployment -n dependency-track
# dependency-track-frontend   1/1     1            1           47h
kubectl get statefulset -n dependency-track
# dependency-track-api-server   1/1     47h

Accès au service

Puis on lance le port forward pour accéder au service :

kubectl port-forward -n dependency-track svc/dependency-track-api-server 8080:8080

# Dans un autre terminal
kubectl port-forward -n dependency-track svc/dependency-track-frontend 8081:8080

Je vous laisse constater le résultat (login : admin / password : admin).

Problèmes rencontrés

Manque de droits pour FluxCD

Mon FluxCD n’avait pas les droits nécessaires pour créer des ressources dans le namespace dependency-track ce qui a conduit à des erreurs lors du déploiement. J’ai du spécifier les rbac suivantes :

rbac.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: flux-pv-manager-dependency-track
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flux-pv-manager
subjects:
  - kind: ServiceAccount
    name: flux-applier
    namespace: dependency-track
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: helm-release-manager
  namespace: dependency-track
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: [""]
    resources: ["services", "serviceaccounts", "pods", "persistentvolumeclaims"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: ["apps"]
    resources: ["deployments", "statefulsets", "replicasets"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["roles", "rolebindings"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: flux-helm-release-manager
  namespace: dependency-track
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: helm-release-manager
subjects:
  - kind: ServiceAccount
    name: flux-applier
    namespace: dependency-track

Manque de ressource

J’ai toujours pour réflexe lorsque je déploie une outil de jeter un oeil aux ressources nécessaires pour le faire tourner. La chart officielle de Dependency Track réclame 2 CPU et 5Gi de RAM pour l’api server ce qui me semblait énorme pour mon petit cluster.

J’ai donc commencé par réduire les ressources demandées à 500m de CPU et 1Gi de RAM pour les tests, mais cela a conduit à des lenteurs extrêmes et des timeouts dans les logs de l’api server.

La solution, laisser la configuration RAM par défaut (5Go requested), 500m de cpu suffise par contre pour un petit cluster de test.

      resources:
        requests:
          cpu: "500m"

Le mot de la fin

Pour aller plus loin vous pouvez configurer un ingress(déprécié) ou httpRoute pour accéder à l’interface de Dependency Track sans passer par un port forward, ou encore configurer une base de données externe pour la persistance des données.