Skip to content

Commit 6cff19b

Browse files
authored
Merge pull request #938 from stackhpc/zed-yoga-merge
zed: yoga merge
2 parents fae374f + f557aed commit 6cff19b

File tree

17 files changed

+178
-36
lines changed

17 files changed

+178
-36
lines changed

.github/workflows/stackhpc-all-in-one.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ jobs:
107107
fi
108108
echo kayobe_image=$kayobe_image >> $GITHUB_OUTPUT
109109
110-
- name: Make sure dockerd is running and test Docker.
110+
- name: Make sure dockerd is running and test Docker
111111
run: |
112-
docker run --rm hello-world
112+
docker ps
113113
114114
- name: Output image tag
115115
id: image_tag

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ jobs:
8585
# Setting KAYOBE_USER_UID and KAYOBE_USER_GID to 1001 to match docker's defaults
8686
# so that docker can run as a privileged user within the Kayobe image.
8787
- name: Build and push Docker image
88-
uses: docker/build-push-action@v4
88+
uses: docker/build-push-action@v5
8989
with:
9090
file: ./.automation/docker/kayobe/Dockerfile
9191
context: .

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ jobs:
116116

117117
- name: Make sure dockerd is running and test Docker
118118
run: |
119-
docker run --rm hello-world
119+
docker ps
120120
121121
- name: Install Kayobe
122122
run: |
@@ -127,10 +127,11 @@ jobs:
127127
pip install -U pip &&
128128
pip install ../src/kayobe
129129
130-
# Required for Docker registry login. Normally installed during host configure.
130+
# Required for Pulp auth proxy deployment and Docker registry login.
131+
# Normally installed during host configure.
131132
- name: Install Docker Python SDK
132133
run: |
133-
pip install --user docker
134+
sudo pip install docker
134135
135136
- name: Configure localhost as a seed
136137
run: |
@@ -141,11 +142,23 @@ jobs:
141142
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3
142143
EOF
143144
145+
# See etc/kayobe/ansible/roles/pulp_auth_proxy/README.md for details.
146+
# NOTE: We override pulp_auth_proxy_conf_path to a path shared by the
147+
# runner and dind containers.
148+
- name: Deploy an authenticating package repository mirror proxy
149+
run: |
150+
source venvs/kayobe/bin/activate &&
151+
source src/kayobe-config/kayobe-env --environment ci-builder &&
152+
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/pulp-auth-proxy.yml -e pulp_auth_proxy_conf_path=/home/runner/_work/pulp_proxy
153+
env:
154+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
155+
144156
- name: Build and push kolla overcloud images
145157
run: |
146158
args="${{ github.event.inputs.regexes }}"
147159
args="$args -e kolla_base_distro=${{ matrix.distro }}"
148160
args="$args -e kolla_tag=$KOLLA_TAG"
161+
args="$args -e stackhpc_repo_mirror_auth_proxy_enabled=true"
149162
if ${{ inputs.push }} == 'true'; then
150163
args="$args --push"
151164
fi
@@ -161,6 +174,7 @@ jobs:
161174
run: |
162175
args="-e kolla_base_distro=${{ matrix.distro }}"
163176
args="$args -e kolla_tag=$KOLLA_TAG"
177+
args="$args -e stackhpc_repo_mirror_auth_proxy_enabled=true"
164178
if ${{ inputs.push }} == 'true'; then
165179
args="$args --push"
166180
fi

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,7 @@ etc/kayobe/environments/aufn-ceph/kolla/config/nova/ceph.client.glance.keyring
5858

5959
# Tempest logs
6060
tempest-artifacts
61+
62+
# Ansible Galaxy roles & collections
63+
etc/kayobe/ansible/roles/*\.*/
64+
etc/kayobe/ansible/collections/

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

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

@@ -111,6 +139,9 @@ At this point you are ready to build and push some container images.
111139
kayobe seed container image build --push
112140
kayobe overcloud container image build --push
113141
142+
If using an :ref:`authenticating Pulp proxy <authenticating-pulp-proxy>`,
143+
append ``-e stackhpc_repo_mirror_auth_proxy_enabled=true`` to these commands.
144+
114145
The container images are tagged as |current_release|-<datetime>.
115146

116147
To use the new images, edit
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
# See roles/pulp_auth_proxy/README.md for details.
3+
4+
- name: Deploy Pulp auth proxy
5+
hosts: container-image-builders
6+
gather_facts: false
7+
tasks:
8+
- import_role:
9+
name: pulp_auth_proxy
10+
vars:
11+
pulp_auth_proxy_url: "{{ stackhpc_repo_mirror_url }}"
12+
pulp_auth_proxy_username: "{{ stackhpc_repo_mirror_username }}"
13+
pulp_auth_proxy_password: "{{ stackhpc_repo_mirror_password }}"
14+
pulp_auth_proxy_conf_path: "{{ base_path }}/containers/pulp_proxy"

etc/kayobe/ansible/requirements.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ collections:
1111
- name: stackhpc.hashicorp
1212
version: 2.4.0
1313
- name: stackhpc.kayobe_workflows
14-
version: 1.0.2
14+
version: 1.0.3
1515
roles:
1616
- src: stackhpc.vxlan
1717
- name: ansible-lockdown.ubuntu22_cis

etc/kayobe/ansible/reset-bls-entries.yml

100755100644
File mode changed.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Pulp Auth Proxy
2+
3+
There is currently no practical, secure way to provide credentials for
4+
accessing Ark's authenticated package repositories from within a Kolla build.
5+
Docker provides [build
6+
secrets](https://docs.docker.com/build/building/secrets/), but these must be
7+
explicitly requested for each RUN statement, making them challenging to use in
8+
Kolla.
9+
10+
This role deploys an Nginx container that runs as a reverse proxy, injecting an
11+
HTTP basic authentication header into requests.
12+
13+
Because this proxy bypasses Pulp's authentication, it must not be exposed to
14+
any untrusted environment.
15+
16+
## Role variables
17+
18+
* `pulp_auth_proxy_pulp_url`: URL of the Pulp server to proxy requests to.
19+
* `pulp_auth_proxy_username`: Username of the Pulp server to proxy requests to.
20+
* `pulp_auth_proxy_password`: Password of the Pulp server to proxy requests to.
21+
* `pulp_auth_proxy_conf_path`: Path to a directory in which to write Nginx
22+
configuration.
23+
* `pulp_auth_proxy_listen_ip`: IP address on the Docker host on which to
24+
listen. Default is `127.0.0.1`.
25+
* `pulp_auth_proxy_listen_port`: Port on the Docker host on which to listen.
26+
Default is 80.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
pulp_auth_proxy_url:
3+
pulp_auth_proxy_username:
4+
pulp_auth_proxy_password:
5+
pulp_auth_proxy_conf_path:
6+
pulp_auth_proxy_listen_ip: 127.0.0.1
7+
pulp_auth_proxy_listen_port: 80

0 commit comments

Comments
 (0)