Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b63cb8970 | ||
|
|
4ba3f03b18 | ||
|
|
739b41b623 | ||
|
|
f8796b181f | ||
|
|
e8c72cd1f1 | ||
|
|
2da554d40e | ||
|
|
35461f1f54 | ||
|
|
adedc98b50 | ||
|
|
1f228c94ef |
@@ -77,3 +77,4 @@ claude-ws ansible_host=10.3.40.78 ansible_user=root
|
||||
proxy-1.renner.uno
|
||||
proxy-2.renner.uno
|
||||
netbird.renner.uno
|
||||
edge-1.iot.renner.uno
|
||||
|
||||
@@ -127,13 +127,24 @@
|
||||
- "'revokedkeys /etc/ssh/revoked_keys' in ssh_ca_effective_lines"
|
||||
fail_msg: "sshd -T does not show the SSH CA settings; another config line takes precedence"
|
||||
|
||||
# The unit is sshd.service on Arch and RedHat, ssh.service on Debian. sshd -T
|
||||
# only parses the files, so the running daemon is reloaded on every run; a
|
||||
# reload keeps open sessions.
|
||||
# The unit is sshd.service on Arch and RedHat, ssh.service on Debian/Ubuntu.
|
||||
# Ubuntu also lists sshd.service as a not-found alias, so the running one is
|
||||
# picked. sshd -T only parses the files, so the running daemon is reloaded on
|
||||
# every run; a reload keeps open sessions.
|
||||
- name: Read the service list
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Reload sshd so the running daemon uses the CA config
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ 'sshd.service' if 'sshd.service' in ansible_facts.services else 'ssh.service' }}"
|
||||
state: reloaded
|
||||
- name: Reload the running sshd unit
|
||||
vars:
|
||||
ssh_ca_sshd_units: "{{ ansible_facts.services | dict2items | selectattr('key', 'in', ['sshd.service', 'ssh.service']) | selectattr('value.state', 'equalto', 'running') | map(attribute='key') | list }}"
|
||||
block:
|
||||
- name: Check exactly one sshd unit is running
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ssh_ca_sshd_units | length == 1
|
||||
fail_msg: "Expected one running sshd.service or ssh.service, found {{ ssh_ca_sshd_units }}"
|
||||
|
||||
- name: Reload sshd so the running daemon uses the CA config
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ ssh_ca_sshd_units | first }}"
|
||||
state: reloaded
|
||||
|
||||
@@ -16,6 +16,8 @@ resources:
|
||||
- networkpolicy.yaml
|
||||
# Nightly prune of old CI image builds (REN-1203).
|
||||
- package-retention.yaml
|
||||
# OpenBao SSH CA public key for certificate logins.
|
||||
- ssh-ca.yaml
|
||||
- kumamonitors.yaml
|
||||
configMapGenerator:
|
||||
- name: gitea-package-retention
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# Public key of the OpenBao SSH user CA (ssh-client-signer), for Gitea's
|
||||
# built-in SSH server to accept owner and claude-bot certificates. OpenBao
|
||||
# serves it unauthenticated; ESO reads it from the in-cluster Service, so the
|
||||
# key has one source. Gitea reads it from env at start; Reloader restarts the
|
||||
# StatefulSet when the Secret changes.
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: SecretStore
|
||||
metadata:
|
||||
name: openbao-ssh-ca
|
||||
namespace: gitea
|
||||
spec:
|
||||
provider:
|
||||
webhook:
|
||||
url: http://openbao.openbao.svc.cluster.local:8200/v1/ssh-client-signer/public_key
|
||||
method: GET
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: gitea-ssh-ca
|
||||
namespace: gitea
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
kind: SecretStore
|
||||
name: openbao-ssh-ca
|
||||
target:
|
||||
name: gitea-ssh-ca
|
||||
# OpenBao ends the body with a newline; it must not reach app.ini.
|
||||
template:
|
||||
engineVersion: v2
|
||||
data:
|
||||
trusted-user-ca-keys: "{{ .ca | trim }}"
|
||||
data:
|
||||
- secretKey: ca
|
||||
remoteRef:
|
||||
key: public_key
|
||||
@@ -5,6 +5,9 @@ metadata:
|
||||
namespace: gitea
|
||||
labels:
|
||||
app.kubernetes.io/name: gitea
|
||||
annotations:
|
||||
# A CA rotation changes gitea-ssh-ca; Gitea reads it only at start.
|
||||
secret.reloader.stakater.com/reload: gitea-ssh-ca
|
||||
spec:
|
||||
serviceName: gitea
|
||||
replicas: 1 # SQLite => single writer. Do NOT scale up without moving to Postgres first.
|
||||
@@ -85,6 +88,16 @@ spec:
|
||||
# HAS CHANGED". Paths are relative to APP_DATA_PATH (/var/lib/gitea/data).
|
||||
- name: GITEA__server__SSH_SERVER_HOST_KEYS
|
||||
value: "ssh/ssh_host_ed25519_key,ssh/ssh_host_rsa_key"
|
||||
# OpenBao SSH CA (ssh-ca.yaml): certificates log in as the user whose
|
||||
# name is a principal of the cert. Each user registers that
|
||||
# principal once (Settings > SSH / GPG Keys > Manage principals).
|
||||
- name: GITEA__server__SSH_TRUSTED_USER_CA_KEYS
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: gitea-ssh-ca
|
||||
key: trusted-user-ca-keys
|
||||
- name: GITEA__server__SSH_AUTHORIZED_PRINCIPALS_ALLOW
|
||||
value: username
|
||||
# Gitea Actions was decommissioned — keep it off.
|
||||
- name: GITEA__actions__ENABLED
|
||||
value: "false"
|
||||
|
||||
@@ -53,7 +53,7 @@ spec:
|
||||
type: RuntimeDefault
|
||||
containers:
|
||||
- name: wiki
|
||||
image: gitea.renner.uno/konairius/wiki:build.1793086240 # {"$imagepolicy": "flux-system:wiki"}
|
||||
image: gitea.renner.uno/konairius/wiki:build.1793094262 # {"$imagepolicy": "flux-system:wiki"}
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
readOnlyRootFilesystem: true
|
||||
|
||||
Reference in New Issue
Block a user