Retain narrow migration egress and pin cadence-capable receiver release
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a13eab-1e6a-7b33-9c37-372e90ada3a2
This commit is contained in:
tegwick 2026-10-15 21:32:15 +02:00
parent 5227fb14e4
commit 1269a0efc6
5 changed files with 91 additions and 4 deletions

View file

@ -8,13 +8,29 @@ the server port or export a copy before applying.
Apply order is documented in `docs/operator-runbook.md`. Do not apply the
Deployment until:
1. The image digest is pinned (currently `sha256:ec15f63d…` from commit `bc3d80f`).
1. The image digest is pinned (currently `sha256:b479801b…` built from source commit `5227fb14e47f26a01930be4611360fd90f740662`).
2. Secrets `audit-core-database`, `audit-core-database-migrate`, and
`audit-core-senders` exist. ConfigMap `audit-core-senders-scope` is
applied (`deploy/senders-scope.yaml`) before the Deployment mounts it.
3. Job `audit-core-migrate` has completed.
3. Apply `deploy/migrate-egress.yaml` before starting the migration Job.
The default-deny policy selects every pod, while the receiver egress policy
deliberately selects component `receiver` only. Migration pods need their
own exact component `migrate` exception: DNS TCP/UDP53 to kube-dns in
kube-system and PostgreSQL TCP5432 to platform-pg pods in databases.
No API-server access or service account token is needed.
4. Job `audit-core-migrate` has completed and ledger includes
`0007-import-receipts` before the current receiver image is released.
```bash
make image-build
make deploy-dry-run
```
The 2026-10-15 NK-WP-0035 migration retries exposed this missing dedicated
egress exception: the first two attempts could not resolve/reach PostgreSQL.
The bounded policy is retained as source so future releases do not depend on
an undocumented repair. Both receiver and migration Job pin immutable image
`forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271`,
built from source `5227fb14e47f26a01930be4611360fd90f740662`; this follow-up
changes deployment configuration only and requires no image rebuild. Migration
0007 adds import receipts and indexes without changing existing event rows.

View file

@ -86,7 +86,7 @@ spec:
- name: audit-core
# REPLACE at release time with the built digest. A mutable tag is not
# an immutable image, and `:latest` must never be the only reference.
image: forgejo.coulomb.social/coulomb/audit-core@sha256:ec15f63d49226bfe507af2bc38ffbd5e83f549ba2c6d1ae7a338e7e053f34615
image: forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271
imagePullPolicy: IfNotPresent
ports:
- name: http

View file

@ -0,0 +1,69 @@
{
"apiVersion": "networking.k8s.io/v1",
"kind": "NetworkPolicy",
"metadata": {
"name": "audit-core-migrate-egress",
"namespace": "audit-core"
},
"spec": {
"podSelector": {
"matchLabels": {
"app.kubernetes.io/name": "audit-core",
"app.kubernetes.io/component": "migrate"
}
},
"policyTypes": [
"Egress"
],
"egress": [
{
"to": [
{
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "databases"
}
},
"podSelector": {
"matchLabels": {
"cnpg.io/cluster": "platform-pg"
}
}
}
],
"ports": [
{
"protocol": "TCP",
"port": 5432
}
]
},
{
"to": [
{
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "kube-system"
}
},
"podSelector": {
"matchLabels": {
"k8s-app": "kube-dns"
}
}
}
],
"ports": [
{
"protocol": "UDP",
"port": 53
},
{
"protocol": "TCP",
"port": 53
}
]
}
]
}
}

View file

@ -24,6 +24,7 @@ spec:
app.kubernetes.io/name: audit-core
app.kubernetes.io/component: migrate
spec:
automountServiceAccountToken: false
restartPolicy: OnFailure
securityContext:
runAsNonRoot: true
@ -33,7 +34,7 @@ spec:
type: RuntimeDefault
containers:
- name: migrate
image: forgejo.coulomb.social/coulomb/audit-core@sha256:ec15f63d49226bfe507af2bc38ffbd5e83f549ba2c6d1ae7a338e7e053f34615
image: forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271
imagePullPolicy: IfNotPresent
command: ["python", "-m", "audit_core", "migrate"]
env: