Skip to content

Conversation

@Utwo
Copy link

@Utwo Utwo commented Jan 20, 2026

Context

This PR adds a complete Helm chart for deploying Prowler App to Kubernetes clusters. The chart provides a production-ready way to deploy all Prowler App components (API, UI, Workers) along with their dependencies (PostgreSQL, Valkey) using Helm.

The chart is designed to be flexible, supporting both standalone deployments with embedded dependencies and integration with existing PostgreSQL/Valkey instances. It includes comprehensive configuration options, autoscaling capabilities via HPA and KEDA, and detailed documentation with examples.

Fix #7016

Description

This PR introduces a new Helm chart located at contrib/k8s/helm/prowler-app/ that enables easy deployment of the Prowler App stack on Kubernetes. It deploys Prowler API (Django REST Framework backend), Prowler UI (Next.js frontend), Celery Workers (for async scan execution) and Celery Beat (for scheduled tasks).

I've also integrated KEDA ScaledObject for Celery workers to autoscale the Worker based on the number of pending scans.

  • Infrastructure Dependencies:
    • PostgreSQL 18.2.0 (via Bitnami chart) for persistent storage
    • Valkey 0.9.3 (via official Valkey Helm chart) as message broker
    • Both can be enabled/disabled to use existing instances

I took inspiration from https://github.com/langfuse/langfuse-k8s/ and https://github.com/promptlylabs/prowler-helm-chart in making this PR.

TODO

I'm more than happy to continue maintaining this part of the code! 🚀

Steps to review

  1. Test Installation (if you have a Kubernetes cluster):
    # Create required secrets first
    kubectl apply -f contrib/k8s/helm/prowler-app/examples/minimal-installation/secrets.yaml
    
    # Install chart
    helm install prowler contrib/k8s/helm/prowler-app \
      -f contrib/k8s/helm/prowler-app/examples/minimal-installation/values.yaml
    
    # Verify deployment
    helm status prowler
    kubectl get pods -l app.kubernetes.io/instance=prowler

Checklist

Community Checklist
  • This feature/issue is listed in here or roadmap.prowler.com
  • Is it assigned to me, if not, request it via the issue/feature in here or Prowler Community Slack

SDK/CLI

  • Are there new checks included in this PR? Yes / No
    • If so, do we need to update permissions for the provider? Please review this carefully.

UI

  • All issue/task requirements work as expected on the UI
  • Screenshots/Video of the functionality flow (if applicable) - Mobile (X < 640px)
  • Screenshots/Video of the functionality flow (if applicable) - Table (640px > X < 1024px)
  • Screenshots/Video of the functionality flow (if applicable) - Desktop (X > 1024px)
  • Ensure new entries are added to CHANGELOG.md, if applicable.

API

  • All issue/task requirements work as expected on the API
  • Endpoint response output (if applicable)
  • EXPLAIN ANALYZE output for new/modified queries or indexes (if applicable)
  • Performance test results (if applicable)
  • Any other relevant evidence of the implementation (if applicable)
  • Verify if API specs need to be regenerated.
  • Check if version updates are required (e.g., specs, Poetry, etc.).
  • Ensure new entries are added to CHANGELOG.md, if applicable.

License

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Utwo added 5 commits January 15, 2026 17:18
…onfiguration options

- Added PostgreSQL and Valkey as dependencies in Chart.yaml and Chart.lock.
- Updated .helmignore to exclude example files.
- Enhanced values.schema.json and values.yaml with new secret management options for Django keys and PostgreSQL authentication.
- Refactored deployment templates to utilize new environment variable configurations.
- Introduced KEDA support for worker autoscaling.
- Added minimal installation example and secrets for easier deployment.
- Introduced authUrl parameter in values.yaml for UI configuration.
- Updated values.schema.json to include authUrl as a string type.
- Modified configmap.yaml to utilize the new authUrl variable for setting AUTH_URL.
@Utwo Utwo requested a review from a team as a code owner January 20, 2026 10:56
@github-actions github-actions bot added the community Opened by the Community label Jan 20, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 20, 2026

Conflict Markers Resolved

All conflict markers have been successfully resolved in this pull request.

@danibarranqueroo danibarranqueroo changed the title Helm chart for prowler-app feat(app): Helm chart for deploying prowler in k8s Jan 27, 2026
@danibarranqueroo
Copy link
Member

Hello @Utwo! Thank you for this contribution! 🙏

We really appreciate the effort you've put into creating this Helm chart for the Prowler App. This will be very valuable for our community!

Please note that everything within the contrib/ folder is community-maintained and not officially supported by the Prowler team. We encourage the community to use, improve, and maintain these contributions, but they fall outside our regular maintenance and support scope.

Feel free to continue improving it, and we welcome future updates from you or other community members. Thanks again for your contribution to Prowler! 🚀

@danibarranqueroo
Copy link
Member

Hi again @Utwo!

We've noticed that TruffleHog is failing during CI checks. After investigating, we found that the issue is coming from the .tgz files in the charts/ directory.

According to how other projects manage Helm chart dependencies (like https://github.com/helm/charts/blob/master/.gitignore), these packaged dependency files typically aren't committed to the repository.

A potential solution could be removing those .tgz files and adding a step in the README explaining how users can generate them with helm dependency update or the similar command needed. Since you created this chart, feel free to implement the solution you think works best.

Let us know if you need any help with this and thanks again!

@Utwo
Copy link
Author

Utwo commented Jan 27, 2026

Thank you for your feedback!

I've removed the .tgz files, and I've updated the readme with the helm dependency update command. To provide a streamlined experience for developers using this chart, it would be nice to publish it to the artifact hub. In the current form, it is hard to consume this Helm chart.

Regarding my TODO items, is it okay if I implement testing the chart on CI for every commit and set up a pipeline to publish the chart to Artifact Hub? This will ensure the chart is always verified and easily accessible.

@danibarranqueroo
Copy link
Member

Okay, that sounds interesting!

Before we proceed with that, could you clarify what's involved in the Artifact Hub integration? Since we'll need to maintain it if we go this route, we'll need to understand the setup requirements and ongoing maintenance responsibilities.
Thanks!

@Utwo
Copy link
Author

Utwo commented Jan 27, 2026

So, for DevOps/infra people to use a Helm chart, they will need to pull it from a registry, similar to how Docker images are pushed/pulled.
We use the following commands to install a Helm chart:

helm repo add prowler https://[registry]
helm repo update
helm install prowler prowler/prowler

For the registry, we can use just plain github pages. I can help here with the CI, and you will probably need to help me with some GitHub repo settings.

In the end, we will have a GitHub action CI that will:

  1. Install the Helm deps (postgres, redis, neo4j, etc)
  2. Build the Helm chart
  3. Run some tests, like creating a k8s cluster on gh action and trying to deploy the whole application using the Helm chart
  4. Publish the Helm chart to gh pages/or other places

After we have a working version, you will need to create an account on Artifact Hub and register the new GitHub page branch there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community Opened by the Community

Projects

None yet

Development

Successfully merging this pull request may close these issues.

helm refactoring to scale and ease of use

2 participants