The team evaluated several options, with two leading contenders. OPA met all of Robinhood’s security requirements, but it used the Rego policy language, which was unfamiliar to their engineers. Kyverno stood out for its flexibility, maturity, and ease of use: its policies are written in YAML, which was already familiar to Robinhood’s engineers, and it provided a robust auditing tool to check existing resources and policies before enforcing them.
The migration was methodical and phased to ensure that policies were correctly enforced without disrupting operations:
- Evaluation and testing. The team tested Kyverno in audit mode, running policies without enforcing them so they wouldn’t accidentally break existing workloads.
- Policy migration. They migrated their existing PSPs into Kyverno policies, continuously validating them with integration tests.
- Decommissioning legacy systems. They phased out their in-house admission server and decommissioned Pod Security Policies, making Kyverno the primary policy management tool for their clusters.
They also implemented break glass scenarios, procedures for quickly disabling policies or reverting configurations if something went wrong, and used a combination of unit tests and end-to-end tests to validate their policies before and after deployment.