Customizing the web console in OKD

You can customize the OKD web console to set a custom logo, product name, links, notifications, and command line downloads. This is especially helpful if you need to tailor the web console to meet specific corporate or government requirements.

Adding a custom logo and product name

You can create custom branding by adding a custom logo or custom product name. You can set both or one without the other, as these settings are independent of each other.

Prerequisites

  • You must have administrator privileges.

  • Create a file of the logo that you want to use. The logo can be a file in any common image format, including GIF, JPG, PNG, or SVG, and is constrained to a max-height of 60px.

Procedure

  1. Import your logo file into a config map in the openshift-config namespace:

    1. $ oc create configmap console-custom-logo --from-file /path/to/console-custom-logo.png -n openshift-config
    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: console-custom-logo
    5. namespace: openshift-config
    6. data:
    7. console-custom-logo.png: <base64-encoded_logo> ... (1)
    1Provide a valid base64 encoded logo.
  2. Edit the web console’s Operator configuration to include customLogoFile and customProductName:

    1. $ oc edit consoles.operator.openshift.io cluster
    1. apiVersion: operator.openshift.io/v1
    2. kind: Console
    3. metadata:
    4. name: cluster
    5. spec:
    6. customization:
    7. customLogoFile:
    8. key: console-custom-logo.png
    9. name: console-custom-logo
    10. customProductName: My Console

    Once the Operator configuration is updated, it will sync the custom logo config map into the console namespace, mount it to the console pod, and redeploy.

  3. Check for success. If there are any issues, the console cluster Operator will report a Degraded status, and the console Operator configuration will also report a CustomLogoDegraded status, but with reasons like KeyOrFilenameInvalid or NoImageProvided.

    To check the clusteroperator, run:

    1. $ oc get clusteroperator console -o yaml

    To check the console Operator configuration, run:

    1. $ oc get consoles.operator.openshift.io -o yaml

Prerequisites

  • You must have administrator privileges.

Procedure

  1. From AdministrationCustom Resource Definitions, click on ConsoleLink.

  2. Select Instances tab

  3. Click Create Console Link and edit the file:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleLink
    3. metadata:
    4. name: example
    5. spec:
    6. href: 'https://www.example.com'
    7. location: HelpMenu (1)
    8. text: Link 1
    1Valid location settings are HelpMenu, UserMenu, ApplicationMenu, and NamespaceDashboard.

    To make the custom link appear in all namespaces, follow this example:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleLink
    3. metadata:
    4. name: namespaced-dashboard-link-for-all-namespaces
    5. spec:
    6. href: 'https://www.example.com'
    7. location: NamespaceDashboard
    8. text: This appears in all namespaces

    To make the custom link appear in only some namespaces, follow this example:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleLink
    3. metadata:
    4. name: namespaced-dashboard-for-some-namespaces
    5. spec:
    6. href: 'https://www.example.com'
    7. location: NamespaceDashboard
    8. # This text will appear in a box called "Launcher" under "namespace" or "project" in the web console
    9. text: Custom Link Text
    10. namespaceDashboard:
    11. namespaces:
    12. # for these specific namespaces
    13. - my-namespace
    14. - your-namespace
    15. - other-namespace

    To make the custom link appear in the application menu, follow this example:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleLink
    3. metadata:
    4. name: application-menu-link-1
    5. spec:
    6. href: 'https://www.example.com'
    7. location: ApplicationMenu
    8. text: Link 1
    9. applicationMenu:
    10. section: My New Section
    11. # image that is 24x24 in size
    12. imageURL: https://via.placeholder.com/24
  4. Click the Save button to apply your changes.

Customizing the web console URL

You can update the web console URL, consoleURL, to a custom value.

Procedure

  1. Modify the cluster instance created by default during installation in the consoles.operator.openshift.io custom resource:

    1. $ oc patch consoles.operator.openshift.io cluster --patch '{"spec":{"route":{"hostname":"console.example.com"}}}' --type=merge
    1. apiVersion: operator.openshift.io/v1
    2. kind: Console
    3. metadata:
    4. name: cluster
    5. spec:
    6. route:
    7. hostname: 'console.example.com'
  2. If you specify a custom certificate, you must create a secret in the openshift-config namespace that has the key and certificate. For example:

    1. $ oc create secret tls console-tls --key=key.pem --cert=cert.pem -n openshift-config
    1. apiVersion: v1
    2. kind: Secret
    3. metadata:
    4. name: console-tls
    5. namespace: openshift-config
    6. type: kubernetes.io/tls
    7. data:
    8. tls.crt: >-
    9. <base64-encoded_cert> ... (1)
    10. tls.key: >-
    11. <base64-encoded_key> ... (2)
    1Provide a valid TLS certificate.
    2Provide a valid TLS key.

    Then, edit the web console’s Operator configuration:

    1. $ oc edit consoles.operator.openshift.io cluster

    Add the following stanza to the configuration resource:

    1. spec:
    2. route:
    3. hostname: console.example.com
    4. secret:
    5. name: console-tls

Customizing the login page

Create Terms of Service information with custom login pages. Custom login pages can also be helpful if you use a third-party login provider, such as GitHub or Google, to show users a branded page that they trust and expect before being redirected to the authentication provider. You can also render custom error pages during the authentication process.

Customizing the error template is limited to identity providers (IDPs) that use redirects, such as request header and OIDC-based IDPs. It does not have an effect on IDPs that use direct password authentication, such as LDAP and HTPasswd.

Prerequisites

  • You must have administrator privileges.

Procedure

  1. Run the following commands to create templates you can modify:

    1. $ oc adm create-login-template > login.html
    1. $ oc adm create-provider-selection-template > providers.html
    1. $ oc adm create-error-template > errors.html
  2. Create the secrets:

    1. $ oc create secret generic login-template --from-file=login.html -n openshift-config
    1. $ oc create secret generic providers-template --from-file=providers.html -n openshift-config
    1. $ oc create secret generic error-template --from-file=errors.html -n openshift-config
  3. Run:

    1. $ oc edit oauths cluster
  4. Update the specification:

    1. spec:
    2. templates:
    3. error:
    4. name: error-template
    5. login:
    6. name: login-template
    7. providerSelection:
    8. name: providers-template

    Run oc explain oauths.spec.templates to understand the options.

If you are connected to a service that helps you browse your logs, but you need to generate URLs in a particular way, then you can define a template for your link.

Prerequisites

  • You must have administrator privileges.

Procedure

  1. From AdministrationCustom Resource Definitions, click on ConsoleExternalLogLink.

  2. Select Instances tab

  3. Click Create Console External Log Link and edit the file:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleExternalLogLink
    3. metadata:
    4. name: example
    5. spec:
    6. hrefTemplate: >-
    7. https://example.com/logs?resourceName=${resourceName}&containerName=${containerName}&resourceNamespace=${resourceNamespace}&podLabels=${podLabels}
    8. text: Example Logs

Creating custom notification banners

Prerequisites

  • You must have administrator privileges.

Procedure

  1. From AdministrationCustom Resource Definitions, click on ConsoleNotification.

  2. Select Instances tab

  3. Click Create Console Notification and edit the file:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleNotification
    3. metadata:
    4. name: example
    5. spec:
    6. text: This is an example notification message with an optional link.
    7. location: BannerTop (1)
    8. link:
    9. href: 'https://www.example.com'
    10. text: Optional link text
    11. color: '#fff'
    12. backgroundColor: '#0088ce'
    1Valid location settings are BannerTop, BannerBottom, and BannerTopBottom.
  4. Click the Create button to apply your changes.

Customizing CLI downloads

You can configure links for downloading the CLI with custom link text and URLs, which can point directly to file packages or to an external page that provides the packages.

Prerequisites

  • You must have administrator privileges.

Procedure

  1. Navigate to AdministrationCustom Resource Definitions.

  2. Select ConsoleCLIDownload from the list of Custom Resource Definitions (CRDs).

  3. Click the YAML tab, and then make your edits:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleCLIDownload
    3. metadata:
    4. name: example-cli-download-links-for-foo
    5. spec:
    6. description: |
    7. This is an example of download links for foo
    8. displayName: example-foo
    9. links:
    10. - href: 'https://www.example.com/public/foo.tar'
    11. text: foo for linux
    12. - href: 'https://www.example.com/public/foo.mac.zip'
    13. text: foo for mac
    14. - href: 'https://www.example.com/public/foo.win.zip'
    15. text: foo for windows
  4. Click the Save button.

Adding YAML examples to Kubernetes resources

You can dynamically add YAML examples to any Kubernetes resources at any time.

Prerequisites

  • You must have cluster administrator privileges.

Procedure

  1. From AdministrationCustom Resource Definitions, click on ConsoleYAMLSample.

  2. Click YAML and edit the file:

    1. apiVersion: console.openshift.io/v1
    2. kind: ConsoleYAMLSample
    3. metadata:
    4. name: example
    5. spec:
    6. targetResource:
    7. apiVersion: batch/v1
    8. kind: Job
    9. title: Example Job
    10. description: An example Job YAML sample
    11. yaml: |
    12. apiVersion: batch/v1
    13. kind: Job
    14. metadata:
    15. name: countdown
    16. spec:
    17. template:
    18. metadata:
    19. name: countdown
    20. spec:
    21. containers:
    22. - name: counter
    23. image: centos:7
    24. command:
    25. - "bin/bash"
    26. - "-c"
    27. - "for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done"
    28. restartPolicy: Never

    Use spec.snippet to indicate that the YAML sample is not the full YAML resource definition, but a fragment that can be inserted into the existing YAML document at the user’s cursor.

  3. Click Save.