Examples

Example configurations for Konflux Operator Custom Resources

The following examples demonstrate how to configure Konflux Operator Custom Resources:

Empty Konflux Configuration

Empty Konflux configuration (Default values)

# Title: Empty Konflux Configuration
# Description: Empty Konflux configuration (Default values)
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: Konflux
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux
spec: {}

Konflux with GitHub Authentication

Konflux configuration with GitHub authentication

# Title: Konflux with GitHub Authentication
# Description: Konflux configuration with GitHub authentication
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: Konflux
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux
spec:
  ui:
    spec:
      ingress:
        enabled: true
      proxy:
        replicas: 1
        nginx:
          resources:
            requests:
              cpu: 30m
              memory: 128Mi
            limits:
              cpu: 30m
              memory: 128Mi
      dex:
        dex:
          # The secret should be created in the konflux-ui namespace
          env:
            - name: GITHUB_CLIENT_ID
              valueFrom:
                secretKeyRef:
                  name: github-client
                  key: clientID
            - name: GITHUB_CLIENT_SECRET
              valueFrom:
                secretKeyRef:
                  name: github-client
                  key: clientSecret
        config:
          connectors:
          # Add a GitHub connector to the Dex configuration - https://dexidp.io/docs/connectors/github/
            - type: github
              id: github
              name: GitHub
              config:
                clientID: $GITHUB_CLIENT_ID
                clientSecret: $GITHUB_CLIENT_SECRET

Konflux Configuration

Complete Konflux configuration with all components (UI, Build Service, Integration Service, Release Service, etc.)

# Title: Konflux Configuration
# Description: Complete Konflux configuration with all components (UI, Build Service, Integration Service, Release Service, etc.)
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: Konflux
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux
spec:
  ui:
    spec:
      ingress:
        nodePortService:
          httpsPort: 30011
      proxy:
        replicas: 1
        nginx:
          resources:
            requests:
              cpu: 30m
              memory: 128Mi
            limits:
              cpu: 30m
              memory: 128Mi
      dex:
        config:
          enablePasswordDB: true
          passwordConnector: local
          staticPasswords:
          - email: "user1@konflux.dev"
            # bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
            hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W" # notsecret
            username: "user1"
            userID: "7138d2fe-724e-4e86-af8a-db7c4b080e20"
          - email: "user2@konflux.dev"
            # bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
            hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W" # notsecret
            username: "user2"
            userID: "ea8e8ee1-2283-4e03-83d4-b00f8b821b64"
  integrationService:
    spec:
      integrationControllerManager:
        replicas: 1
        manager:
          resources:
            requests:
              cpu: 30m
              memory: 128Mi
            limits:
              cpu: 30m
              memory: 128Mi
  releaseService:
    spec:
      releaseControllerManager:
        replicas: 1
        manager:
          resources:
            requests:
              cpu: 30m
              memory: 128Mi
            limits:
              cpu: 30m
              memory: 128Mi
  buildService:
    spec:
      buildControllerManager:
        replicas: 1
        manager:
          resources:
            requests:
              cpu: 30m
              memory: 128Mi
            limits:
              cpu: 30m
              memory: 128Mi
  namespaceLister:
    spec:
      namespaceLister:
        replicas: 1
        namespaceLister:
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 256Mi
  info:
    spec:
      publicInfo:
        environment: development
        visibility: public
      banner:
        items:
          - summary: "Welcome to Konflux-CI! This is a development environment for testing and development purposes."
            type: info
  certManager:
    # CreateClusterIssuer controls whether cluster issuer resources are created
    # Defaults to true if not specified
    createClusterIssuer: true
  internalRegistry:
    # Enabled controls whether internal registry resources are deployed
    # Defaults to false if not specified
    enabled: true

Konflux Application API Configuration

KonfluxApplicationAPI configuration (minimal example)

# Title: Konflux Application API Configuration
# Description: KonfluxApplicationAPI configuration (minimal example)
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxApplicationAPI
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-application-api
spec: {}

Konflux Build Service Configuration

KonfluxBuildService configuration with custom resource limits and environment variables

# Title: Konflux Build Service Configuration
# Description: KonfluxBuildService configuration with custom resource limits and environment variables
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxBuildService
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-build-service
spec:
  buildControllerManager:
    replicas: 2
    manager:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 500m
          memory: 512Mi
      env:
        - name: PAC_WEBHOOK_URL
          value: "http://pipelines-as-code-controller.pipelines-as-code.svc.cluster.local:8180"
        - name: EXAMPLE_CUSTOM_CONFIG
          valueFrom:
            configMapKeyRef:
              name: build-service-config
              key: custom-config
        - name: EXAMPLE_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: build-service-secret
              key: secret-key

Konflux Cert Manager Configuration

KonfluxCertManager configuration for certificate management

# Title: Konflux Cert Manager Configuration
# Description: KonfluxCertManager configuration for certificate management
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxCertManager
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-cert-manager
spec:
  # CreateClusterIssuer controls whether cluster issuer resources are created
  # Defaults to true if not specified
  createClusterIssuer: true

Konflux Default Tenant Configuration

KonfluxDefaultTenant configuration for default tenant

# Title: Konflux Default Tenant Configuration
# Description: KonfluxDefaultTenant configuration for default tenant
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxDefaultTenant
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konfluxdefaulttenant-sample
spec:
  # TODO(user): Add fields here

Konflux Enterprise Contract Configuration

KonfluxEnterpriseContract configuration for enterprise contract policies

# Title: Konflux Enterprise Contract Configuration
# Description: KonfluxEnterpriseContract configuration for enterprise contract policies
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxEnterpriseContract
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-enterprise-contract
spec: {}

Konflux Image Controller Configuration

KonfluxImageController configuration for image management

# Title: Konflux Image Controller Configuration
# Description: KonfluxImageController configuration for image management
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxImageController
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-image-controller
spec: {}

Konflux Info Configuration

KonfluxInfo full configuration for information display

# Title: Konflux Info Configuration
# Description: KonfluxInfo full configuration for information display
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxInfo
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-info
spec:
  publicInfo:
    # Environment type: development, production, or staging
    environment: production

    # Visibility level: public or private
    visibility: public

    # Optional status page URL
    statusPageUrl: "https://status.konflux.example.com"

    # Integration configurations
    integrations:
      # GitHub App integration
      github:
        application_url: "https://github.com/apps/my-konflux-app/installations/new"

      # SBOM server configuration
      sbom_server:
        url: "https://sbom.example.com/content"
        sbom_sha: "https://sbom.example.com/sha"

      # Image Controller configuration
      image_controller:
        enabled: true
        notifications:
          # Webhook notification example
          - title: "Build Complete Notification"
            event: "build_complete"
            method: "webhook"
            config:
              url: "https://webhook.example.com/build/complete"

          # Email notification example
          - title: "Repository Push Notification"
            event: "repo_push"
            method: "email"
            config:
              email: "devops-team@example.com"

          # Another webhook with different event
          - title: "Image Scan Complete"
            event: "image_scan_complete"
            method: "webhook"
            config:
              url: "https://webhook.example.com/scan"
              timeout: "30s"

    # RBAC role definitions
    rbac:
      # Admin role with custom display name
      - name: "konflux-admin-user-actions"
        description: "Full access to Konflux resources including secrets and administrative operations"
        displayName: "Administrator"

      # Maintainer role (displayName defaults to name)
      - name: "konflux-maintainer-user-actions"
        description: "Manage workspace resources without access to sensitive or destructive actions"

      # Viewer role
      - name: "konflux-viewer-user-actions"
        description: "Read-only access to view CI results and workspace information"
        displayName: "Viewer Role"

      # Custom role
      - name: "konflux-custom-role"
        description: "Custom role for specific use case with limited permissions"

  # Banner configurations
  banner:
    items:
      # Simple informational banner (always visible)
      - summary: "Welcome to Konflux-CI! This is a production environment."
        type: info

      # Warning banner with time-based scheduling (weekdays 9 AM - 5 PM EST)
      - summary: "**Scheduled Maintenance**: System maintenance will occur on Friday, March 15th from 2:00 AM to 4:00 AM EST."
        type: warning
        startTime: "09:00"
        endTime: "17:00"
        timeZone: "America/New_York"
        dayOfWeek: 1  # Monday

      # Danger banner for specific date (one-time event)
      - summary: "**CRITICAL**: Security patch deployment in progress. Some services may be temporarily unavailable."
        type: danger
        startTime: "14:00"
        endTime: "18:00"
        timeZone: "UTC"
        year: 2025
        month: 3
        dayOfMonth: 15

      # Info banner for specific day of week (recurring weekly)
      - summary: "Weekly team standup reminder: Every Monday at 10:00 AM."
        type: info
        startTime: "09:00"
        endTime: "11:00"
        timeZone: "America/Los_Angeles"
        dayOfWeek: 1  # Monday (0=Sunday, 1=Monday, etc.)

      # Warning banner for specific month and day (recurring annually)
      - summary: "**Annual Review Period**: Performance reviews are due by end of month."
        type: warning
        startTime: "00:00"
        endTime: "23:59"
        timeZone: "UTC"
        month: 12
        dayOfMonth: 31

      # Info banner with Markdown formatting
      - summary: |
          **New Feature Available**:

          - Enhanced build pipeline visualization
          - Improved security scanning
          - [View Documentation](https://docs.konflux.example.com)
        type: info
        startTime: "08:00"
        endTime: "20:00"
        timeZone: "Europe/London"

Konflux Integration Service Configuration

KonfluxIntegrationService configuration with custom resource limits and environment variables

# Title: Konflux Integration Service Configuration
# Description: KonfluxIntegrationService configuration with custom resource limits and environment variables
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxIntegrationService
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-integration-service
spec:
  integrationControllerManager:
    replicas: 3
    manager:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 512m
          memory: 1Gi
      env:
        - name: EXAMPLE_CUSTOM_CONFIG
          valueFrom:
            configMapKeyRef:
              name: integration-service-config
              key: custom-config
        - name: EXAMPLE_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: integration-service-secret
              key: secret-key

Konflux Internal Registry Configuration

KonfluxInternalRegistry configuration for internal registry

# Title: Konflux Internal Registry Configuration
# Description: KonfluxInternalRegistry configuration for internal registry
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxInternalRegistry
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-internal-registry
spec:
  # TODO(user): Add fields here

Konflux Namespace Lister Configuration

KonfluxNamespaceLister configuration for namespace lister with custom resource limits and environment variables

# Title: Konflux Namespace Lister Configuration
# Description: KonfluxNamespaceLister configuration for namespace lister with custom resource limits and environment variables
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxNamespaceLister
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-namespace-lister
spec:
  namespaceLister:
    replicas: 3
    namespaceLister:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 512m
          memory: 1Gi
      env:
        - name: LOG_LEVEL
          value: "0"
        - name: CACHE_RESYNC_PERIOD
          value: "10m"
        - name: EXAMPLE_CUSTOM_CONFIG
          valueFrom:
            configMapKeyRef:
              name: namespace-lister-config
              key: custom-config
        - name: EXAMPLE_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: namespace-lister-secret
              key: secret-key

Konflux RBAC Configuration

KonfluxRBAC configuration for role-based access control

# Title: Konflux RBAC Configuration
# Description: KonfluxRBAC configuration for role-based access control
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxRBAC
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-rbac
spec: {}

Konflux Release Service Configuration

KonfluxReleaseService configuration with custom resource limits and environment variables

# Title: Konflux Release Service Configuration
# Description: KonfluxReleaseService configuration with custom resource limits and environment variables
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxReleaseService
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-release-service
spec:
  releaseControllerManager:
    replicas: 3
    manager:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 100m
          memory: 256Mi
      env:
        - name: DEFAULT_RELEASE_PVC
          valueFrom:
            configMapKeyRef:
              name: release-service-manager-properties
              key: DEFAULT_RELEASE_PVC
        - name: EXAMPLE_CUSTOM_CONFIG
          valueFrom:
            configMapKeyRef:
              name: release-service-config
              key: custom-config
        - name: EXAMPLE_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: release-service-secret
              key: secret-key

Konflux UI Configuration

KonfluxUI configuration with ingress, proxy, and dex settings

# Title: Konflux UI Configuration
# Description: KonfluxUI configuration with ingress, proxy, and dex settings
apiVersion: konflux.konflux-ci.dev/v1alpha1
kind: KonfluxUI
metadata:
  labels:
    app.kubernetes.io/name: konflux-operator
    app.kubernetes.io/managed-by: kustomize
  name: konflux-ui
spec:
  # Ingress configuration
  ingress:
    enabled: true
    ingressClassName: "nginx"
    host: "konflux-ui.example.com"
    annotations:
      cert-manager.io/cluster-issuer: "letsencrypt-prod"
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
      nginx.ingress.kubernetes.io/proxy-body-size: "10m"
    tlsSecretName: "konflux-ui-tls"

  # Proxy deployment configuration
  proxy:
    replicas: 3
    nginx:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 500m
          memory: 512Mi
      env:
        - name: NGINX_WORKER_PROCESSES
          value: "4"
        - name: NGINX_WORKER_CONNECTIONS
          value: "1024"
        - name: NGINX_KEEPALIVE_TIMEOUT
          value: "65"
    oauth2Proxy:
      resources:
        requests:
          cpu: 50m
          memory: 128Mi
        limits:
          cpu: 200m
          memory: 256Mi
      env:
        - name: OAUTH2_PROXY_PROVIDER
          value: "oidc"
        - name: OAUTH2_PROXY_OIDC_ISSUER_URL
          value: "https://dex.example.com/idp/"
        - name: OAUTH2_PROXY_CLIENT_ID
          value: "oauth2-proxy"
        - name: OAUTH2_PROXY_CLIENT_SECRET
          valueFrom:
            secretKeyRef:
              name: oauth2-proxy-secret
              key: client-secret

  # Dex deployment configuration
  dex:
    replicas: 2
    dex:
      resources:
        requests:
          cpu: 100m
          memory: 256Mi
        limits:
          cpu: 500m
          memory: 512Mi
      env:
        - name: DEX_LOG_LEVEL
          value: "debug"
        - name: DEX_STORAGE_TYPE
          value: "kubernetes"
    config:
      hostname: "dex.example.com"
      port: "9443"
      enablePasswordDB: true
      passwordConnector: "local"
      configureLoginWithOpenShift: true
      connectors:
        - type: "github"
          id: "github"
          name: "GitHub"
          config:
            clientID: "$GITHUB_CLIENT_ID"
            clientSecret: "$GITHUB_CLIENT_SECRET"
            redirectURI: "https://dex.example.com/idp/callback"
            orgs:
              - name: "my-org"
                teams:
                  - "developers"
                  - "admins"
              - name: "another-org"
                teams:
                  - "contributors"
        - type: "oidc"
          id: "google"
          name: "Google"
          config:
            clientID: "$GOOGLE_CLIENT_ID"
            clientSecret: "$GOOGLE_CLIENT_SECRET"
            redirectURI: "https://dex.example.com/idp/callback"
            issuer: "https://accounts.google.com"
            groups:
              - "admin@example.com"
        - type: "ldap"
          id: "ldap"
          name: "LDAP"
          config:
            host: "ldap.example.com:636"
            bindDN: "cn=admin,dc=example,dc=com"
            bindPW: "$LDAP_BIND_PASSWORD"
            userSearch:
              baseDN: "ou=Users,dc=example,dc=com"
              filter: "(objectClass=person)"
              username: "uid"
              idAttr: "uid"
              emailAttr: "mail"
              nameAttr: "cn"
            groupSearch:
              baseDN: "ou=Groups,dc=example,dc=com"
              filter: "(objectClass=groupOfNames)"
              nameAttr: "cn"
              userMatchers:
                - userAttr: "DN"
                  groupAttr: "member"
      staticPasswords:
        - email: "user1@konflux.dev"
          # bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
          hash: REDACTED
          username: "user1"
          userID: "7138d2fe-724e-4e86-af8a-db7c4b080e20"
        - email: "user2@konflux.dev"
          # bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
          hash: REDACTED
          username: "user2"
          userID: "ea8e8ee1-2283-4e03-83d4-b00f8b821b64"
        - email: "admin@konflux.dev"
          # bcrypt hash of the string "admin": $(echo admin | htpasswd -BinC 10 admin | cut -d: -f2)
          hash: REDACTED
          username: "admin"
          userID: "admin-12345-67890-abcdef"