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.
