From 118541d5b3de5290d64a1e137d7bfb59afd8db4e Mon Sep 17 00:00:00 2001 From: Michael Still Date: Wed, 3 Jun 2026 13:10:47 +1000 Subject: 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 --- doc/source/support_matrix.rst | 9 +++++ docker/kerbside/kerbside-api/Dockerfile.j2 | 9 +++++ docker/kerbside/kerbside-api/extend_start.sh | 4 +++ docker/kerbside/kerbside-base/Dockerfile.j2 | 38 ++++++++++++++++++++++ docker/kerbside/kerbside-proxy/Dockerfile.j2 | 9 +++++ docker/kerbside/kerbside-proxy/extend_start.sh | 4 +++ kolla/common/config.py | 1 + kolla/common/sources.py | 4 +++ kolla/common/users.py | 4 +++ .../add-kerbside-images-04d28d7e76e5bc1f.yaml | 9 +++++ 10 files changed, 91 insertions(+) create mode 100644 docker/kerbside/kerbside-api/Dockerfile.j2 create mode 100644 docker/kerbside/kerbside-api/extend_start.sh create mode 100644 docker/kerbside/kerbside-base/Dockerfile.j2 create mode 100644 docker/kerbside/kerbside-proxy/Dockerfile.j2 create mode 100644 docker/kerbside/kerbside-proxy/extend_start.sh create mode 100644 releasenotes/notes/add-kerbside-images-04d28d7e76e5bc1f.yaml diff --git a/doc/source/support_matrix.rst b/doc/source/support_matrix.rst index 2cce5c99a..bec1aa0bd 100644 --- a/doc/source/support_matrix.rst +++ b/doc/source/support_matrix.rst @@ -106,3 +106,12 @@ Currently unbuildable images For a list of currently unbuildable images please look into ``kolla/image/unbuildable.py`` file - ``UNBUILDABLE_IMAGES`` dictionary. + +SPICE limitations +================= + +The new OpenStack Compute console type ``spice-direct`` requires that +SPICE support be compiled into the qemu running the instance. 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. 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 diff --git a/kolla/common/config.py b/kolla/common/config.py index 8a80e1f88..cdeb425a5 100644 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -88,6 +88,7 @@ _PROFILE_OPTS = [ 'designate', 'gnocchi', 'ironic', + 'kerbside', 'magnum', 'manila', 'masakari', diff --git a/kolla/common/sources.py b/kolla/common/sources.py index 97edec1b1..08c4a4639 100644 --- a/kolla/common/sources.py +++ b/kolla/common/sources.py @@ -152,6 +152,10 @@ SOURCES = { 'type': 'url', 'location': ('$tarballs_base/openstack/keystone/' 'keystone-${openstack_branch}.tar.gz')}, + 'kerbside-base': { + 'type': 'git', + 'reference': 'develop', + 'location': ('https://github.com/shakenfist/kerbside')}, 'kolla-toolbox': { 'type': 'url', 'location': ('$tarballs_base/openstack/requirements/' diff --git a/kolla/common/users.py b/kolla/common/users.py index cd0a66660..19ebde20f 100644 --- a/kolla/common/users.py +++ b/kolla/common/users.py @@ -350,4 +350,8 @@ USERS = { 'uid': 42494, 'gid': 42494, }, + 'kerbside-user': { + 'uid': 42495, + 'gid': 42495, + } } diff --git a/releasenotes/notes/add-kerbside-images-04d28d7e76e5bc1f.yaml b/releasenotes/notes/add-kerbside-images-04d28d7e76e5bc1f.yaml new file mode 100644 index 000000000..78be07bb9 --- /dev/null +++ b/releasenotes/notes/add-kerbside-images-04d28d7e76e5bc1f.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + This release 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. -- cgit v1.2.3