Skip to content

Commit bd03772

Browse files
committed
Use authenticating Pulp proxy during container image builds
This change uses the authenticating Pulp proxy added in 6320be9 to provide container image builds access to Ark's authenticated package repositories without injecting the credentials into the built images or their metadata.
1 parent 6dd2e7f commit bd03772

File tree

5 files changed

+74
-8
lines changed

5 files changed

+74
-8
lines changed

.github/workflows/stackhpc-container-image-build.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,11 @@ jobs:
136136
pip install -U pip &&
137137
pip install ../src/kayobe
138138
139-
# Required for Docker registry login. Normally installed during host configure.
139+
# Required for Pulp auth proxy deployment and Docker registry login.
140+
# Normally installed during host configure.
140141
- name: Install Docker Python SDK
141142
run: |
142-
pip install --user docker
143+
sudo pip install docker
143144
144145
- name: Configure localhost as a seed
145146
run: |
@@ -150,11 +151,23 @@ jobs:
150151
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3
151152
EOF
152153
154+
# See etc/kayobe/ansible/roles/pulp_auth_proxy/README.md for details.
155+
# NOTE: We override pulp_auth_proxy_conf_path to a path shared by the
156+
# runner and dind containers.
157+
- name: Deploy an authenticating package repository mirror proxy
158+
run: |
159+
source venvs/kayobe/bin/activate &&
160+
source src/kayobe-config/kayobe-env --environment ci-builder &&
161+
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/pulp-auth-proxy.yml -e pulp_auth_proxy_conf_path=/home/runner/_work/pulp_proxy
162+
env:
163+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
164+
153165
- name: Build and push kolla overcloud images
154166
run: |
155167
args="${{ github.event.inputs.regexes }}"
156168
args="$args -e kolla_base_distro=${{ matrix.distro }}"
157169
args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
170+
args="$args -e stackhpc_repo_mirror_auth_proxy_enabled=true"
158171
if ${{ inputs.push }} == 'true'; then
159172
args="$args --push"
160173
fi
@@ -169,6 +182,7 @@ jobs:
169182
run: |
170183
args="-e kolla_base_distro=${{ matrix.distro }}"
171184
args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
185+
args="$args -e stackhpc_repo_mirror_auth_proxy_enabled=true"
172186
if ${{ inputs.push }} == 'true'; then
173187
args="$args --push"
174188
fi

doc/source/contributor/environments/ci-builder.rst

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,34 @@ Next, configure the host OS & services.
9595
9696
kayobe seed host configure
9797
98+
.. _authenticating-pulp-proxy:
99+
100+
Authenticating Pulp proxy
101+
-------------------------
102+
103+
If you are building against authenticated package repositories such as those in
104+
`Ark <https://ark.stackhpc.com>`_, you will need to provide secure access to
105+
the repositories without leaking credentials into the built images or their
106+
metadata. This is typically not the case for a client-local Pulp, which
107+
provides unauthenticated read-only access to the repositories on a trusted
108+
network.
109+
110+
Docker provides `build
111+
secrets <https://docs.docker.com/build/building/secrets/>`_, but these must be
112+
explicitly requested for each RUN statement, making them challenging to use in
113+
Kolla.
114+
115+
StackHPC Kayobe Configuration provides support for deploying an authenticating
116+
Pulp proxy that injects an HTTP basic auth header into requests that it
117+
proxies. Because this proxy bypasses Pulp's authentication, it must not be
118+
exposed to any untrusted environment.
119+
120+
To deploy the proxy:
121+
122+
.. parsed-literal::
123+
124+
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/pulp-auth-proxy.yml
125+
98126
Building images
99127
===============
100128

@@ -105,6 +133,9 @@ At this point you are ready to build and push some container images.
105133
kayobe seed container image build --push
106134
kayobe overcloud container image build --push
107135
136+
If using an :ref:`authenticating Pulp proxy <authenticating-pulp-proxy>`,
137+
append ``-e stackhpc_repo_mirror_auth_proxy_enabled=true`` to these commands.
138+
108139
The container images are tagged as |current_release|-<datetime>.
109140

110141
To use the new images, edit

etc/kayobe/environments/ci-builder/stackhpc-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ resolv_is_managed: false
4343
# Host and port of a package repository mirror.
4444
# Build against the development Pulp service repositories.
4545
# Use Ark's package repositories to install packages.
46-
stackhpc_repo_mirror_url: "{{ stackhpc_release_pulp_url }}"
46+
stackhpc_repo_mirror_url: "{{ stackhpc_repo_mirror_auth_proxy_url if stackhpc_repo_mirror_auth_proxy_enabled | bool else stackhpc_release_pulp_url }}"
4747
stackhpc_repo_mirror_username: "{{ stackhpc_docker_registry_username }}"
4848
stackhpc_repo_mirror_password: "{{ stackhpc_docker_registry_password }}"
4949

etc/kayobe/kolla.yml

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,16 +287,21 @@ base_centos_repo_overrides_post_yum_rocky_list: "{{ stackhpc_rocky_9_repos + sta
287287
base_centos_repo_overrides_post_yum_list: "{{ base_centos_repo_overrides_post_yum_centos_list if kolla_base_distro == 'centos' else base_centos_repo_overrides_post_yum_rocky_list }}"
288288
stackhpc_yum_repos: "{{ stackhpc_centos_stream_repos if kolla_base_distro == 'centos' else stackhpc_rocky_9_repos }}"
289289

290+
# Apt sources.list entry prefix.
291+
# If using an authenticating Pulp proxy we need to trust the repository because
292+
# the certificate provided by the upstream repo will not match the proxy's IP.
293+
stackhpc_ubuntu_repo_prefix: "deb {% if stackhpc_repo_mirror_auth_proxy_enabled | bool %}[trusted=yes] {% endif %}"
294+
290295
# List of base repositories for Ubuntu Focal.
291296
stackhpc_ubuntu_focal_base_repos:
292-
- "deb {{ stackhpc_repo_ubuntu_focal_url }} focal main universe"
293-
- "deb {{ stackhpc_repo_ubuntu_focal_url }} focal-updates main universe"
294-
- "deb {{ stackhpc_repo_ubuntu_focal_url }} focal-backports main universe"
295-
- "deb {{ stackhpc_repo_ubuntu_focal_security_url }} focal-security main universe"
297+
- "{{ stackhpc_ubuntu_repo_prefix }}{{ stackhpc_repo_ubuntu_focal_url }} focal main universe"
298+
- "{{ stackhpc_ubuntu_repo_prefix }}{{ stackhpc_repo_ubuntu_focal_url }} focal-updates main universe"
299+
- "{{ stackhpc_ubuntu_repo_prefix }}{{ stackhpc_repo_ubuntu_focal_url }} focal-backports main universe"
300+
- "{{ stackhpc_ubuntu_repo_prefix }}{{ stackhpc_repo_ubuntu_focal_security_url }} focal-security main universe"
296301

297302
# List of UCA repositories for Ubuntu Focal.
298303
stackhpc_ubuntu_focal_uca_repos:
299-
- "deb {{ stackhpc_repo_ubuntu_cloud_archive_url }} focal-updates/{{ openstack_release }} main"
304+
- "{{ stackhpc_ubuntu_repo_prefix }}{{ stackhpc_repo_ubuntu_cloud_archive_url }} focal-updates/{{ openstack_release }} main"
300305

301306
# List of repositories for Ubuntu Focal.
302307
stackhpc_ubuntu_focal_repos: "{{ stackhpc_ubuntu_focal_base_repos + stackhpc_ubuntu_focal_uca_repos }}"
@@ -323,6 +328,10 @@ kolla_build_blocks:
323328
{% else %}
324329
RUN \
325330
rm /etc/apt/sources.list && \
331+
{% if stackhpc_repo_mirror_auth_proxy_enabled | bool %}
332+
{# We lack the ca-certificates package at this stage, so don't verify the CA initially #}
333+
echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/90no-verify-peer && \
334+
{% endif %}
326335
{% for repo in stackhpc_ubuntu_focal_base_repos %}
327336
echo '{{ repo }}' >> /etc/apt/sources.list {% if not loop.last %} && \
328337
{% endif %}
@@ -350,6 +359,7 @@ kolla_build_blocks:
350359
{% endif %}
351360
RUN \
352361
rm /etc/apt/sources.list && \
362+
rm -f /etc/apt/apt.conf.d/90no-verify-peer && \
353363
{% for repo in stackhpc_ubuntu_focal_repos %}
354364
echo '{{ repo }}' >> /etc/apt/sources.list {% if not loop.last %} && \
355365
{% endif %}

etc/kayobe/stackhpc.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ stackhpc_repo_mirror_username:
88
# Password of a package repository mirror.
99
stackhpc_repo_mirror_password:
1010

11+
# Whether to use an authenticating reverse proxy to access the package
12+
# repository mirror. This may be used when building container images, to avoid
13+
# injecting package repository mirror credentials into the built images. See
14+
# ansible/roles/pulp_auth_proxy/README.md for details.
15+
stackhpc_repo_mirror_auth_proxy_enabled: false
16+
17+
# URL of an authenticating reverse proxy used to access the package repository
18+
# mirror. Used during container image builds when
19+
# stackhpc_repo_mirror_auth_proxy_enabled is true.
20+
stackhpc_repo_mirror_auth_proxy_url: "http://localhost"
21+
1122
# Distribution name. Either 'development' or 'production'.
1223
stackhpc_repo_distribution: "development"
1324

0 commit comments

Comments
 (0)