<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Greenhouse</title><link>https://cloudoperators.dev/</link><description>Recent content on Greenhouse</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://cloudoperators.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>API</title><link>https://cloudoperators.dev/docs/reference/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/api/</guid><description>Packages:
greenhouse.sap/v1alpha1 greenhouse.sap/v1alpha2 greenhouse.sap/v1alpha1 Resource Types: AuthType (string alias) (Appears on: SCIMConfig) AuthType defines the authentication method for SCIM API access.
Authentication (Appears on: OrganizationSpec) Field Description oidc
OIDCConfig OIDConfig configures the OIDC provider.
scim
SCIMConfig SCIMConfig configures the SCIM client.
Catalog Catalog is the Schema for the catalogs API.
Field Description metadata
Kubernetes meta/v1.ObjectMeta Refer to the Kubernetes API documentation for the fields of the metadata field. spec
CatalogSpec sources</description></item><item><title>Architecture</title><link>https://cloudoperators.dev/docs/architecture/high-level/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/architecture/high-level/</guid><description>Greenhouse components --- title: Greenhouse High-Level Architecture --- flowchart LR kubectl[kubectl] dashboard[Greenhouse Dashboard] api[Greenhouse API endpoint] subgraph "Greenhouse Central Cluster" direction TB operator[Greenhouse Operators] end subgraph "Remote Cluster" direction TB rbac[Kubernetes RBAC] helmRelease[Helm Releases] end kubectl --> api dashboard --> api api --> operator operator --> rbac operator --> helmRelease From a high-level perspective, the Greenhouse platform consists of these main components:
Greenhouse Central Cluster: The API Server of the central Greenhouse cluster serves as the API endpoint that acts as the primary interface for users to interact with the Greenhouse platform.</description></item><item><title>ClusterNotReady</title><link>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-not-ready/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-not-ready/</guid><description>Alert Description This alert fires when a Greenhouse-managed cluster has not been ready for more than 15 minutes.
What does this alert mean? The Greenhouse controller monitors the health of all registered clusters. When a cluster is not ready, it indicates that the Greenhouse operator cannot properly communicate with or manage resources on that cluster. This could be due to:
Network connectivity issues between Greenhouse and the cluster Invalid or expired kubeconfig credentials The cluster API server being unavailable Insufficient permissions for Greenhouse to access the cluster Node issues preventing the cluster from being operational Diagnosis Get the Cluster Resource Retrieve the cluster resource to view its current status:</description></item><item><title>Local development setup</title><link>https://cloudoperators.dev/docs/contribute/local-dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/contribute/local-dev/</guid><description>What is Greenhouse? Greenhouse is a Kubernetes operator build with Kubebuilder and a UI on top of the k8s API.
It expands the Kubernetes API via CustomResourceDefinitions. The different aspects of the CRDs are reconciled by several controllers. It also acts as an admission webhook.
The Greenhouse Dashboard is a UI acting on the k8s apiserver of the cluster Greenhouse is running in. The UI itself is a Juno application containing several micro frontends.</description></item><item><title>Cluster onboarding</title><link>https://cloudoperators.dev/docs/user-guides/cluster/onboarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/cluster/onboarding/</guid><description>Content Overview Preparation Onboard After onboarding Troubleshooting This guides describes how to onboard an existing Kubernetes cluster to your Greenhouse organization.
If you don&amp;rsquo;t have an organization yet please reach out to the Greenhouse administrators.
While all members of an organization can see existing clusters, their management requires org-admin or cluster-admin privileges. See RBAC within the Organization namespace for details.
:information_source: The UI is currently in development. For now this guide describes the onboarding workflow via command line.</description></item><item><title>OperatorReconcileErrorsHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-reconcile-errors-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-reconcile-errors-high/</guid><description>Alert Description This alert fires when more than 10% of reconciling operations fail for a controller for 15 minutes.
What does this alert mean? The Greenhouse operator uses controllers to manage various resources. When a controller&amp;rsquo;s reconciliation error rate exceeds 10%, it indicates systemic issues preventing the controller from properly managing its resources.
This could be due to:
API server connectivity issues Resource conflicts or invalid resource states Missing dependencies or referenced resources Permission issues preventing controller operations Resource exhaustion (memory, CPU) affecting controller performance Bugs in the controller logic Diagnosis Identify the Affected Controller The alert label controller identifies which controller is failing.</description></item><item><title>OrganizationNotReady</title><link>https://cloudoperators.dev/docs/operations/playbooks/organization/organization-not-ready/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/organization/organization-not-ready/</guid><description>Alert Description This alert fires when a Greenhouse Organization has not been ready for more than 15 minutes.
What does this alert mean? An Organization in Greenhouse represents a tenant and serves as the primary namespace for all resources belonging to that organization. When an Organization is not ready, it indicates that Greenhouse cannot properly initialize or manage the organization&amp;rsquo;s resources.
This could be due to:
Issues with the organization&amp;rsquo;s namespace creation or configuration RBAC setup failures IdP (Identity Provider) configuration problems Service proxy provisioning issues Default team role configuration problems Diagnosis Get the Organization Resource Retrieve the organization resource to view its current status:</description></item><item><title>Organizations</title><link>https://cloudoperators.dev/docs/getting-started/core-concepts/organizations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/core-concepts/organizations/</guid><description>What are Organizations? Organizations are the top-level entities in Greenhouse. Each Organization gets a dedicated Namespace, that contains all resources bound to the Organization. Greenhouse expects an Organization to provide its own Identity Provider and currently supports OIDC Identity Providers. Greenhouse also supports SCIM for syncing users and groups from an Identity Provider.
See Creating an Organization for more details.
Organization Namespace and Permissions The Organization&amp;rsquo;s Namespace in the Greenhouse cluster contains all resources bound to the Organization.</description></item><item><title>Organizations</title><link>https://cloudoperators.dev/docs/reference/components/organization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/organization/</guid><description>An Organization is the top-level entity within Greenhouse. Each Organization represents a different tenant within Greenhouse and is provided with a dedicated Namespace in the Greenhouse cluster.
Example Organization Spec apiVersion: greenhouse.sap/v1alpha1 kind: Organization metadata: name: example-organization spec: authentication: oidc: issuer: https://accounts.example.com clientId: example-client-id Writing an Organization Spec DisplayName .spec.displayName is a human-friendly name for the Organization. This field is optional; if not provided, it defaults to the value of metadata.</description></item><item><title>Overview</title><link>https://cloudoperators.dev/docs/getting-started/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/overview/</guid><description>What is Greenhouse? Greenhouse is a cloud operations platform designed to streamline and simplify the management of a large-scale, distributed infrastructure.
It offers a unified interface for organizations to manage various operational aspects efficiently and transparently and operate their cloud infrastructure in compliance with industry standards.
The platform addresses common challenges such as the fragmentation of tools, visibility of application-specific permission concepts and the management of organizational groups. It also emphasizes the harmonization and standardization of authorization concepts to enhance security and scalability.</description></item><item><title>PluginNotReady</title><link>https://cloudoperators.dev/docs/operations/playbooks/plugin/plugin-not-ready/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/plugin/plugin-not-ready/</guid><description>Alert Description This alert fires when a Plugin has not been ready for more than 15 minutes.
What does this alert mean? A Plugin in Greenhouse represents an application or service deployed to a target cluster via Helm. When a Plugin is not ready, it indicates that the deployment or the workload resources are not functioning correctly.
This could be due to:
Helm chart deployment failures Missing or invalid PluginDefinition Cluster access issues Invalid plugin option values Workload resources not becoming ready (pods failing, etc.</description></item><item><title>ProxyRequestErrorsHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/proxy/proxy-request-errors-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/proxy/proxy-request-errors-high/</guid><description>Alert Description This alert fires when more than 10% of HTTP requests result in 4xx (excluding 401/403) or 5xx errors for a proxy service for 15 minutes.
What does this alert mean? Greenhouse proxy services (like service-proxy, cors-proxy, idproxy) handle HTTP traffic for various purposes. High error rates indicate that requests are failing, which affects user experience and functionality.
This could be due to:
Backend services being unavailable or unhealthy Misconfigured routing or proxy rules Authentication/authorization issues (if 401/403 are included) Network connectivity problems to backend services Resource exhaustion in the proxy pod Invalid requests from clients Diagnosis Identify the Affected Proxy Service The alert label proxy identifies which proxy service has high error rates:</description></item><item><title>ResourceOwnedByLabelMissing</title><link>https://cloudoperators.dev/docs/operations/playbooks/resource/resource-owned-by-label-missing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/resource/resource-owned-by-label-missing/</guid><description>Alert Description This alert fires when resources exist without the required greenhouse.sap/owned-by label for 15 minutes.
What does this alert mean? The greenhouse.sap/owned-by label is used to track resource ownership by Teams. This label should reference a Team with the greenhouse.sap/support-group=true label. Missing ownership labels make it difficult to:
Track responsibility for resources Audit resource ownership Contact support teams for issues Enforce access control policies Diagnosis Identify the Affected Resource The alert provides:</description></item><item><title>TeamMembershipCountDrop</title><link>https://cloudoperators.dev/docs/operations/playbooks/team/team-membership-count-drop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/team/team-membership-count-drop/</guid><description>Alert Description This alert fires when the number of members for a team has dropped by more than 5 in the last 5 minutes.
What does this alert mean? This alert detects sudden drops in team membership that could indicate:
Accidental bulk removal of team members in the IdP SCIM synchronization issues causing member data loss IdP group configuration changes Potential security incidents (unauthorized access removal) A drop of more than 5 members in 5 minutes is unusual and warrants investigation.</description></item><item><title>Clusters</title><link>https://cloudoperators.dev/docs/reference/components/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/cluster/</guid><description>A Cluster represents an external Kubernetes cluster that is managed by Greenhouse. Clusters are onboarded to an Organization and can be targeted by Plugins and PluginPresets to deploy infrastructure components.
Example Cluster apiVersion: greenhouse.sap/v1alpha1 kind: Cluster metadata: name: example-cluster namespace: example-organization labels: metadata.greenhouse.sap/region: europe metadata.greenhouse.sap/environment: production spec: accessMode: direct Working with Clusters Setting Metadata Labels Cluster metadata is stored as Kubernetes resource labels with the metadata.greenhouse.sap/ prefix. Add or update metadata labels on an existing Cluster using kubectl:</description></item><item><title>ClusterTokenExpiry</title><link>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-token-expiry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-token-expiry/</guid><description>Alert Description This alert fires when the kubeconfig token for a cluster will expire in less than 20 hours.
What does this alert mean? Greenhouse has two ways of authenticating to Clusters:
OIDC trust - Preferred method, credential-less authentication Initial kubeconfig - Traditional method using kubeconfig credentials This alert only fires when initially a kubeconfig was provided. Greenhouse will create a Service Account on the target Cluster and keep a kubeconfig with a token scoped to this SA on the Greenhouse Cluster.</description></item><item><title>Contributing a Plugin</title><link>https://cloudoperators.dev/docs/contribute/plugins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/contribute/plugins/</guid><description>What is a Plugin? A Plugin is a key component that provides additional features, functionalities and may add new tools or integrations to the Greenhouse project.
They are developed de-centrally by the domain experts.
A YAML specification outlines the components that are to be installed and describes mandatory and optional, instance-specific configuration values.
It can consist of two main parts:
Juno micro frontend
This integrates with the Greenhouse dashboard, allowing users to interact with the Plugin&amp;rsquo;s features seamlessly within the Greenhouse UI.</description></item><item><title>OperatorReconcileDurationHigher10Min</title><link>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-reconcile-duration-higher-10min/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-reconcile-duration-higher-10min/</guid><description>Alert Description This alert fires when the average reconciliation duration exceeds 10 minutes for a controller for 15 minutes.
What does this alert mean? Controllers should reconcile resources quickly. When reconciliation takes longer than 10 minutes on average, it indicates performance issues that can lead to delays in applying configuration changes and resource state updates.
This could be due to:
High number of resources being managed Slow external API calls (e.</description></item><item><title>PluginConstantlyFailing</title><link>https://cloudoperators.dev/docs/operations/playbooks/plugin/plugin-constantly-failing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/plugin/plugin-constantly-failing/</guid><description>Alert Description This alert fires when a Plugin reconciliation is constantly failing for 15 minutes.
What does this alert mean? This alert indicates that the Greenhouse controller is repeatedly failing to reconcile the Plugin resource. Unlike a one-time failure, this suggests a persistent issue that prevents the Plugin from being properly managed.
Common causes include:
Invalid plugin option values that cannot be resolved Missing PluginDefinition reference Persistent Helm chart rendering or installation errors Invalid or missing secrets referenced in option values Cluster access issues that don&amp;rsquo;t resolve Configuration conflicts Diagnosis Get the Plugin Resource Retrieve the plugin resource to view its current status:</description></item><item><title>PluginDefinitions</title><link>https://cloudoperators.dev/docs/reference/components/plugindefinition/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/plugindefinition/</guid><description>A PluginDefinition brings either a UI application, a Helm chart deployment, or both, to the Greenhouse platform. The Helm chart for a PluginDefinition can be used to deploy infrastructure components to a Kubernetes cluster managed with Greenhouse. The PluginDefinition provides an opinionated way to configure, integrate and deploy these components with Greenhouse.
Example PluginDefinition Spec apiVersion: greenhouse.sap/v1alpha1 kind: PluginDefinition metadata: name: alerts namespace: example-organization spec: description: The Alerts Plugin consists of both Prometheus Alertmanager and Supernova, the holistic alert management UI displayName: Alerts docsURL: https://cloudoperators.</description></item><item><title>Product design</title><link>https://cloudoperators.dev/docs/architecture/product_design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/architecture/product_design/</guid><description>Introduction Vision &amp;ldquo;Greenhouse is an extendable Platform that enables Organizations to operate their Infrastructure in a compliant, efficient and transparent manner&amp;rdquo;
We want to build a Platform that is capable to integrate all the tools that are required to operate services in a cloud environment in a compliant, effective and transparent manner. Greenhouse aims to be the single stop for Operators of cloud-native infrastructure. The primary focus of Greenhouse is to provide a unified interface for all operational aspects and tools, providing a simple shared data model describing the support organization.</description></item><item><title>ProxyRequestDurationHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/proxy/proxy-request-duration-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/proxy/proxy-request-duration-high/</guid><description>Alert Description This alert fires when the 90th percentile latency of a proxy service exceeds 500ms for 15 minutes.
What does this alert mean? High latency in proxy services degrades user experience and can cause timeouts. When response times consistently exceed 500ms, it indicates performance issues that need investigation.
This could be due to:
Slow backend services Network latency to remote clusters or services Resource constraints on the proxy pod High traffic volume overwhelming the proxy Inefficient routing or processing logic DNS resolution delays Diagnosis Identify the Affected Proxy Service The alert label proxy identifies which proxy service has high latency:</description></item><item><title>Remote Cluster Connectivity with OIDC</title><link>https://cloudoperators.dev/docs/user-guides/cluster/oidc_connectivity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/cluster/oidc_connectivity/</guid><description>Content Overview OIDC Overview Preparation Onboard Troubleshooting This guide describes how to onboard an existing Kubernetes cluster to your Greenhouse Organization with OIDC configuration. If you don&amp;rsquo;t have a Greenhouse Organization yet, please reach out to the Greenhouse administrators.
While all members of an Organization can see existing Clusters, their management requires org-admin or cluster-admin privileges. See RBAC with the Organization namespace for details.
:information_source: The UI is currently in development.</description></item><item><title>SCIMAccessNotReady</title><link>https://cloudoperators.dev/docs/operations/playbooks/organization/scim-access-not-ready/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/organization/scim-access-not-ready/</guid><description>Alert Description This alert fires when the SCIM access for an organization is not ready for more than 15 minutes.
What does this alert mean? SCIM (System for Cross-domain Identity Management) is used by Greenhouse to synchronize team members from external identity providers. When SCIM access is not ready, it indicates that Greenhouse cannot properly communicate with the SCIM API to fetch and synchronize user and group information.
This could be due to:</description></item><item><title>TeamRoleBindingNotReady</title><link>https://cloudoperators.dev/docs/operations/playbooks/team/team-role-binding-not-ready/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/team/team-role-binding-not-ready/</guid><description>Alert Description This alert fires when a TeamRoleBinding has not been ready for more than 15 minutes.
What does this alert mean? A TeamRoleBinding in Greenhouse maps a Team to a TeamRole on one or more clusters. When a TeamRoleBinding is not ready, it means that the RBAC resources (RoleBindings or ClusterRoleBindings) could not be properly created on the target clusters, preventing team members from accessing the clusters with the intended permissions.</description></item><item><title>Teams</title><link>https://cloudoperators.dev/docs/getting-started/core-concepts/teams/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/core-concepts/teams/</guid><description>What are Teams? Teams in a Greenhouse Organization are used to group users by group claims on the token provided by the upstream identity provider (IdP).
This can be used, for example, for
organizational management access and permission management identifying Ownership of resources The Greenhouse UI is showing the members of a Team.
Team RBAC TeamRoles and TeamRoleBindings provide a mechanism to control the permissions of Teams to onboarded Clusters of an Organization.</description></item><item><title>Testing a Plugin</title><link>https://cloudoperators.dev/docs/user-guides/plugin/plugin-tests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/plugin/plugin-tests/</guid><description>Overview Plugin Testing Requirements All Plugins contributed to Plugin-Extensions repository should include comprehensive Helm Chart Tests using the bats/bats-detik testing framework. This ensures our Plugins are robust, deployable, and catch potential issues early in the development cycle.
What is bats/bats-detik?
The bats/bats-detik framework simplifies end-to-end (e2e) Testing in Kubernetes. It combines the Bash Automated Testing System (bats) with Kubernetes-specific assertions (detik). This allows you to write test cases using natural language-like syntax, making your tests easier to read and maintain.</description></item><item><title>Building Observability Architectures</title><link>https://cloudoperators.dev/docs/architecture/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/architecture/monitoring/</guid><description>The main terminologies used in this document can be found in core-concepts.
Introduction to Observability Observability in software and infrastructure is essential for operating a complex cloud environment. High-quality observability will enable teams to:
Detect and troubleshoot issues quickly, Maintain performance and reliability, Make data-driven improvements. Core Signals The three key signals of observability are metrics, logs, and traces, each providing unique insights contributing to a comprehensive view of a system&amp;rsquo;s health.</description></item><item><title>ClusterKubernetesVersionOutOfMaintenance</title><link>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-kubernetes-version-out-of-maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/cluster/cluster-kubernetes-version-out-of-maintenance/</guid><description>Alert Description This alert fires when a cluster is running a Kubernetes version that is out of maintenance.
What does this alert mean? Kubernetes versions have a limited support lifecycle. When a version goes out of maintenance, it no longer receives security patches or bug fixes. Running clusters on unsupported versions poses security risks and may lead to compatibility issues with newer features and tools.
This alert fires when a cluster is detected running Kubernetes version which are out of the official Kubernetes maintenance window.</description></item><item><title>Clusters</title><link>https://cloudoperators.dev/docs/getting-started/core-concepts/clusters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/core-concepts/clusters/</guid><description>What are Clusters? In the context of Greenhouse a Cluster represents a Kubernetes cluster that is onboarded to Greenhouse. Onboarded in this context means that Greenhouse can handle the management of role-based access control (RBAC) and the provisioning of operating tools (e.g. logging, monitoring, ingress etc.). The Greenhouse dashboard provides an overview of all onboarded clusters. Throughout Greenhouse the reference to a Cluster is used to target it for configuration and deployments.</description></item><item><title>Greenhouse Controller Development</title><link>https://cloudoperators.dev/docs/contribute/new-controller/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/contribute/new-controller/</guid><description>Bootstrap a new Controller Before getting started please make sure you have read the contribution guidelines.
Greenhouse is build using Kubebuilder as the framework for Kubernetes controllers. To create a new controller, you can use the kubebuilder CLI tool.
This project was generated with Kubebuilder v4. It&amp;rsquo;s necessary to create a symlink from cmd/greenhouse/main.go to cmd/main.go in to run the Kubebuider scaffolding commands.
ln $(pwd)/cmd/greenhouse/main.go $(pwd)/cmd/main.go To create a new controller, run the following command:</description></item><item><title>IDProxyErrorsHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/proxy/idproxy-errors-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/proxy/idproxy-errors-high/</guid><description>Alert Description This alert fires when more than 10% of IDProxy operations result in errors for 15 minutes.
What does this alert mean? The IDProxy handles authentication and identity proxying for Greenhouse. High error rates indicate authentication or identity management issues that prevent users from accessing resources.
This could be due to:
Issues with the identity provider (IdP) integration OIDC/OAuth configuration problems Network connectivity to the IdP Invalid or expired tokens Misconfigured callback URLs or client credentials Resource constraints on the IDProxy pod Diagnosis Check IDProxy Metrics Access the Prometheus instance monitoring your Greenhouse cluster and query the IDProxy request metrics using the following PromQL queries:</description></item><item><title>Installation</title><link>https://cloudoperators.dev/docs/getting-started/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/install/</guid><description>This section provides a step-by-step guide to install Greenhouse on a Gardener shoot cluster.
Prerequisites Before you start the installation, make sure you have the following prerequisites:
Helm &amp;amp; Kubernetes CLI OAuth2/OpenID provider (see Authentik) Gardener Shoot Cluster configured to use the OIDC provider nginx-ingress deployed in the cluster Installation To install Greenhouse on your Gardener shoot cluster, follow these steps:
Create a values file called values.yaml with the following content:</description></item><item><title>Cluster offboarding</title><link>https://cloudoperators.dev/docs/user-guides/cluster/offboarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/cluster/offboarding/</guid><description>Content Overview Pre-requisites Off-boarding Troubleshooting This guides describes how to off-board an existing Kubernetes cluster in your Greenhouse organization.
While all members of an organization can see existing clusters, their management requires org-admin or cluster-admin privileges. See RBAC with the Organization namespace for details.
:information_source: The UI is currently in development. For now this guide describes the onboarding workflow via command line. Pre-requisites Off-boarding a Cluster in Greenhouse requires authenticating to the greenhouse cluster via kubeconfig file:</description></item><item><title>Operational Processes</title><link>https://cloudoperators.dev/docs/getting-started/operations/processes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/operations/processes/</guid><description>Operational Processes in Greenhouse Greenhouse provides a couple of predefined operational processes.
Operational processes facilitated via Greenhouse heavily rely on the Ownership principle. It is used to route operational tasks to Support Groups.
Examples for these operational tasks are:
Alert routing based on metrics Lifecycle management of k8s Clusters Security posture and vulnerability patch management Secret rotation and management Labels Used Greenhouse focuses on labels in three different places:
On resources (e.</description></item><item><title>OperatorWorkqueueNotDrained</title><link>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-workqueue-not-drained/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/operator/operator-workqueue-not-drained/</guid><description>Alert Description This alert fires when a controller&amp;rsquo;s workqueue backlog is not getting drained for 15 minutes.
What does this alert mean? Each controller uses a workqueue to process reconciliation requests. When the workqueue depth continues to grow rather than being drained, it indicates that the controller cannot keep up with the incoming reconciliation requests.
This could be due to:
High rate of resource changes overwhelming the controller Slow reconciliation operations (see also OperatorReconcileDurationHigher10Min) Controller pod being resource-constrained Deadlocks or stuck reconciliation loops External systems being slow or unavailable Diagnosis Identify the Affected Controller The alert label controller identifies the controller workqueue that is not draining.</description></item><item><title>Ownership</title><link>https://cloudoperators.dev/docs/getting-started/operations/ownership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/operations/ownership/</guid><description>What is Ownership within Greenhouse Ownership in Greenhouse is the combination of two of the core features:
User and Organization management via Teams Deployment of resources (Plugins, TeamRoleBindings) to remote Clusters Greenhouse provides a 1:1 relationship between a Team and
PluginPresets Plugins Clusters TeamRoleBindings Secrets Within the context of Greenhouse this relationship is called Ownership.
Why Ownership of Resources Operational processes facilitated via Greenhouse rely on Ownership:
By identifying the owner of a resource it is possible to route operational tasks on the resource to the owner.</description></item><item><title>Plugin deployment</title><link>https://cloudoperators.dev/docs/user-guides/plugin/plugin-deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/plugin/plugin-deployment/</guid><description>Before you begin This guides describes how to configure and deploy a Greenhouse plugin.
apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: kube-monitoring-martin namespace: &amp;lt;organization namespace&amp;gt; # same namespace in remote cluster for resources spec: clusterName: &amp;lt;name of the remote cluster &amp;gt; disabled: false displayName: &amp;lt;any human readable name&amp;gt; pluginDefinition: &amp;lt;pluginDefinition name&amp;gt; releaseNamespace: &amp;lt;namespace&amp;gt; # namespace in remote cluster where the plugin is deployed releaseName: &amp;lt;helm release name&amp;gt; # name of the helm release that will be created optionValues: - name: &amp;lt;from the plugin options&amp;gt; value: &amp;lt;from the plugin options&amp;gt; - .</description></item><item><title>PluginPresets</title><link>https://cloudoperators.dev/docs/reference/components/pluginpreset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/pluginpreset/</guid><description>A PluginPreset is used to configure Plugins for a set of Clusters. This allows administrators to define standard configurations for Clusters in the same environment or with similar requirements. Greenhouse will create Plugins based on the PluginPreset for each Cluster that matches the specified selector.
Example PluginPreset Spec apiVersion: greenhouse.sap/v1alpha1 kind: PluginPreset metadata: name: perses-preset namespace: example-organization spec: clusterOptionOverrides: - clusterName: example-cluster overrides: - name: perses.serviceMonitor.selfMonitor value: true - name: perses.</description></item><item><title>Registry Overrides</title><link>https://cloudoperators.dev/docs/user-guides/organization/registry-overrides/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/organization/registry-overrides/</guid><description>Overview Greenhouse supports overriding registry sources for both Helm charts and container images. This allows pulling resources from alternative registries instead of their original sources.
Registry overrides operate at two levels:
Helm chart repositories: Configured per Catalog Container image registries: Configured per Organization Helm Chart Registry Overrides Helm chart repositories can be overridden by configuring the repository field in the overrides array of a Catalog resource.
Configuration apiVersion: greenhouse.sap/v1alpha1 kind: Catalog metadata: name: my-catalog namespace: my-organization spec: sources: - repository: https://github.</description></item><item><title>Authorization Webhook</title><link>https://cloudoperators.dev/docs/getting-started/operations/authorization-webhook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/operations/authorization-webhook/</guid><description>Overview The Greenhouse Authorization Webhook enforces fine-grained access control on Greenhouse resources based on Team ownership. The webhook checks if a user&amp;rsquo;s support-group claims match the greenhouse.sap/owned-by label on resources before granting access.
This enables Teams to have elevated permissions on resources they own, while maintaining visibility across the Organization.
Why This Exists Greenhouse uses a single namespace per Organization for all resources. While this simplifies management, it requires a mechanism to allow Teams to manage their own resources without unrestricted access to resources owned by other Teams.</description></item><item><title>Managing Plugins for multiple clusters</title><link>https://cloudoperators.dev/docs/user-guides/plugin/plugin-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/plugin/plugin-management/</guid><description>Managing Plugins for multiple clusters This guide describes how to configure and deploy a Greenhouse Plugin with the same configuration into multiple clusters.
The PluginPreset resource is used to create and deploy Plugins with a the identical configuration into multiple clusters. The list of clusters the Plugins will be deployed to is determind by a LabelSelector.
As a result, whenever a cluster, that matches the ClusterSelector is onboarded or offboarded, the Controller for the PluginPresets will take care of the Plugin Lifecycle.</description></item><item><title>PluginDefinitions, Plugins and PluginPresets</title><link>https://cloudoperators.dev/docs/getting-started/core-concepts/plugins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/getting-started/core-concepts/plugins/</guid><description>What are PluginDefinitions and Plugins? PluginDefinitons and Plugins are the Greenhouse way to extend the core functionality with domain specific features. PluginDefinitions, as the name suggests, are the definition of a Plugin, whereas a Plugin is a concrete instance of a PluginDefinition that is deployed to a Cluster.
The PluginDefinitions are shared between all Organizations in Greenhouse. A PluginDefinition can include a frontend, that is displayed in the Greenhouse dashboard and/or a backend component.</description></item><item><title>Plugins</title><link>https://cloudoperators.dev/docs/reference/components/plugin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/plugin/</guid><description>A Plugin is an instance of a PluginDefinition and is used to deploy infrastructure components such as observability, compliance or system components to a Kubernetes cluster managed with Greenhouse. A Plugin provides the specific configuration for deploying the Helm chart associated with the referenced PluginDefinition to a specific cluster.
Example Plugin Spec apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: alerts-plugin namespace: example-organization spec: clusterName: example-cluster displayName: Example Alerts Plugin optionValues: - name: image.</description></item><item><title>WebhookLatencyHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/operator/webhook-latency-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/operator/webhook-latency-high/</guid><description>Alert Description This alert fires when the 90th percentile latency of a Greenhouse webhook exceeds 200ms for 15 minutes.
What does this alert mean? Webhooks are admission controllers that validate or mutate resources before they are persisted to etcd. High webhook latency can slow down all API requests for the resources the webhook handles, affecting user operations and controller reconciliations.
This could be due to:
Complex validation or mutation logic External API calls from the webhook (e.</description></item><item><title>Catalogs</title><link>https://cloudoperators.dev/docs/reference/components/catalog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/catalog/</guid><description>A Catalog is a collection of PluginDefinitions that can be made available to Organizations within Greenhouse. Catalogs allow organization admins to manage the lifecycle of PluginDefinitions by controlling which version of a PluginDefinition is deployed to their cluster fleet.
The Catalog API is currently in alpha and is still under active development and is subjected to change.
Example The following is an example of a Greenhouse Catalog that reconciles the PluginDefinition manifests stored in a Git Repository.</description></item><item><title>Using Metadata Labels and CEL Expressions</title><link>https://cloudoperators.dev/docs/user-guides/plugin/metadata-expressions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/plugin/metadata-expressions/</guid><description>Overview Greenhouse allows you to define metadata labels on Clusters and use them in PluginPreset configurations through CEL (Common Expression Language) expressions. This enables dynamic configuration of Plugins based on cluster-specific attributes like region, environment, or any custom metadata.
For information on setting metadata labels on Clusters, see Setting Metadata Labels.
Using Expressions with PluginPresets Expressions are particularly powerful with PluginPresets, allowing you to deploy Plugins to multiple clusters with cluster-specific configurations:</description></item><item><title>Plugin Catalog</title><link>https://cloudoperators.dev/docs/user-guides/plugin/catalog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/plugin/catalog/</guid><description>Before you begin This guides describes how to explore the catalog of Greenhouse PluginDefinitions.
While all members of an organization can see the Plugin catalog, enabling, disabling and configuration PluginDefinitions for an organization requires organization admin privileges.
Exploring the PluginDefinition catalog The PluginDefinition resource describes the backend and frontend components as well as mandatory configuration options of a Greenhouse extension.
While the PluginDefinition catalog is managed by the Greenhouse administrators and the respective domain experts, administrators of an organization can configure and tailor Plugins to their specific requirements.</description></item><item><title>WebhookErrorsHigh</title><link>https://cloudoperators.dev/docs/operations/playbooks/operator/webhook-errors-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/operations/playbooks/operator/webhook-errors-high/</guid><description>Alert Description This alert fires when more than 10% of webhook operations fail for a webhook for 15 minutes.
What does this alert mean? Webhooks validate or mutate resources before they are persisted. When a webhook&amp;rsquo;s error rate exceeds 10%, it indicates that many API requests for the affected resources are being rejected or failing.
This could be due to:
Invalid resource configurations being submitted External dependencies being unavailable (e.g., clusters, teams, secrets) Permission issues in webhook operations Bugs in the webhook logic Network issues preventing webhook from accessing required resources Diagnosis Identify the Affected Webhook and Resource The alert label webhook identifies which webhook has high error rates.</description></item><item><title/><link>https://cloudoperators.dev/docs/architecture-decision-records/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/architecture-decision-records/readme/</guid><description>All ADRs have been migrated to cloudoperators/documentation.</description></item><item><title/><link>https://cloudoperators.dev/docs/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/readme/</guid><description>Greenhouse documentation This directory contains the documentation for Greenhouse, the Day-2 operations platform.
All directories containing an _index.md with the following content are synchronized to the website.
--- title: &amp;#34;&amp;lt;title&amp;gt;&amp;#34; linkTitle: &amp;#34;&amp;lt;link&amp;gt;&amp;#34; landingSectionIndex: &amp;lt;true|false&amp;gt; description: &amp;gt; &amp;lt;Long description of the content&amp;gt; --- You can execute the following command to serve the documentation locally:
make serve-docs</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/agentgateway-crds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/agentgateway-crds/</guid><description> agentgateway-crds Installs the Custom Resource Definitions (CRDs) required by the agentgateway controller:
AgentgatewayBackend — defines MCP, LLM, agent, and static backends AgentgatewayPolicy — configures JWT authentication, authorization, CORS, and traffic policies AgentgatewayParameters — GatewayClass provisioning parameters AgentgatewayModel — AI model routing (experimental) Prerequisites Kubernetes Gateway API CRDs must be installed first (k8s-gateway-api plugin) Usage Install this plugin before the agentgateway plugin. It has no configurable options.
Links agentgateway documentation agentgateway GitHub</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/agentgateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/agentgateway/</guid><description>agentgateway Deploys the agentgateway controller — an AI-native reverse proxy for MCP (Model Context Protocol) and A2A protocols. It runs as a Kubernetes controller using the Kubernetes Gateway API.
Features MCP federation — multiplex multiple MCP servers behind a single endpoint via AgentgatewayBackend JWT authentication — validate tokens against any OIDC provider via AgentgatewayPolicy Per-tool authorization — CEL-based rules to control which tools a caller can invoke LLM routing — proxy LLM requests with guardrails, circuit breakers, and rate limiting OpenTelemetry — built-in tracing and metrics Prerequisites k8s-gateway-api plugin (Kubernetes Gateway API CRDs) agentgateway-crds plugin (agentgateway CRDs) Installation order k8s-gateway-api → agentgateway-crds → agentgateway Configuration Option Description Default image.</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/heureka-scanner-k8s-assets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/heureka-scanner-k8s-assets/</guid><description>The Kubernetes Assets Scanner is a tool designed to scan and collect information about services, pods, and containers running in a Kubernetes cluster.
Example Plugin apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: heureka-scanner-k8s-assets namespace: &amp;lt;your-greenhouse-namespace&amp;gt; spec: pluginDefinition: heureka-scanner-k8s-assets displayName: &amp;#34;Heureka K8s Assets Scanner&amp;#34; clusterName: &amp;lt;target-cluster&amp;gt; releaseNamespace: &amp;lt;target-namespace&amp;gt; disabled: false optionValues: - name: scanner.api_token valueFrom: secret: name: &amp;lt;name&amp;gt; key: &amp;lt;key&amp;gt; - name: scanner.heureka_url value: &amp;#34;https://your-heureka-api.example.com&amp;#34; - name: scanner.schedule value: &amp;#34;0 0 * * *&amp;#34; - name: scanner.</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/kgateway-crds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/kgateway-crds/</guid><description> kgateway-crds Installs the Custom Resource Definitions (CRDs) required by the kgateway controller.
Prerequisites k8s-gateway-api plugin (Kubernetes Gateway API CRDs) Installation order k8s-gateway-api → kgateway-crds → kgateway Links kgateway documentation Install guide</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/kgateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/kgateway/</guid><description>kgateway Deploys the kgateway control plane — a Kubernetes-native API gateway built on Envoy and the Gateway API. Originally created by Solo.io as Gloo.
Features Gateway API native — full support for HTTPRoute, TCPRoute, and other Gateway API resources Envoy-based — high-performance data plane powered by Envoy proxy Advanced traffic management — retries, timeouts, traffic splitting, and header manipulation Prerequisites k8s-gateway-api plugin (Kubernetes Gateway API CRDs) kgateway-crds plugin (kgateway CRDs) Installation order k8s-gateway-api → kgateway-crds → kgateway Configuration Option Description Default image.</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/oidc-discovery-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/oidc-discovery-access/</guid><description>OIDC Discovery Access This plugin grants anonymous access to OIDC discovery endpoints on target clusters by creating a ClusterRoleBinding that binds the system:anonymous user to the built-in system:service-account-issuer-discovery ClusterRole.
Purpose Enables anonymous users to access OIDC discovery endpoints, which is required for certain authentication flows and service account token validation.
Resources Created ClusterRoleBinding: expose-oidc-endpoints Subject: system:anonymous user RoleRef: system:service-account-issuer-discovery ClusterRole Documentation For more information about service account issuer discovery, see the Kubernetes documentation.</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/owner-label-injector/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/owner-label-injector/</guid><description>Owner Label Injector Overview The Owner Label Injector is a Kubernetes mutating admission webhook that automatically ensures every relevant resource in your cluster carries standardized owner labels. These labels enable:
Incident Routing - Direct alerts to the right team Cost Allocation - Track resource ownership for chargeback SLO Roll-ups - Aggregate service-level objectives by owner Cleanup Automation - Identify orphaned resources Labels Injected The webhook automatically adds these labels to resources:</description></item><item><title/><link>https://cloudoperators.dev/docs/reference/catalog/permission-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/permission-manager/</guid><description>Permission Manager Overview Permission Manager is a Kubernetes operator for managing GitHub and Kubernetes permissions as code. It bridges the gap between requestable permissions in your Identity Provider and the actual access provisioned on downstream systems — expressed as Kubernetes CRDs, versioned in Git, and reconciled by controllers.
What It Does Kubernetes RBAC — provisions ClusterRoles and RoleBindings on remote clusters via Greenhouse kubeconfigs GitHub team permissions — creates GithubTeam/GithubTeamRepository resources (consumed by repo-guard) Greenhouse team bindings — creates Team and TeamRoleBinding resources Requirements Greenhouse cluster — provides Cluster CRDs and kubeconfig Secrets for remote cluster access repo-guard — required when the GitHub provider is enabled Links Source Code: github.</description></item><item><title>Alerts</title><link>https://cloudoperators.dev/docs/reference/catalog/alerts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/alerts/</guid><description>Learn more about the alerts plugin. Use it to activate Prometheus alert management for your Greenhouse organisation.
The main terminologies used in this document can be found in core-concepts.
Overview This Plugin includes a preconfigured Prometheus Alertmanager, which is deployed and managed via the Prometheus Operator, and Supernova, an advanced user interface for Prometheus Alertmanager. Certificates are automatically generated to enable sending alerts from Prometheus to Alertmanager. These alerts can too be sent as Slack notifications with a provided set of notification templates.</description></item><item><title>Audit Logs Plugin</title><link>https://cloudoperators.dev/docs/reference/catalog/audit-logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/audit-logs/</guid><description>Learn more about the Audit Logs Plugin. Use it to enable the ingestion, collection and export of telemetry signals (logs and metrics) for your Greenhouse cluster.
The main terminologies used in this document can be found in core-concepts.
Overview OpenTelemetry is an observability framework and toolkit for creating and managing telemetry data such as metrics, logs and traces. Unlike other observability tools, OpenTelemetry is vendor and tool agnostic, meaning it can be used with a variety of observability backends, including open source tools such as OpenSearch and Prometheus.</description></item><item><title>Blackbox Exporter</title><link>https://cloudoperators.dev/docs/reference/catalog/blackbox-exporter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/blackbox-exporter/</guid><description>This Plugin provides the Blackbox Exporter which allows blackbox probing of endpoints over HTTP, HTTPS, DNS, TCP, ICMP and gRPC.</description></item><item><title>Cert-manager</title><link>https://cloudoperators.dev/docs/reference/catalog/cert-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/cert-manager/</guid><description>This Plugin provides the cert-manager to automate the management of TLS certificates.
Configuration This section highlights configuration of selected Plugin features.
All available configuration options are described in the plugin.yaml.
Ingress shim An Ingress resource in Kubernetes configures external access to services in a Kubernetes cluster.
Securing ingress resources with TLS certificates is a common use-case and the cert-manager can be configured to handle these via the ingress-shim component.
It can be enabled by deploying an issuer in your organization and setting the following options on this plugin.</description></item><item><title>Creating an organization</title><link>https://cloudoperators.dev/docs/user-guides/organization/creation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/organization/creation/</guid><description>Before you begin This guides describes how to create an organization in Greenhouse.
Creating an organization An organization within the Greenhouse cloud operations platform is a separate unit with its own configuration, teams, and resources tailored to their requirements. These organizations can represent different teams, departments, or projects within an enterprise, and they operate independently within the Greenhouse platform. They allow for the isolation and management of resources and configurations specific to their needs.</description></item><item><title>Decentralized Observer of Policies (Violations)</title><link>https://cloudoperators.dev/docs/reference/catalog/doop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/doop/</guid><description>This directory contains the Greenhouse plugin for the Decentralized Observer of Policies (DOOP).
DOOP To perform automatic validations on Kubernetes objects, we run a deployment of OPA Gatekeeper in each cluster. This dashboard aggregates all policy violations reported by those Gatekeeper instances.</description></item><item><title>Designate Ingress CNAME operator (DISCO)</title><link>https://cloudoperators.dev/docs/reference/catalog/disco/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/disco/</guid><description>This Plugin provides the Designate Ingress CNAME operator (DISCO) to automate management of DNS entries in OpenStack Designate for Ingress and Services in Kubernetes.</description></item><item><title>DigiCert issuer</title><link>https://cloudoperators.dev/docs/reference/catalog/digicert-issuer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/digicert-issuer/</guid><description>This Plugin provides the digicert-issuer, an external Issuer extending the cert-manager with the DigiCert cert-central API.</description></item><item><title>DOOP API</title><link>https://cloudoperators.dev/docs/reference/catalog/doop-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/doop-api/</guid><description>Backend API for the DOOP (Decentralized Observer of Policies) system. Reads Gatekeeper audit reports aggregated by per-cluster doop-analyzer pods from OpenStack Swift and serves them to the doop UI plugin.</description></item><item><title>External DNS</title><link>https://cloudoperators.dev/docs/reference/catalog/external-dns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/external-dns/</guid><description>This Plugin provides the external DNS operator which synchronizes exposed Kubernetes Services, Ingresses, Gateway HttpRoutes, TLSRoutes with DNS providers. Refer to chart documentation for available configuration options.</description></item><item><title>External Secrets</title><link>https://cloudoperators.dev/docs/reference/catalog/external-secrets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/external-secrets/</guid><description>This Plugin provides the External Secrets Operator (ESO) to synchronize secrets from external secret providers (e.g. AWS Secrets Manager, Vault, Azure Key Vault, GCP Secret Manager) into Kubernetes Secret resources.
Configuration This section highlights configuration of selected Plugin features. Refer to the upstream chart documentation for all available configuration options.
Option Type Default Description installCRDs bool true Install and upgrade CRDs through the Helm chart replicaCount int 1 Replicas for the controller serviceMonitor.</description></item><item><title>Gatekeeper DOOP</title><link>https://cloudoperators.dev/docs/reference/catalog/gatekeeper-doop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/gatekeeper-doop/</guid><description>Per-cluster components of DOOP for OPA Gatekeeper. Runs alongside the gatekeeper operator on every managed cluster:
doop-analyzer subscribes to Gatekeeper audit reports, deduplicates violations via merging rules, and uploads the aggregate to an OpenStack Swift container that the central doop-api plugin then serves. doop-image-checker is an HTTP service called by Rego policies (via http.send) to check container image vulnerability and provenance against a container registry that exposes the required metadata. helm-manifest-parser is an HTTP service that decodes Helm release Secret blobs into JSON so policies can reason about Helm-managed resources.</description></item><item><title>Ingress NGINX</title><link>https://cloudoperators.dev/docs/reference/catalog/ingress-nginx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/ingress-nginx/</guid><description>This plugin contains the ingress NGINX controller.
Example To instantiate the plugin create a Plugin like:
apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: ingress-nginx spec: pluginDefinition: ingress-nginx-v4.4.0 values: - name: controller.service.loadBalancerIP value: 1.2.3.4</description></item><item><title>Kafka</title><link>https://cloudoperators.dev/docs/reference/catalog/kafka/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/kafka/</guid><description>Kafka Plugin The Kafka plugin sets up an Apache Kafka environment using the Strimzi Kafka Operator, automating deployment, provisioning, management, and orchestration of Kafka clusters with KRaft mode (without ZooKeeper).
Overview Apache Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant, real-time data processing. The Strimzi Kafka Operator simplifies the management of Kafka clusters on Kubernetes.
Components included in this Plugin: Strimzi Kafka Operator Apache Kafka Cluster Management (KRaft mode) Kafka Exporter for Metrics (optional) Cruise Control for Cluster Optimization (optional) Entity Operator for Topic and User Management Note More configurations will be added over time, and contributions of custom configurations are highly appreciated.</description></item><item><title>Kubernetes Gateway API</title><link>https://cloudoperators.dev/docs/reference/catalog/k8s-gateway-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/k8s-gateway-api/</guid><description>This plugin installs the Kubernetes Gateway API CRDs (standard channel) into a cluster.
The Gateway API is the next-generation Kubernetes ingress, load balancing, and service mesh API. It is designed to be expressive, extensible, and role-oriented.
Example To instantiate the plugin create a Plugin like:
apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: k8s-gateway-api spec: pluginDefinitionRef: name: k8s-gateway-api</description></item><item><title>Kubernetes Monitoring</title><link>https://cloudoperators.dev/docs/reference/catalog/kube-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/kube-monitoring/</guid><description>Learn more about the kube-monitoring plugin. Use it to activate Kubernetes monitoring for your Greenhouse cluster.
The main terminologies used in this document can be found in core-concepts.
Overview Observability is often required for operation and automation of service offerings. To get the insights provided by an application and the container runtime environment, you need telemetry data in the form of metrics or logs sent to backends such as Prometheus or OpenSearch.</description></item><item><title>Logs Plugin</title><link>https://cloudoperators.dev/docs/reference/catalog/logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/logs/</guid><description>Learn more about the Logs Plugin. Use it to enable the ingestion, collection and export of telemetry signals (logs and metrics) for your Greenhouse cluster.
The main terminologies used in this document can be found in core-concepts.
Overview OpenTelemetry is an observability framework and toolkit for creating and managing telemetry data such as metrics, logs and traces. Unlike other observability tools, OpenTelemetry is vendor and tool agnostic, meaning it can be used with a variety of observability backends, including open source tools such as OpenSearch and Prometheus.</description></item><item><title>Logshipper</title><link>https://cloudoperators.dev/docs/reference/catalog/logshipper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/logshipper/</guid><description>This Plugin is intended for shipping container and systemd logs to an Elasticsearch/ OpenSearch cluster. It uses fluentbit to collect logs. The default configuration can be found under chart/templates/fluent-bit-configmap.yaml.
Components included in this Plugin:
fluentbit Owner @ivogoman Parameters Name Description Value fluent-bit.parser Parser used for container logs. [docker|cri] labels &amp;ldquo;cri&amp;rdquo; fluent-bit.backend.opensearch.host Host for the Elastic/OpenSearch HTTP Input fluent-bit.backend.opensearch.port Port for the Elastic/OpenSearch HTTP Input fluent-bit.backend.opensearch.http_user Username for the Elastic/OpenSearch HTTP Input fluent-bit.</description></item><item><title>NetApp Monitoring</title><link>https://cloudoperators.dev/docs/reference/catalog/netapp-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/netapp-monitoring/</guid><description>Learn more about the netapp-monitoring plugin. Use it to deploy Harvest for monitoring NetApp storage filers via Prometheus metrics.
Overview This plugin deploys a monitoring stack for NetApp storage systems using NetApp Harvest. Harvest collects performance, capacity, and health metrics from ONTAP systems and exposes them via a Prometheus exporter.
The chart includes a service discovery component (netappsd) that automatically discovers NetApp filers from Netbox and spawns Harvest instances to collect metrics.</description></item><item><title>NVIDIA GPU Operator</title><link>https://cloudoperators.dev/docs/reference/catalog/nvidia-gpu-operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/nvidia-gpu-operator/</guid><description>This Plugin provides the NVIDIA GPU Operator which automates the management of NVIDIA software components needed to provision GPUs in Kubernetes clusters.
The bundled node-feature-discovery subchart is enabled by default and can be disabled via nfd.enabled if NFD is already installed separately.</description></item><item><title>OPA Gatekeeper</title><link>https://cloudoperators.dev/docs/reference/catalog/gatekeeper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/gatekeeper/</guid><description>This Plugin provides OPA Gatekeeper, a policy controller for Kubernetes based on the Open Policy Agent constraint framework.
Constraints Only the operator is deployed. No ConstraintTemplate or Constraint resources are bundled.
Constraints can be applied separately, or installed via the gatekeeper-config PluginDefinition (planned).
Enforcement Enforcement mode is set per Constraint via spec.enforcementAction. Valid values: dryrun (log only), warn (return warning), deny (block).
Configuration See plugindefinition.yaml for available options.
Webhook scoping By default the validating webhook intercepts all API groups (*).</description></item><item><title>OPA Gatekeeper Config</title><link>https://cloudoperators.dev/docs/reference/catalog/gatekeeper-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/gatekeeper-config/</guid><description>Deploys OPA Gatekeeper ConstraintTemplates and Constraints for Kubernetes admission control. Provides a library of universal admission policies that can be enabled and tuned per cluster.
Requires the OPA Gatekeeper PluginDefinition to be installed on the cluster.
Policies Policy Description highCpuRequests Flags workloads that request more than maxCpu cores in total across containers and initContainers. unmanagedPods Flags Pods that have no ownerReference (i.e. not managed by a Deployment, DaemonSet, etc.). forbiddenClusterwideObjects Restricts which MutatingWebhookConfiguration and ValidatingWebhookConfiguration objects may exist on the cluster via an allowlist of webhook names.</description></item><item><title>OpenSearch</title><link>https://cloudoperators.dev/docs/reference/catalog/opensearch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/opensearch/</guid><description>OpenSearch Plugin The OpenSearch plugin sets up an OpenSearch environment using the OpenSearch Operator, automating deployment, provisioning, management, and orchestration of OpenSearch clusters and dashboards. It functions as the backend for logs gathered by collectors such as OpenTelemetry collectors, enabling storage and visualization of logs for Greenhouse-onboarded Kubernetes clusters.
The main terminologies used in this document can be found in core-concepts.
Overview OpenSearch is a distributed search and analytics engine designed for real-time log and event data analysis.</description></item><item><title>Perses</title><link>https://cloudoperators.dev/docs/reference/catalog/perses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/perses/</guid><description>Table of Contents Table of Contents Overview Disclaimer Quick Start Configuration Create a custom dashboard Manage Resources with ConfigMaps Recommended folder structure Manage Resources with OCI Artifacts Learn more about the Perses Plugin. Use it to visualize Prometheus/Thanos metrics for your Greenhouse remote cluster.
The main terminologies used in this document can be found in core-concepts.
Overview Observability is often required for the operation and automation of service offerings. Perses is a CNCF project and it aims to become an open-standard for dashboards and visualization.</description></item><item><title>Prometheus</title><link>https://cloudoperators.dev/docs/reference/catalog/prometheus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/prometheus/</guid><description>Learn more about the prometheus plugin. Use it to deploy a single Prometheus for your Greenhouse cluster.
The main terminologies used in this document can be found in core-concepts.
Overview Observability is often required for operation and automation of service offerings. To get the insights provided by an application and the container runtime environment, you need telemetry data in the form of metrics or logs sent to backends such as Prometheus or OpenSearch.</description></item><item><title>Role-based access control on remote clusters</title><link>https://cloudoperators.dev/docs/user-guides/team/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/team/rbac/</guid><description>Greenhouse Team RBAC user guide Role-Based Access Control (RBAC) in Greenhouse allows Organization administrators to manage the access of Teams on Clusters. TeamRole and TeamRoleBindings are used to manage the RBAC on remote Clusters. These two Custom Resource Definitions allow for fine-grained control over the permissions of each Team within each Cluster and Namespace.
Contents Before you begin Overview Defining TeamRoles Example Seeded default TeamRoles Defining TeamRoleBindings Assigning a TeamRole to a single Team on a Cluster Assigning a TeamRole to multiple Teams on a Cluster Assigning TeamRoles to Teams on multiple Clusters Aggregating TeamRoles Migrating from the deprecated teamRef field Updating TeamRoleBindings Before you begin This guide is intended for users who want to manage Role-Based Access Control (RBAC) for Teams on remote clusters managed by Greenhouse.</description></item><item><title>Reloader</title><link>https://cloudoperators.dev/docs/reference/catalog/reloader/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/reloader/</guid><description>This Plugin provides the Reloader to automate triggering rollouts of workloads whenever referenced Secrets or ConfigMaps are updated.</description></item><item><title>Repo Guard</title><link>https://cloudoperators.dev/docs/reference/catalog/repo-guard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/repo-guard/</guid><description>Repo Guard automates GitHub organization management using Kubernetes Custom Resources (CRDs).</description></item><item><title>Service exposure test</title><link>https://cloudoperators.dev/docs/reference/catalog/exposed-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/exposed-services/</guid><description>This Plugin is just providing a simple exposed service for manual testing.
By adding the following label or annotation to a service it will become accessible from the central greenhouse system via a service proxy:
Label (legacy, transitioning to annotation): greenhouse.sap/expose: &amp;quot;true&amp;quot;
Annotation: greenhouse.sap/expose: &amp;quot;true&amp;quot;
During the transition period, both label and annotation are supported.
This plugin create an nginx deployment with an exposed service for testing.
Configuration Specific port By default expose would always use the first port.</description></item><item><title>Shoot-grafter</title><link>https://cloudoperators.dev/docs/reference/catalog/shoot-grafter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/shoot-grafter/</guid><description>Example Plugin apiVersion: greenhouse.sap/v1alpha1 kind: Plugin metadata: name: shoot-grafter spec: displayName: Shoot Grafter optionValues: - name: image.registry value: ghcr.io/cloudoperators pluginDefinitionRef: kind: ClusterPluginDefinition name: shoot-grafter releaseName: shoot-grafter releaseNamespace: greenhouse # shoot-grafter is a ClusterPluginDefinition Read up the shoot-grafter documentation.</description></item><item><title>Supernova</title><link>https://cloudoperators.dev/docs/reference/catalog/supernova/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/supernova/</guid><description>Learn more about the Supernova Plugin, an advanced user interface for Prometheus Alertmanager.
The main terminologies used in this document can be found in core-concepts.
Overview This plugin provides the stand alone UI application Supernova and needs an Prometheus Alertmanager to be queried. Provisioning of the Alertmanager is not part of this plugin.
Supernova This Plugin usually is deployed on the greenhouse central cluster, one per greenhouse organization.
Disclaimer This is not meant to be a comprehensive package that covers all scenarios.</description></item><item><title>Team creation</title><link>https://cloudoperators.dev/docs/user-guides/team/create/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/team/create/</guid><description>Before you begin This guides describes how to create a team in your Greenhouse organization.
While all members of an organization can see existing teams, their management requires organization admin privileges.
Creating a team The team resource is used to structure members of your organization and assign fine-grained access and permission levels.
Each Team must be backed by a group in the identity provider (IdP) of the Organization.
IdP group should be set on the mappedIdPGroup field in Team configuration.</description></item><item><title>Managing team-owned resources</title><link>https://cloudoperators.dev/docs/user-guides/team/authorization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/user-guides/team/authorization/</guid><description>Overview Greenhouse resources (Plugin, PluginPreset, Cluster, TeamRoleBinding) can be owned by a Team. Team members receive elevated access (get, update, patch, delete) on resources their Team owns — without requiring organization-wide admin permissions.
This is enforced by the Authorization Webhook, which checks that the requesting user&amp;rsquo;s IdP token contains a support-group: claim matching the resource&amp;rsquo;s greenhouse.sap/owned-by label.
Prerequisites Before your Team can use elevated access, two things must be in place:</description></item><item><title>TeamRoleBinding</title><link>https://cloudoperators.dev/docs/reference/components/teamrolebinding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/components/teamrolebinding/</guid><description>A TeamRoleBinding assigns a TeamRole to one or more Teams (and/or individual usernames) for a set of Clusters and optionally a set of Namespaces. The Greenhouse controller translates a TeamRoleBinding into native Kubernetes rbacv1 resources on each targeted remote cluster.
Example TeamRoleBinding Spec apiVersion: greenhouse.sap/v1alpha2 kind: TeamRoleBinding metadata: name: example-team-pod-read namespace: example-organization spec: teamRoleRef: pod-read teamRefs: - example-team - dev-team clusterSelector: labelSelector: matchLabels: environment: production namespaces: - monitoring - logging createNamespaces: false Writing a TeamRoleBinding Spec .</description></item><item><title>Thanos</title><link>https://cloudoperators.dev/docs/reference/catalog/thanos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/thanos/</guid><description>Learn more about the Thanos Plugin. Use it to enable extended metrics retention and querying across Prometheus servers and Greenhouse clusters.
The main terminologies used in this document can be found in core-concepts.
Overview Thanos is a set of components that can be used to extend the storage and retrieval of metrics in Prometheus. It allows you to store metrics in a remote object store and query them across multiple Prometheus servers and Greenhouse clusters.</description></item><item><title>Trust Manager</title><link>https://cloudoperators.dev/docs/reference/catalog/trust-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cloudoperators.dev/docs/reference/catalog/trust-manager/</guid><description>This Plugin provides trust-manager to automate the management and distribution of trust bundles across Kubernetes clusters.
Trust-manager is a Kubernetes operator that distributes trust bundles (CA certificates) to workloads running in your cluster. It works alongside cert-manager and enables you to manage CA trust stores declaratively.
Prerequisites cert-manager must be installed on the target cluster before deploying this plugin. Trust-manager depends on cert-manager for its webhook certificates. You can install it using the cert-manager Greenhouse plugin.</description></item></channel></rss>