Design Thinking and Innovation Project
Design Thinking and Innovation Project
Design Thinking and Innovation Project
In a traditional Forseti installation, the compute resources are deployed as GCE virtual machines (VM). The Forseti server VM
executes the forseti_server process, listening for requests to take action. On the Forseti server is also a Linux cronjob that
periodically invokes the server to build inventory and a model, scan, and notify on any violations. The Forseti client VM provides a
CLI where a user can invoke these same functions as well as execute the IAM explain function.
In Forseti on-GKE, the core compute resources are deployed in containers: the server and orchestrator. These containers are each
wrapped in Kubernetes Pods; the forseti-server and forseti-orchestrator pods respectively.
The forseti-server pod is deployed in a Kubernetes Deployment controller. Like the forseti_server process on the VM, this is a long
running process that listens for requests made to it by a client.
The forseti-orchestrator pod is deployed in a Kubernetes CronJob. This reflects the behavior of the Linux cronjob on the server
VM, periodically invoking the inventory build, scan, and notification actions on the forseti-server deployment.
The config-validator pod is also deployed in a Kubernetes Deployment controller. The service provided by the config-validator pod
is exposed internally to Forseti on-GKE. The Config Validator Scanner uses this service when auditing resources against a
policy-library. The config-validator uses git-sync in a container to periodically pull a policy-library in from a Git repository. If a
change in the policies is detected, git-sync will make a call to the kube-proxy container to restart the pod with the updated
policies.
The client CLI is still provided through the GCE VM. The endpoint configuration for the the VM is set to send requests to the GCP
load balancer for the Forseti server deployment.
Flow Chart
Models
The data model is an additional pool of relational data that is created from the flat JSON data in Inventory. With the relational
data, Forseti can more easily understand the entire relationship, including inheritance between resources. Models allow for
easier querying against the entire computed policy.
Scanner and Explain depend on a data model, so you must create a valid data model before you use Scanner or Explain. Note that
data models aren’t meant to be persistent, so when you’re finished using a model, you should delete it.
Thank you