# Kubernetes

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2F94FHAUKBMaoaX2Bdb5oK%2FK8s.jpg?alt=media\&token=5e9bcda9-d765-49ea-93e8-7ed56cee101f)

### Overview <a href="#id-.kubernetesv2.x-overview" id="id-.kubernetesv2.x-overview"></a>

Keeper's Kubernetes support takes the form of a protocol implementation which allows Keeper to attach to the consoles of Kubernetes containers using Kubernetes' REST API. As with SSH and telnet, Keeper's Kubernetes support emulates a terminal on the server side which renders to the Keeper Connection Manager client's display.

Support for attaching to Kubernetes containers is controlled through the use of several parameters. When a database like MySQL or PostgreSQL is used, these parameters are presented in a convenient web interface. If defining connections through another mechanism, such as through[ encrypted JSON](https://docs.keeper.io/en/keeper-connection-manager/using-keeper-connection-manager/dynamic-connections) or[ LDAP schema modifications](https://docs.keeper.io/en/keeper-connection-manager/authentication/authenticating-users-with-ldap/storing-connection-data-within-ldap), parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

* [Keeper Secrets Manager parameters](#id-.rdpv2.x-networkparameters)
* [Network parameters](#id-.kubernetesv2.x-networkparameters)
* [Container parameters](#id-.kubernetesv2.x-containerparameters)
* [Authentication parameters](#id-.kubernetesv2.x-authenticationparameters)
* [Display settings](#id-.kubernetesv2.x-displaysettings)
  * [Custom color schemes](#id-.kubernetesv2.x-displaysettings)
* [Terminal behavior parameters](#id-.kubernetesv2.x-terminalbehaviorparameters)
* [Text session recording (typescripts)](#id-.kubernetesv2.x-textsessionrecording-typescripts)
* [Screen recording parameters](#id-.kubernetesv2.x-screenrecordingparameters)

### Keeper Secrets Manager parameters <a href="#id-.rdpv2.x-networkparameters" id="id-.rdpv2.x-networkparameters"></a>

<figure><img src="https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FMWReXK9V2xRFdIkbbwSz%2FScreenshot%202023-04-14%20at%202.53.36%20PM.png?alt=media&#x26;token=992b734d-5a18-48e6-9fe7-bc27c154b966" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="256.3333333333333">Field header</th><th width="163">Parameter name</th><th>Description</th></tr></thead><tbody><tr><td>Allow user-provided KSM configuration:</td><td><code>ksm-user-config-enabled</code></td><td>If set to "true", each Keeper Connection Manager user profile can be assigned to a Keeper Secrets Manager configuration for any connection. See the <a href="../vault-integration/multiple-vaults-integration">Multiple  Vaults Integration</a> screen for more information.</td></tr></tbody></table>

### Network parameters <a href="#id-.kubernetesv2.x-networkparameters" id="id-.kubernetesv2.x-networkparameters"></a>

Connecting to a Kubernetes server in order to attach to a container involves establishing a WebSocket connection with that server, and requires the server's hostname or IP address. Depending on the Kubernetes server, SSL/TLS may also be required for the connection.

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FYUtmC5soQxJyBww63kT9%2Fglen2-kubernetes-network-params.png?alt=media\&token=fca1760b-4530-4488-a62c-242df218a3c2)

| Field header (web interface)       | Parameter name | Description                                                                                                                                                                                                                                                                                                                                                       |
| ---------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Hostname:                          | `hostname`     | **REQUIRED:** The hostname or IP address of the Kubernetes server Guacamole should connect to.                                                                                                                                                                                                                                                                    |
| Port:                              | `port`         | The port the Kubernetes server is listening on. By default, port 8080 will be used.                                                                                                                                                                                                                                                                               |
| Use SSL/TLS:                       | `use-ssl`      | If set to "true", SSL/TLS will be used to connect to the Kubernetes server. By default, SSL/TLS will not be used.                                                                                                                                                                                                                                                 |
| Ignore server certificate:         | `ignore-cert`  | If set to "true", the validity of the SSL/TLS certificate used by the Kubernetes server will be ignored if it cannot be validated. By default, SSL/TLS certificates are validated.                                                                                                                                                                                |
| Certificate authority certificate: | `ca-cert`      | The certificate of the certificate authority that signed the certificate of the Kubernetes server, in PEM format. If omitted, verification of the Kubernetes server certificate will use only [system-wide certificate authorities](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-shared-system-certificates). |

### Container parameters <a href="#id-.kubernetesv2.x-containerparameters" id="id-.kubernetesv2.x-containerparameters"></a>

Attaching to a particular Kubernetes container naturally required the name of the pod containing the container in question. By default, Guacamole will attach to the first container in the pod. If there are multiple containers in the pod, you may wish to also specify the container name.

<figure><img src="https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FvcgJjg0JeTi7hB8jW0Ny%2FScreenshot%202024-09-16%20at%207.07.03%E2%80%AFPM.png?alt=media&#x26;token=de723cb0-25c8-4975-ad39-92cf31e2e324" alt="" width="488"><figcaption></figcaption></figure>

| Field header (web interface) | Parameter name | Description                                                                                                                                     |
| ---------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Namespace:                   | `namespace`    | The name of the Kubernetes namespace of the pod containing the container being attached to. If omitted, the namespace "`default`" will be used. |
| Pod name:                    | `pod`          | **REQUIRED:** The name of the Kubernetes pod with the container being attached to.                                                              |
| Container name:              | `container`    | The name of the container to attach to. If omitted, the first container in the pod will be used.                                                |
| Command (exec)               | `command`      | The "exec" command passed to the container. For example, `/bin/sh`                                                                              |

### Authentication parameters <a href="#id-.kubernetesv2.x-authenticationparameters" id="id-.kubernetesv2.x-authenticationparameters"></a>

If enabled, Kubernetes uses SSL/TLS for both encryption and authentication. Standard SSL/TLS client authentication requires both a client certificate and client key, which Guacamole will use to identify itself to the Kubernetes server.

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2Ff5J8F2fRWxdXArkEodgc%2Fglen2-kubernetes-auth-params.png?alt=media\&token=2ee794c2-a27f-4083-9107-484850bbe6d5)

| Field header (web interface) | Parameter name | Description                                                                                                                                                                                |
| ---------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Client certificate:          | `client-cert`  | The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. If omitted, SSL client authentication will not be performed. |
| Client key:                  | `client-key`   | The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. If omitted, SSL client authentication will not be performed.         |

### Display settings <a href="#id-.kubernetesv2.x-displaysettings" id="id-.kubernetesv2.x-displaysettings"></a>

Keeper Connection Manager's Kubernetes support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

{% hint style="danger" %}
If selecting a different font for a Kubernetes connection, **the chosen font must be installed on the server running guacd**. It is the *server* that will handle rendering of characters to the terminal display, not the client.
{% endhint %}

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FGOMIA6VVaBpKc7AtzRsf%2Fglen2-kubernetes-display-params.png?alt=media\&token=fa0003de-a83e-4eb5-a443-2eece15fbad5)

| Field header (web interface) | Parameter name | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ---------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Color scheme:                | `color-scheme` | <p>The color scheme to use for the terminal emulator used by Kubernetes connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:</p><ul><li>"<code>black-white</code>" - Black text over a white background</li><li>"<code>gray-black</code>" - Gray text over a black background (the default)</li><li>"<code>green-black</code>" - Green text over a black background</li><li>"<code>white-black</code>" - White text over a black background</li><li>A custom color scheme (as described below)</li></ul><p>By default, Guacamole will render text as gray over a black background.</p> |
| Font name:                   | `font-name`    | The name of the font to use. If not specified, the default of "monospace" will be used instead. **This must be the name of a font installed on the server running guacd, and should be a monospaced font.** If a non-monospaced font is used, individual glyphs may render incorrectly.                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Font size:                   | `font-size`    | The size of the font to use, in points. By default, the size of rendered text will be 12 point.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Maximum scrollback size:     | `scrollback`   | The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Read-only:                   | `read-only`    | Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |

#### Custom color schemes <a href="#id-.kubernetesv2.x-custom-color-schemescustomcolorschemes" id="id-.kubernetesv2.x-custom-color-schemescustomcolorschemes"></a>

Custom color schemes may be provided for the terminal emulator used by Kubernetes connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

```
foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80
```

Legal color names are:

* "`foreground`" - the default foreground color.
* "`background`" - the default background color.
* "`colorN`" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

* "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "`rgb:ff/00/00`" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "`rgb:f/8/0`", "`rgb:f0/80/00`", and "`rgb:f0f/808/00f`" all refer to the same effective color.
* "`colorN`" - the color currently assigned to index N within the Xterm 256-color palette. For example, "`color9`" specifies the color currently assigned to palette index 9. Note that the *current color value* is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.
* "`NAME`" - the color with human-readable name "`NAME`", where "`NAME`" is one of the [standard color names supported by X11](https://gitlab.freedesktop.org/xorg/app/rgb/raw/master/rgb.txt). These names generally correspond to the names standardized by the W3C for CSS.

### Terminal behavior parameters <a href="#id-.kubernetesv2.x-terminalbehaviorparameters" id="id-.kubernetesv2.x-terminalbehaviorparameters"></a>

In most cases, the default behavior of the Guacamole terminal emulator works without modification. However, when connecting to certain systems, the terminal behavior may need to be tweaked to allow it to operate properly. Guacamole's Kubernetes support provides parameters for controlling the control code sent for backspace.

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FuMplsc27HNpYCJaEdNM7%2Fglen2-kubernetes-terminal-params.png?alt=media\&token=8f505c85-3f1d-45cf-a8da-9fa6cbdb5d94)

| Field header (web interface) | Parameter name | Description                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Backspace key sends:         | `backspace`    | The integer value of the terminal control code that should be sent when backspace is pressed. Under most circumstances this should not need to be adjusted; however, if, when pressing the backspace key, you see control characters (often either ^? or ^H) instead of seeing the text erased, you may need to adjust this parameter. By default, the control code 127 (Delete) is sent. |

### Text session recording (typescripts) <a href="#id-.kubernetesv2.x-textsessionrecording-typescripts" id="id-.kubernetesv2.x-textsessionrecording-typescripts"></a>

The full, raw text content of Kubernetes sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "`NAME`" is the value provided for the typescript name, these files will be named "`NAME`" and "`NAME.timing`" respectively.

This format is compatible with the format used by the standard UNIX `script` command, and can be replayed using `scriptreplay` (if installed). For example, to replay a typescript called "`NAME`", you would run:

```
$ scriptreplay NAME.timing NAME
```

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FfAsjNSHX4I2zQUuAYiSd%2Fglen2-kubernetes-text-recording-params.png?alt=media\&token=07567428-cd03-45cf-9e7f-24adc8300777)

| Field header (web interface)          | Parameter name           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Typescript path:                      | `typescript-path`        | The directory in which typescript files should be created. **If a typescript needs to be recorded, then this parameter is required.** Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Typescript name:                      | `typescript-name`        | <p>The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.</p><p><strong>Guacamole will never overwrite an existing typescript.</strong> If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.</p><p>This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.</p>                                                                                                 |
| Automatically create typescript path: | `create-typescript-path` | <p>If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.</p><p><strong>Only the final directory in the path will be automatically created.</strong> If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.</p><p>This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.</p> |

### Screen recording parameters <a href="#id-.kubernetesv2.x-screenrecordingparameters" id="id-.kubernetesv2.x-screenrecordingparameters"></a>

Kubernetes sessions can be recorded graphically. These recordings take the form of Apache Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the [Glyptodon Enterprise Session Recording Player application](https://player.glyptodon.com/) hosted at [player.glyptodon.com](https://player.glyptodon.com/) (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; **the recordings are not uploaded to a remote service for processing**. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: <https://github.com/glyptodon/glyptodon-enterprise-player>

{% hint style="info" %}
The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions.  See the [Session Recording](https://docs.keeper.io/en/keeper-connection-manager/using-keeper-connection-manager/session-recording) documentation page.
{% endhint %}

![](https://3357255970-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fb7weUpu7VBcMnESSH8vG%2Fuploads%2FyeXbO1uIDjDqegMu1Mjs%2Fglen2-kubernetes-screen-recording-params.png?alt=media\&token=5f3e8b2d-d89b-4f7f-81f5-83a3ebd3f36d)

| Field header (web interface)         | Parameter name             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------ | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Recording path:                      | `recording-path`           | The directory in which screen recording files should be created. **If a graphical recording needs to be created, then this parameter is required.** Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Recording name:                      | `recording-name`           | <p>The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".</p><p><strong>Guacamole will never overwrite an existing recording.</strong> If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.</p><p>This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.</p>                                                                                         |
| Exclude graphics/streams:            | `recording-exclude-output` | <p>If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.</p><p>This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.</p>                                                                                                                                                                                                                                                                                          |
| Exclude mouse:                       | `recording-exclude-mouse`  | <p>If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.</p><p>This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.</p>                                                                                                                                                                                                                                                                                                                                                       |
| Include key events:                  | `recording-include-keys`   | <p>If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the <code>guaclog</code> utility to produce a human-readable interpretation of the keys pressed during the session. <strong>By default, for privacy's sake, key events will be NOT included in the recording.</strong></p><p>This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.</p>                                                                                                                                                                                                         |
| Automatically create recording path: | `create-recording-path`    | <p>If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.</p><p><strong>Only the final directory in the path will be automatically created.</strong> If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.</p><p>This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.</p> |
