GUACAMOLE-623: Merge document support for Kubernetes.

diff --git a/src/chapters/configuring.xml b/src/chapters/configuring.xml
index 2dfc121..2b601dd 100644
--- a/src/chapters/configuring.xml
+++ b/src/chapters/configuring.xml
@@ -4423,6 +4423,688 @@
                     trusted.</para>
             </section>
         </section>
+        <section xml:id="kubernetes">
+            <title>Kubernetes</title>
+            <indexterm>
+                <primary>Kubernetes</primary>
+            </indexterm>
+            <para>Kubernetes provides an API for attaching to the console of a container over the
+                network. As with SSH and telnet, Guacamole's Kubernetes support emulates a terminal
+                on the server side which renders to the Guacamole client's display.</para>
+            <para>Kubernetes support for Guacamole is provided by the
+                    <package>libguac-client-kubernetes</package> library, which will be installed as
+                part of guacamole-server if the required dependencies are present during the
+                build.</para>
+            <section xml:id="kubernetes-network-parameters">
+                <title>Network/Container parameters</title>
+                <para>Attaching to a Kubernetes container requires the hostname or IP address of the
+                    Kubernetes server and 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.</para>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>hostname</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>hostname</secondary>
+                                        </indexterm>The hostname or IP address of the Kubernetes
+                                        server that Guacamole should connect to.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>port</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>port</secondary>
+                                        </indexterm>The port the Kubernetes server is listening on
+                                        for API connections. <emphasis>This parameter is
+                                            optional.</emphasis> If omitted, port 8080 will be used
+                                        by default.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>namespace</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>namespace</secondary>
+                                        </indexterm>The name of the Kubernetes namespace of the pod
+                                        containing the container being attached to. <emphasis>This
+                                            parameter is optional.</emphasis> If omitted, the
+                                        namespace "default" will be used.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>pod</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>pod</secondary>
+                                        </indexterm>The name of the Kubernetes pod containing with
+                                        the container being attached to.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>container</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>container</secondary>
+                                        </indexterm>The name of the container to attach to.
+                                            <emphasis>This parameter is optional.</emphasis> If
+                                        omitted, the first container in the pod will be used.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="kubernetes-authentication">
+                <title>Authentication and SSL/TLS</title>
+                <para>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. If the certificate used by Kubernetes is self-signed or signed by a
+                    non-standard certificate authority, the certificate for the certificate
+                    authority will also be needed.</para>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>use-ssl</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", SSL/TLS will be used to connect to the
+                                        Kubernetes server. <emphasis>This parameter is
+                                            optional.</emphasis> By default, SSL/TLS will not be
+                                        used.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>client-cert</parameter></entry>
+                                <entry>
+                                    <para>The certificate to use if performing SSL/TLS client
+                                        authentication to authenticate with the Kubernetes server,
+                                        in PEM format. <emphasis>This parameter is
+                                            optional.</emphasis> If omitted, SSL client
+                                        authentication will not be performed.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>client-key</parameter></entry>
+                                <entry>
+                                    <para>The key to use if performing SSL/TLS client authentication
+                                        to authenticate with the Kubernetes server, in PEM format.
+                                            <emphasis>This parameter is optional.</emphasis> If
+                                        omitted, SSL client authentication will not be
+                                        performed</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>ca-cert</parameter></entry>
+                                <entry>
+                                    <para>The certificate of the certificate authority that signed
+                                        the certificate of the Kubernetes server, in PEM format.
+                                            <emphasis>This parameter is optional.</emphasis> If
+                                        omitted, verification of the Kubernetes server certificate
+                                        will use only system-wide certificate authorities. </para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>ignore-cert</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", the validity of the SSL/TLS certificate
+                                        used by the Kubernetes server will be ignored if it cannot
+                                        be validated. <emphasis>This parameter is
+                                            optional.</emphasis> By default, SSL/TLS certificates
+                                        are validated.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="kubernetes-display-settings">
+                <title>Display settings</title>
+                <para>Guacamole'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.
+                    In this case, <emphasis>the chosen font must be installed on the
+                        server</emphasis>, as it is the server that will handle rendering of
+                    characters to the terminal display, not the client.</para>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>color-scheme</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>color scheme</secondary>
+                                        </indexterm>The color scheme to use for the terminal
+                                        emulator used by Kubernetes connections. It consists 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:</para>
+                                    <informalexample>
+                                        <programlisting>foreground: rgb:00/00/ff;
+background: rgb:ff/ff/ff;
+color9: rgb:80/00/80</programlisting>
+                                    </informalexample>
+                                    <para>This format is similar to the color configuration format
+                                        used by Xterm, so Xterm color configurations can be easily
+                                        adapted for Guacamole. This parameter is optional. If not
+                                        specified, Guacamole will render text as gray over a black
+                                        background.</para>
+                                    <para>Possible color names are:</para>
+                                    <variablelist>
+                                        <varlistentry>
+                                            <term><constant>foreground</constant></term>
+                                            <listitem>
+                                                <para>Set the default foreground color.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>background</constant></term>
+                                            <listitem>
+                                                <para>Set the default background color.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>color&lt;n&gt;</constant></term>
+                                            <listitem>
+                                                <para>Set the color at index <code>&lt;n&gt;</code>
+                                                  on the Xterm 256-color palette. For example,
+                                                  <code>color9</code> refers to the red color.
+                                                </para>
+                                            </listitem>
+                                        </varlistentry>
+                                    </variablelist>
+                                    <para>Possible color values are:</para>
+                                    <variablelist>
+                                        <varlistentry>
+                                            <term><constant>rgb:RR/GG/BB</constant></term>
+                                            <listitem>
+                                                <para>Use the specified color in RGB format, with
+                                                  each component in hexadecimal. For example,
+                                                  <code>rgb:ff/00/00</code> specifies the color red.
+                                                  Note that each hexadecimal component can be one to
+                                                  four digits, but the effective values are always
+                                                  zero-extended or truncated to two digits; for
+                                                  example, <code>rgb:f/8/0</code>,
+                                                  <code>rgb:f0/80/00</code>, and
+                                                  <code>rgb:f0f/808/00f</code> all refer to the same
+                                                  effective color.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>color&lt;n&gt;</constant></term>
+                                            <listitem>
+                                                <para>Use the color currently assigned to index
+                                                  <code>&lt;n&gt;</code> on the Xterm 256-color
+                                                  palette. For example, <code>color9</code>
+                                                  specifies the current red color. Note that the
+                                                  color value is used rather than the color
+                                                  reference, so if <code>color9</code> is changed
+                                                  later in the color scheme configuration, that new
+                                                  color will not be reflected in this
+                                                  assignment.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                    </variablelist>
+                                    <para>For backward compatibility, Guacamole will also accept
+                                        four special values as the color scheme parameter:</para>
+                                    <variablelist>
+                                        <varlistentry>
+                                            <term><constant>black-white</constant></term>
+                                            <listitem>
+                                                <para>Black text over a white background.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>gray-black</constant></term>
+                                            <listitem>
+                                                <para>Gray text over a black background. This is the
+                                                  default color scheme.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>green-black</constant></term>
+                                            <listitem>
+                                                <para>Green text over a black background.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                        <varlistentry>
+                                            <term><constant>white-black</constant></term>
+                                            <listitem>
+                                                <para>White text over a black background.</para>
+                                            </listitem>
+                                        </varlistentry>
+                                    </variablelist>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>font-name</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>font</secondary>
+                                        </indexterm>The name of the font to use. This parameter is
+                                        optional. If not specified, the default of "monospace" will
+                                        be used instead.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>font-size</parameter></entry>
+                                <entry>
+                                    <para>The size of the font to use, in points. This parameter is
+                                        optional. If not specified, the default of 12 will be used
+                                        instead.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>read-only</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>read-only</secondary>
+                                        </indexterm>Whether this connection should be read-only. If
+                                        set to "true", no input will be accepted on the connection
+                                        at all. Users will only see the console of the Kubernetes
+                                        container. <emphasis>This parameter is optional.</emphasis>
+                                        If omitted, the connection will not be read-only.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>scrollback</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>scrollback</secondary>
+                                        </indexterm>The maximum number of rows to allow within the
+                                        terminal scrollback buffer. This parameter is optional. If
+                                        not specified, the scrollback buffer will be limited to a
+                                        maximum of 1000 rows.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="kubernetes-terminal-behavior">
+                <title>Controlling terminal behavior</title>
+                <para>In most cases, the default behavior for a terminal works without modification.
+                    However, when connecting to certain systems, particularly operating systems
+                    other than Linux, the terminal behavior may need to be tweaked to allow it to
+                    operate properly. The settings in this section control that behavior.</para>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>backspace</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>backspace</secondary>
+                                        </indexterm>This parameter controls the ASCII code that the
+                                        backspace key sends to the remote system. 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 terminal sends ASCII code 127 (Delete) if this
+                                        option is not set.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>terminal-type</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>terminal type</secondary>
+                                        </indexterm>This parameter sets the terminal emulator type
+                                        string that is passed to the Kubernetes server. This
+                                        parameter is optional. If not specified,
+                                            &quot;<code>linux</code>&quot; is used as the terminal
+                                        emulator type by default.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="kubernetes-typescripts">
+                <title>Text session recording (typescripts)</title>
+                <para>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 by <parameter>typescript-path</parameter>:
+                            <filename><replaceable>NAME</replaceable></filename>, which contains the
+                    raw text data, and <filename><replaceable>NAME</replaceable>.timing</filename>,
+                    which contains timing information, where <replaceable>NAME</replaceable> is the
+                    value provided for the <parameter>typescript-name</parameter> parameter.</para>
+                <para>This format is compatible with the format used by the standard UNIX
+                        <command>script</command> command, and can be replayed using
+                        <command>scriptreplay</command> (if installed). For example, to replay a
+                    typescript called "<replaceable>NAME</replaceable>", you would run:</para>
+                <informalexample>
+                    <screen><prompt>$</prompt> <userinput>scriptreplay <replaceable>NAME</replaceable>.timing <replaceable>NAME</replaceable></userinput></screen>
+                </informalexample>
+                <important>
+                    <para>Guacamole will never overwrite an existing recording. If necessary, a
+                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
+                            <replaceable>NAME</replaceable> to avoid overwriting an existing
+                        recording. If even appending a numeric suffix does not help, the session
+                        will simply not be recorded.</para>
+                </important>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>typescript-path</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>typescripts</secondary>
+                                        </indexterm><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>text recording</secondary>
+                                        </indexterm>The directory in which typescript files should
+                                        be created. <emphasis>If a typescript needs to be recorded,
+                                            this parameter is required.</emphasis> Specifying this
+                                        parameter enables typescript recording. If this parameter is
+                                        omitted, no typescript will be recorded.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>create-typescript-path</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", the directory specified by the
+                                            <parameter>typescript-path</parameter> parameter will
+                                        automatically be created if it does not yet exist. Only the
+                                        final directory in the path will be created - if other
+                                        directories earlier in the path do not exist, automatic
+                                        creation will fail, and an error will be logged.</para>
+                                    <para><emphasis>This parameter is optional.</emphasis> By
+                                        default, the directory specified by the
+                                            <parameter>typescript-path</parameter> parameter will
+                                        not automatically be created, and attempts to record
+                                        typescripts in a non-existent directory will be logged as
+                                        errors.</para>
+                                    <para>This parameter only has an effect if typescript recording
+                                        is enabled. If the <parameter>typescript-path</parameter> is
+                                        not specified, recording of typescripts will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>typescript-name</parameter></entry>
+                                <entry>
+                                    <para>The base filename to use when determining the names for
+                                        the data and timing files of the typescript. <emphasis>This
+                                            parameter is optional.</emphasis> If omitted, the value
+                                        "typescript" will be used instead.</para>
+                                    <para>Each typescript consists of two files which are created
+                                        within the directory specified by
+                                            <parameter>typescript-path</parameter>:
+                                                <filename><replaceable>NAME</replaceable></filename>,
+                                        which contains the raw text data, and
+                                                <filename><replaceable>NAME</replaceable>.timing</filename>,
+                                        which contains timing information, where
+                                            <replaceable>NAME</replaceable> is the value provided
+                                        for the <parameter>typescript-name</parameter>
+                                        parameter.</para>
+                                    <para>This parameter only has an effect if typescript recording
+                                        is enabled. If the <parameter>typescript-path</parameter> is
+                                        not specified, recording of typescripts will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="kubernetes-recording">
+                <title>Graphical session recording</title>
+                <para>In addition to text-based recordings, Kubernetes sessions can be recorded
+                    graphically. These recordings take the form of Guacamole protocol dumps and are
+                    recorded automatically to a specified directory. Recordings can be subsequently
+                    translated to a normal video stream using the <command>guacenc</command> utility
+                    provided with guacamole-server.</para>
+                <para>For example, to produce a video called "<replaceable>NAME</replaceable>.m4v"
+                    from the recording "<replaceable>NAME</replaceable>", you would run:</para>
+                <informalexample>
+                    <screen><prompt>$</prompt> <userinput>guacenc <replaceable>/path/to/recording/NAME</replaceable></userinput></screen>
+                </informalexample>
+                <para>The <command>guacenc</command> utility has additional options for overriding
+                    default behavior, including tweaking the output format, which are documented in
+                    detail within the manpage:</para>
+                <informalexample>
+                    <screen><prompt>$</prompt> <userinput>man guacenc</userinput></screen>
+                </informalexample>
+                <para>If recording of key events is explicitly enabled using the
+                        <parameter>recording-include-keys</parameter> parameter, recordings can also
+                    be translated into human-readable interpretations of the keys pressed during the
+                    session using the <command>guaclog</command> utility. The usage of
+                        <command>guaclog</command> is analogous to <command>guacenc</command>, and
+                    results in the creation of a new text file containing the interpreted
+                    events:</para>
+                <informalexample>
+                    <screen><prompt>$</prompt> <userinput>guaclog <replaceable>/path/to/recording/NAME</replaceable></userinput><computeroutput>
+guaclog: INFO: Guacamole input log interpreter (guaclog) version 1.1.0
+guaclog: INFO: 1 input file(s) provided.
+guaclog: INFO: Writing input events from "<replaceable>/path/to/recording/NAME</replaceable>" to "<replaceable annotations="">/path/to/recording/NAME</replaceable>.txt" ...
+guaclog: INFO: All files interpreted successfully.</computeroutput>
+<prompt>$</prompt> </screen>
+                </informalexample>
+                <important>
+                    <para>Guacamole will never overwrite an existing recording. If necessary, a
+                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
+                            <replaceable>NAME</replaceable> to avoid overwriting an existing
+                        recording. If even appending a numeric suffix does not help, the session
+                        will simply not be recorded.</para>
+                </important>
+                <informaltable frame="all">
+                    <indexterm>
+                        <primary>parameters</primary>
+                        <secondary>Kubernetes</secondary>
+                    </indexterm>
+                    <tgroup cols="2">
+                        <colspec colname="c1" colnum="1" colwidth="1*"/>
+                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
+                        <thead>
+                            <row>
+                                <entry>Parameter name</entry>
+                                <entry>Description</entry>
+                            </row>
+                        </thead>
+                        <tbody>
+                            <row>
+                                <entry><parameter>recording-path</parameter></entry>
+                                <entry>
+                                    <para><indexterm>
+                                            <primary>Kubernetes</primary>
+                                            <secondary>graphical recording</secondary>
+                                        </indexterm>The directory in which screen recording files
+                                        should be created. <emphasis>If a graphical recording needs
+                                            to be created, then this parameter is
+                                            required.</emphasis> Specifying this parameter enables
+                                        graphical screen recording. If this parameter is omitted, no
+                                        graphical recording will be created.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>create-recording-path</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", the directory specified by the
+                                            <parameter>recording-path</parameter> parameter will
+                                        automatically be created if it does not yet exist. Only the
+                                        final directory in the path will be created - if other
+                                        directories earlier in the path do not exist, automatic
+                                        creation will fail, and an error will be logged.</para>
+                                    <para><emphasis>This parameter is optional.</emphasis> By
+                                        default, the directory specified by the
+                                            <parameter>recording-path</parameter> parameter will not
+                                        automatically be created, and attempts to create recordings
+                                        within a non-existent directory will be logged as
+                                        errors.</para>
+                                    <para>This parameter only has an effect if graphical recording
+                                        is enabled. If the <parameter>recording-path</parameter> is
+                                        not specified, graphical session recording will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>recording-name</parameter></entry>
+                                <entry>
+                                    <para>The filename to use for any created recordings.
+                                            <emphasis>This parameter is optional.</emphasis> If
+                                        omitted, the value "recording" will be used instead.</para>
+                                    <para>This parameter only has an effect if graphical recording
+                                        is enabled. If the <parameter>recording-path</parameter> is
+                                        not specified, graphical session recording will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>recording-exclude-output</parameter></entry>
+                                <entry>
+                                    <para>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. <emphasis>This parameter is
+                                            optional.</emphasis> If omitted, graphical output will
+                                        be included in the recording.</para>
+                                    <para>This parameter only has an effect if graphical recording
+                                        is enabled. If the <parameter>recording-path</parameter> is
+                                        not specified, graphical session recording will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>recording-exclude-mouse</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", user mouse events will be excluded from
+                                        the recording, producing a recording which lacks a visible
+                                        mouse cursor. <emphasis>This parameter is
+                                            optional.</emphasis> If omitted, mouse events will be
+                                        included in the recording.</para>
+                                    <para>This parameter only has an effect if graphical recording
+                                        is enabled. If the <parameter>recording-path</parameter> is
+                                        not specified, graphical session recording will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                            <row>
+                                <entry><parameter>recording-include-keys</parameter></entry>
+                                <entry>
+                                    <para>If set to "true", user key events will be included in the
+                                        recording. The recording can subsequently be passed through
+                                        the <command>guaclog</command> utility to produce a
+                                        human-readable interpretation of the keys pressed during the
+                                        session. <emphasis>This parameter is optional.</emphasis> If
+                                        omitted, key events will be not included in the
+                                        recording.</para>
+                                    <para>This parameter only has an effect if graphical recording
+                                        is enabled. If the <parameter>recording-path</parameter> is
+                                        not specified, graphical session recording will be disabled,
+                                        and this parameter will be ignored.</para>
+                                </entry>
+                            </row>
+                        </tbody>
+                    </tgroup>
+                </informaltable>
+            </section>
+            <section xml:id="adding-kubernetes">
+                <title>Adding a Kubernetes connection</title>
+                <indexterm>
+                    <primary>Kubernetes</primary>
+                    <secondary>adding</secondary>
+                </indexterm>
+                <para>If you are using the default authentication built into Guacamole, and you wish
+                    to grant access to a Kubernetes connection to a particular user, you need to
+                    locate the <code>&lt;authorize></code> section for that user within your
+                        <filename>user-mapping.xml</filename>, and add a section like the following
+                    within it:</para>
+                <programlisting>&lt;connection name="<replaceable>Unique Name</replaceable>">
+    &lt;protocol>kubernetes&lt;/protocol>
+    &lt;param name="hostname"><replaceable>localhost</replaceable>&lt;/param>
+    &lt;param name="pod"><replaceable>mypod</replaceable>&lt;/param>
+&lt;/connection></programlisting>
+                <para>If added exactly as above, a new connection named "<replaceable>Unique
+                        Name</replaceable>" will be available to the user associated with the
+                        <code>&lt;authorize></code> section containing it. The connection will
+                    connect to the Kubernetes server running on <replaceable>localhost</replaceable>
+                    and attach to the first container of the pod
+                    <replaceable>mypod</replaceable>.</para>
+            </section>
+        </section>
         <section xml:id="parameter-tokens">
             <title>Parameter tokens</title>
             <para>The values of connection parameters can contain "tokens" which will be replaced by
diff --git a/src/chapters/docker.xml b/src/chapters/docker.xml
index 2d0ed59..245dcbb 100644
--- a/src/chapters/docker.xml
+++ b/src/chapters/docker.xml
@@ -17,7 +17,7 @@
             <listitem>
                 <para>Provides the <package>guacd</package> daemon, built from the released
                         <package>guacamole-server</package> source with support for VNC, RDP, SSH,
-                    and telnet.</para>
+                    telnet, and Kubernetes.</para>
             </listitem>
         </varlistentry>
         <varlistentry>
@@ -47,10 +47,10 @@
     <section xml:id="guacd-docker-image">
         <title>Running the <package>guacd</package> Docker image</title>
         <para>The <package>guacd</package> Docker image is built from the released
-                <package>guacamole-server</package> source with support for VNC, RDP, SSH, and
-            telnet. Common pitfalls like installing the required dependencies, installing fonts for
-            SSH or telnet, and ensuring the FreeRDP plugins are installed to the correct location
-            are all taken care of. It will simply just work.</para>
+                <package>guacamole-server</package> source with support for VNC, RDP, SSH, telnet,
+            and Kubernetes. Common pitfalls like installing the required dependencies, installing
+            fonts for SSH, telnet, or Kubernetes, and ensuring the FreeRDP plugins are installed to
+            the correct location are all taken care of. It will simply just work.</para>
         <section xml:id="guacd-docker-guacamole">
             <title>Running <package>guacd</package> for use by the Guacamole Docker image</title>
             <para>When running the <package>guacd</package> image with the intent of linking to a
diff --git a/src/chapters/installing.xml b/src/chapters/installing.xml
index 7495b0d..54de3b2 100644
--- a/src/chapters/installing.xml
+++ b/src/chapters/installing.xml
@@ -62,6 +62,10 @@
             <secondary>compiling</secondary>
         </indexterm>
         <indexterm>
+            <primary><package>libguac-client-kubernetes</package></primary>
+            <secondary>compiling</secondary>
+        </indexterm>
+        <indexterm>
             <primary><package>guacamole-server</package></primary>
             <secondary>compiling</secondary>
         </indexterm>
@@ -276,6 +280,10 @@
                     <para>Telnet depends on <package>libtelnet</package> and
                             <package>Pango</package>.</para>
                 </listitem>
+                <listitem>
+                    <para>Kubernetes support depends on <package>libwebsockets</package>,
+                            <package>OpenSSL</package>, and <package>Pango</package>.</para>
+                </listitem>
             </itemizedlist>
             <para>The <command>guacenc</command> utility, provided by
                     <package>guacamole-server</package> to translate screen recordings into video,
@@ -359,9 +367,10 @@
                         <row>
                             <entry><link xl:href="http://www.pango.org/">Pango</link></entry>
                             <entry>
-                                <para>Pango is a text layout library which Guacamole's SSH and
-                                    telnet support uses to render text. If you do not wish to build
-                                    SSH or telnet support, this library is not needed.</para>
+                                <para>Pango is a text layout library which Guacamole uses to render
+                                    text for protocols that require a terminal (Kubernetes, SSH, and
+                                    telnet). If you do not wish to build any terminal-based protocol
+                                    support, this library is not needed.</para>
                                 <informaltable frame="none" rowheader="firstcol">
                                     <tgroup cols="2">
                                         <colspec colname="c1" colnum="1" colwidth="1.0*"/>
@@ -453,6 +462,30 @@
                             </entry>
                         </row>
                         <row>
+                            <entry><link xl:href="https://libwebsockets.org/">libwebsockets</link></entry>
+                            <entry>
+                                <para>libwebsockets is required for Kubernetes support. If you do
+                                    not wish to build Kubernetes support, this library is not
+                                    needed.</para>
+                                <informaltable frame="none" rowheader="firstcol">
+                                    <tgroup cols="2">
+                                        <colspec colname="c1" colnum="1" colwidth="1.0*"/>
+                                        <colspec colname="c2" colnum="2" colwidth="1.0*"/>
+                                        <tbody>
+                                            <row>
+                                                <entry>Debian / Ubuntu package</entry>
+                                                <entry><package>libwebsockets-dev</package></entry>
+                                            </row>
+                                            <row>
+                                                <entry>Fedora / CentOS / RHEL package</entry>
+                                                <entry><package>libwebsockets-devel</package></entry>
+                                            </row>
+                                        </tbody>
+                                    </tgroup>
+                                </informaltable>
+                            </entry>
+                        </row>
+                        <row>
                             <entry><link
                                     xl:href="http://www.freedesktop.org/wiki/Software/PulseAudio/"
                                     >PulseAudio</link></entry>
@@ -488,10 +521,12 @@
                                 <para>If you have libssl installed, guacd will be built with SSL
                                     support, allowing communication between the web application and
                                     guacd to be encrypted. This library is also required for SSH
-                                    support for the sake of manipulating public/private keys.</para>
+                                    support, for manipulating public/private keys, and for
+                                    Kubernetes support, for SSL/TLS connections to the Kubernetes
+                                    server.</para>
                                 <para>Without SSL support, there will be no option to encrypt
-                                    communication to guacd, and support for SSH cannot be
-                                    built.</para>
+                                    communication to guacd, and support for SSH and Kubernetes
+                                    cannot be built.</para>
                                 <informaltable frame="none" rowheader="firstcol">
                                     <tgroup cols="2">
                                         <colspec colname="c1" colnum="1" colwidth="1.0*"/>
@@ -648,15 +683,17 @@
      libVNCServer ........ yes
      libvorbis ........... yes
      libpulse ............ yes
+     libwebsockets ....... yes
      libwebp ............. yes
      wsock32 ............. no
 
    Protocol support:
 
-      RDP ....... yes
-      SSH ....... yes
-      Telnet .... yes
-      VNC ....... yes
+      Kubernetes .... yes
+      RDP ........... yes
+      SSH ........... yes
+      Telnet ........ yes
+      VNC ........... yes
 
    Services / tools:
 
@@ -695,15 +732,16 @@
                 something you wanted is missing, simply install the corresponding dependencies and
                 run <filename>configure</filename> again.</para>
             <important>
-                <para>SSH and telnet support both require that fonts are installed in order to
-                    function - output from the terminal cannot be rendered otherwise. Support for
-                    SSH and telnet will build just fine if fonts are not installed, but it will fail
-                    to connect when used:</para>
+                <para>All protocols that require a terminal (Kubernetes, SSH, and telnet) require
+                    that fonts are installed on the Guacamole server in order to function, as output
+                    from the terminal cannot be rendered otherwise. Support for these protocols will
+                    build just fine if fonts are not installed, but it will fail to connect when
+                    used:</para>
                 <informalexample>
                     <screen>Aug 23 14:09:45 my-server guacd[5606]: Unable to get font "monospace"</screen>
                 </informalexample>
-                <para>If SSH or telnet connections are not working and you see such a message in
-                    syslog, install fonts and try again.</para>
+                <para>If terminal-based connections are not working and you see such a message in
+                    syslog, you should make sure fonts are installed and try again.</para>
             </important>
             <para>Once <filename>configure</filename> is finished, just type
                     "<userinput>make</userinput>", and it will <package>guacamole-server</package>