aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorMichael Still <mikal@stillhq.com>2026-06-03 13:10:47 +1000
committerMichael Still <mikal@stillhq.com>2026-06-03 13:10:47 +1000
commit118541d5b3de5290d64a1e137d7bfb59afd8db4e (patch)
tree6bc4664f0c61a24e1a37d725bcc5df1c58701859 /docker
parentcbdbd894b06b049e36ecd4fab4d0ecc3a49e0c00 (diff)
downloadkolla-118541d5b3de5290d64a1e137d7bfb59afd8db4e.tar.gz
kolla-118541d5b3de5290d64a1e137d7bfb59afd8db4e.zip
Implement container image build for kerbside.
This change adds images for Kerbside. Kerbside is a SPICE protocol native proxy used to expose the new spice-direct console type provided by Openstack Compute. This allows high fidelity virtual desktop experiences without requiring transcoding of the console into HTML5 in Horizon, or allowing users direct access to the console ports on your hypervisors. Sadly, Red Hat chose to remove SPICE support from qemu in RHEL9, and Rocky Linux has followed along. You therefore _must_ run the Debian or Ubuntu container images if you wish to use the ``spice-direct`` console type. Architecturally Kerbside has two components -- an API service which turns console access URLs from Nova into URLs to ``.vv`` files, and a proxy service which actually proxies the SPICE traffic. These are handled as separate container images here because they're quite different. One is a WSGI REST API, and the other is a daemon. It is also likely that deployers would choose to host these on different machines. Finally, the proxy service needs to be special cased in load balancing because it strongly expects to terminate TLS itself. The haproxy is therefore configured as a layer 4 proxy in this case. Depends-On: https://review.opendev.org/c/openstack/kolla/+/991249 Change-Id: If60a70745462e1360cfadaab1a5a8d75b7fdeb21 Partial-Bug: #2131793 (spice-direct consoles) Signed-off-by: Michael Still <mikal@stillhq.com>
Diffstat (limited to 'docker')
-rw-r--r--docker/kerbside/kerbside-api/Dockerfile.j29
-rw-r--r--docker/kerbside/kerbside-api/extend_start.sh4
-rw-r--r--docker/kerbside/kerbside-base/Dockerfile.j238
-rw-r--r--docker/kerbside/kerbside-proxy/Dockerfile.j29
-rw-r--r--docker/kerbside/kerbside-proxy/extend_start.sh4
5 files changed, 64 insertions, 0 deletions
diff --git a/docker/kerbside/kerbside-api/Dockerfile.j2 b/docker/kerbside/kerbside-api/Dockerfile.j2
new file mode 100644
index 000000000..4e5e1f7a1
--- /dev/null
+++ b/docker/kerbside/kerbside-api/Dockerfile.j2
@@ -0,0 +1,9 @@
+FROM {{ namespace }}/{{ image_prefix }}kerbside-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+RUN chmod 644 /usr/local/bin/kolla_extend_start
+
+USER kerbside
diff --git a/docker/kerbside/kerbside-api/extend_start.sh b/docker/kerbside/kerbside-api/extend_start.sh
new file mode 100644
index 000000000..92ef80a22
--- /dev/null
+++ b/docker/kerbside/kerbside-api/extend_start.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Make the log directory
+mkdir -p /var/log/kolla/kerbside
diff --git a/docker/kerbside/kerbside-base/Dockerfile.j2 b/docker/kerbside/kerbside-base/Dockerfile.j2
new file mode 100644
index 000000000..d2e31ca0e
--- /dev/null
+++ b/docker/kerbside/kerbside-base/Dockerfile.j2
@@ -0,0 +1,38 @@
+FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% block kerbside_base_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{{ macros.configure_user(name='kerbside', groups='kerbside') }}
+
+{% if base_package_type == 'rpm' %}
+ {% set kerbside_packages = [
+ 'mariadb-devel',
+ 'pkgconfig'
+ ] %}
+{% elif base_package_type == 'deb' %}
+ {% set kerbside_packages = [
+ 'libmariadb-dev-compat',
+ 'pkg-config'
+ ] %}
+{% endif %}
+
+{{ macros.install_packages(kerbside_packages | customizable("packages")) }}
+
+{% set kerbside_pip_packages = [
+ '/kerbside'
+] %}
+
+ADD kerbside-base-archive /kerbside-source
+RUN ln -s kerbside-source/* kerbside \
+ && if [ "$(ls /plugins)" ]; then \
+ {{ macros.install_pip(kerbside_plugins_pip_packages) }}; \
+ fi \
+ && {{ macros.install_pip(kerbside_pip_packages | customizable("pip_packages"), false) }} \
+ && rm -f /etc/machine-id
+
+{% block kerbside_base_footer %}{% endblock %}
diff --git a/docker/kerbside/kerbside-proxy/Dockerfile.j2 b/docker/kerbside/kerbside-proxy/Dockerfile.j2
new file mode 100644
index 000000000..4e5e1f7a1
--- /dev/null
+++ b/docker/kerbside/kerbside-proxy/Dockerfile.j2
@@ -0,0 +1,9 @@
+FROM {{ namespace }}/{{ image_prefix }}kerbside-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+RUN chmod 644 /usr/local/bin/kolla_extend_start
+
+USER kerbside
diff --git a/docker/kerbside/kerbside-proxy/extend_start.sh b/docker/kerbside/kerbside-proxy/extend_start.sh
new file mode 100644
index 000000000..92ef80a22
--- /dev/null
+++ b/docker/kerbside/kerbside-proxy/extend_start.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Make the log directory
+mkdir -p /var/log/kolla/kerbside