1
0
Fork 0

sshca: Deploy SSH CA service

[sshca] is a simple web service I wrote to automatically create signed
SSH certificates for hosts' public keys.  It authenticates hosts by
their machine UUID, which it can find using the libvirt API.

[sshca]: https://git.pyrocufflink.net/dustin/sshca
dch-webhooks-secrets
Dustin 2023-11-06 20:35:04 -06:00
parent 0e7bd36d34
commit fe2a84a222
12 changed files with 322 additions and 0 deletions

View File

@ -0,0 +1,13 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: sshca
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: default
source:
path: sshca
repoURL: https://git.pyrocufflink.blue/infra/kubernetes.git
targetRevision: master

1
sshca/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
machine-ids.json

53
sshca/README.md Normal file
View File

@ -0,0 +1,53 @@
# SSHCA
[SSHCA][0] is an online Certificate Authority for SSH. It can automatically
issue signed SSH certificates for hosts' public keys. Machines authenticate to
the service using a JWT signed with their machine UUID, and the service
validates the signature by looking up the UUID in either a local JSON document
or by querying the libvirt API on one or more VM hosts. Certificates will only
be issued for hosts that can authenticate successfully.
## Installation
```sh
kubectl apply -k sshca
```
## Configuration
SSHCA is configured by the `config.toml` file. It is stored as a Kubernetes
ConfigMap and mounted into the server container. The configuration file is
only read at startup, so the ConfigMap uses the name suffix hash feature of
Kustomize; when the contents of the configuration file change, the name of the
ConfigMap will change, which will cause Kubernetes to restart the pod. Old
ConfigMap resources are not deleted, but must be cleaned up by some other means
(manually or e.g. Argo CD).
The configuration file specifies the path to the private keys for signing
certificates. It also includes the list of libvirt hosts to check for machine
UUIDs, as well as the path to a static file where additional machine UUIDs are
provided.
Besides the main configuration file, SSHCA needs an additional ConfigMap that
contains an `ssh_known_hosts` file. This file contains the public keys of the
libvirt VM hosts, so that the service can securely connect to the libvirt API
over SSH.
## Secrets
Several secrets are necessary for SSHCA to operate:
1. The private key used to issue SSH host certificates, and optionally a
password to encrypt that key.
2. A JSON document containing a map of host names to machine UUIDs, in order to
authenticate physical machines and other hosts that are not libvirt domains.
3. An SSH user private key for authenticating to the libvirt hosts for VM UUID
lookups.
4. OCI registry credentials for pulling container images.
These secrets are stored encrypted as SealedSecret resources. The Bitnami
Sealed Secrets controller decrypts these and manages regular Secret resources
for them automatically.
[0]: https://git.pyrocufflink.net/dustin/sshca

11
sshca/config.toml Normal file
View File

@ -0,0 +1,11 @@
machine_ids = "/var/lib/sshca/machine-ids.json"
[ca.host]
private_key_file = "/run/sshca/secrets/host/key/host-ca-key"
private_key_passphrase_file = "/run/sshca/secrets/host/passphrase/host-ca-key.passphrase"
[[libvirt]]
uri = "qemu+ssh://sshca@vmhost0.pyrocufflink.blue/system?keyfile=/run/sshca/libvirt/sshkey"
[[libvirt]]
uri = "qemu+ssh://sshca@vmhost1.pyrocufflink.blue/system?keyfile=/run/sshca/libvirt/sshkey"

1
sshca/host-ca-key.pub Normal file
View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII24CZGosLMTny0a2eDB6KOG47FhlwVkTEFQNAYzKV0t sshca.pyrocufflink.blue

21
sshca/ingress.yaml Normal file
View File

@ -0,0 +1,21 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sshca
labels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
app.kubernetes.io/part-of: sshca
spec:
ingressClassName: nginx
rules:
- host: sshca.pyrocufflink.blue
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sshca
port:
name: sshca

24
sshca/kustomization.yaml Normal file
View File

@ -0,0 +1,24 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: sshca
labels:
- pairs:
app.kubernetes.io/instance: sshca
includeSelectors: true
resources:
- namespace.yaml
- secrets.yaml
- sshca.yaml
- ingress.yaml
configMapGenerator:
- name: sshca-config
files:
- config.toml
- name: ssh-known-hosts
files:
- ssh_known_hosts

1
sshca/libvirt-sshkey.pub Normal file
View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIQpBPCOlZvB8/kURvYITdkWf16LpwOenfphPDEETnyo sshca.pyrocufflink.blue

8
sshca/namespace.yaml Normal file
View File

@ -0,0 +1,8 @@
apiVersion: v1
kind: Namespace
metadata:
name: sshca
labels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
app.kubernetes.io/part-of: sshca

70
sshca/secrets.yaml Normal file
View File

@ -0,0 +1,70 @@
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: sshca-host-key
namespace: sshca
spec:
encryptedData:
host-ca-key: AgBG0Y/FZD87XZu4k/w78mqyN06VDoGkALP0xQ+IU59ZHoXAqz6HsOGP+0T5FUDBtvAwmOWlTehalXdKdhrU8anxFzbR79xbZVcwVDTWqsrybBPNMUYDJ7oc3T7BNyGfEEJIcbUBdFfiefCLJhl2rkaxIfG2ZBDdSmqdRI/m0QUE4u8vkDnI+Sxs53eM2qBZ/a4VHyGQkOLn0XlsQeTJiDo+oRRQQtDHNZ0i/2myX2RfLoiSNKv8BqFuhXnMG7Rx9HXjJ0dAFIO5e57eLkkBxElVZQEs+NfwZP/fd89sWTvRzeDvRCykhSS7RXgQtTEKdTpzoQdGUxDBNd3AcmBvb/BP0FyRJTGRQIhrRQmCzYKFVNI+oWvMlVp/aQ2tZpmL7BESkwoQ/jcWhx02r2dH9r7U/eZJnZdmsH5gvLhacHPkChfkKHesp9f4PZhDalhNP4WbIcJobe+/IG3L9eF4hjPVrYG7aoKrnNzHVETzYDh91vwQA1/v2ahQUxe4Gr3VwVOCxYtIc6ce/k0h+h5luDHA3l7/h7Z2O1EGkkcWzffJCslVKVwoW8wYk1kCN/iVPDNYWd7sVScM/yq8Pam/jzfB7yJwpQtpv6crezLTjXtUz1peRlgwu1V54j0FZDiTPaza+nC25BqCK0j8MhEicR5QTAMxNZE4mGfZESvHAQXXmuOoHwMUoNCoyvbk34chohOInYy6itWgrihHkFVAEhYVavxvb1N+i5fYzt2po1rynVBjpxHHp+/lb9Us8rFAPfD6lsl79njUeUX8E9OpDFUorwr+kNJz7AD3Nau1ZnSiJmBJfkTxaYo/JdGecNfe8G4FBx3/7g/VjHJAaPEpG+6+dJGlr+lNSHwfeS27ykP7UQVUvooF8tEjO3oTFSbb858MIrSqgJHAej5CeXI6gANEeHzeZ18TZQ9nANfKZjiguDx84FnrU97jyaB8BnYw8aPTFcBRtWrRlM+xtIOCojl12a72s0dPjxQvjKyd9OrYi6Xukik1wCVqO3OBvNIJPSVwczpxiDT3Gu2HBLl7S8xY0wROtdYUmTrKYoCEDSx1Ue7iRqsgSx5UQmXQQcIBKGQy+SbIrAJo4xmtKFtKN+JeMX8TCbu/wCSck0pOjXf30MxJlRNaefThJOKMLg/KugBTJE99CFx+uiSJneRFsZBlNpD+V7lUMU2rF9nwUnBjko5g1TRQqx456wQLrH7YB9EcgofMnQ6/pkONGpFylfObDGdnB6JVGjCwbeTe5F+Cv4sICGQDcA7QDeaZ4GhqyI9ywhXtzJ0IsFRCq96otD64ioc/JIZgPDm8YDh1FZDj1w==
template:
metadata:
name: sshca-host-key
namespace: sshca
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: sshca-host-passphrase
namespace: sshca
spec:
encryptedData:
host-ca-key.passphrase: AgBGgXPHfyXA8wEkG2kXBUY/STvBZ98g8lEZ63M0WtMKCrwGj/LPmS0Xje0Lzr1WU6Js56/8AKOcUrXwpmCUMrtNORD3BCExgFP6eT0KNRZ4L/0ybfQRYdMlYDrWh0mG2kXCQ/VKUKKyICJeYYe8tyEfwYMyeXjG0+wn2Xpnw78B9msmaeDVTopCaCIY+3aUOmqmdakKA3QhfaOmfW5/j4c7Z5GhN56FXp1HxuDITWGijAiRI+dmhW0gGgZ1kBiWEGtXFG/24Ln6wEC2Gg477AECcReLmlbhjE0ckihzs1O8rIK0n7hM9cq+sxmhVTl/bfRYXnIGyc4vMwV5pzjshlFErK0/9Qh5Uhk7g474Z3hnF+GEzJmuyEthrsHW0Y3E922VMzHxU1v/7ZvX3cOwUFmjJ/bJrrU9/leaV7QdqiZaxvgYngEnf7xRQwiiunbbfn60bgDrrnMLuvqcG9AJ8vsBrc+62/OH8AB/9OSJYIkIT6eIquevv+WOrdT1i7qPtlK+xY/lOcfXuGUPhf96T/0sNYOgxSvHSWLLrv5S703aTS5Yqb/nERFWiOGlGyjhgUOv9GTTkzfCuRIYcRpjLSsWtUebzAale/wYniS4CaqfcOI9kv11whPUohMPVSQFhUaeQBmi0Gc6xIBVPT4L/QUzKFMhjLM2UXj+Z2ql7tJkTQ2GGWP89RZX6IGOPP/nZdCdqSNBtPvvaGC3mNCqksGu1v2ORyvRVYixF6PAfBlj/Afm/A9t+yPcNH0DjcGY7qZnrZ+YH+yZWlTeHA69vubh
template:
metadata:
name: sshca-host-passphrase
namespace: sshca
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: sshca-libvirt-sshkey
namespace: sshca
spec:
encryptedData:
sshkey: AgB90kcWxJfkVI+NbKy+3S6CfFKsx7NwjeIOEzU5MnUx0PbkAG2VUAI9Xp0h5Md1/1qcTwXq1hOa/7NhfOPovarxBDf5iQISSX2aQcQbwcr3eOIuGbE3Uny4ttZqG5v5TJhnfhHdKlvv5Wmafmpv6xPkcV7mFLd5yaRNwu0zgg8eHnpGXxOFnp8LQXlB4KIP5NLYgEdLR0CTU/ygJMh4YSvtR+jQnt/gD7d6NRvyHsx+0dIHeaCfmYD2ewAW8a26sknG/ZuCEl3ZN2GE/rT8dyS8pd35aApEQvSjMW50hSb5kRTGjhvlhMOzoTpRAkp6gT4T9BIru8h1OenXr59d+xUxuHlIACZAOstxTV08dVfqBdlKvUvw8qxtb9htXe1m4NMTxZlSDp2zjvIUbRlopLBrLWuC55l+3DDmJg4w6ASL1W+KdflufAfK3JNJwMkHqORX8KzqhYa1McbyxTKshjoMkFm0yOip2kMcrrVVAJtymPElAwyjpwgWn1UIpMTLGoaXRxcaf38ljHY70yRZz4eWzIrtW5BeMbFdOBxpstQbSRHr8f5UueQr3nCavyv3lnKjiX3jxspnnBrv6WQDFs6yu6L97QSD3Gbx0yXYV/MOr8Cg/3+2KUDy9mCDUQ1mzNoObbdfwU+q1yHXgTRWd1QXBpov7f+E3Q/hcdO/9OaPu+DmiRfCrqTSnclh4LV/LMuYCWJogdzvEhGxItMscIfBmHLbIZIVrxCnVXJ4VkF0HGv35L+t+ZlhwA8XHN++LNVDvuHzvxAIrpqgQ5itHKSOjwXOepJ15Id/1eSP4fBnjeTL+OzVOr8H17S1oTF0aVNql9lCV1lgLVYMJrjsbERfvkfC8bfVZ3OdOJZAVE6EHWJOiYopKuX5cmB4Ca35+mEeLyGEM21KVxWeIIjzBgcMnDmNoMtSIHOT38Vy5DLs5qwQcXR19jx03x+BDVh22zkM8y/0YgZZFL1bkS0W6Y58HDGw33qXd0uPBnC+eL5BpN4nTJtiIv/C1+2P6RQz8qdf2yp9bn0+e4rdtRf/NFP/kQgED9bVX1LyOkAeb+W/L5Z99LRIqmYG+vhCeCnYZlzZto4jYV4h8Su8FxrbR0cIL0TH98FMP2e4sWh74aU63A3d7wFIrrR/hF+4mE7CiEbmtqgPGfXv6VrIY8fuzzQV6tAeH52yF7MQQGoy+8S9jlWDctqPRGhfMl0IvzwkuXtKeB+4z707VKN/SuheH74zDGbxvEwDBLzIDVN8fnV2bo7OhQ==
template:
metadata:
name: sshca-libvirt-sshkey
namespace: sshca
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: imagepull-gitea
namespace: sshca
spec:
encryptedData:
.dockerconfigjson: AgCv0B4foYgX1AITeFvpn+M3fChalqe5qyR7uM+ltVFp35R0ojosrfTOynHTVQ4c4LHtHsU9JihS4IinLPM0F4FfT3gSkKwaz5cD0vwF3gWu5GC3/8EdlquMhCTq4ZNT5ZUEO6XAaFWjPPJ9F4TQsC6UTvQ5mg8AijQ3T7tZmVr61QA15frnm+MkiPcfPW/A3Ku2cUK+SBYyiGd/G7iBId13nWbkj1y74l1DZPV10ZaOoZRmOCoAx0QSkhOqENXvAFLC++Jny0OcP87sYXmdsoTPVO2BtuivVo+X3jxLBAX/nqaU3PuZkTORX/XlMtVhu7qF23aCzvumaayrnxDgE3HT+ddHi7S4PwDw1OCPwDd81hTzJ0b1x65a6PxiOgflfQS7ogYeN22edLlJt1KLdmEuvK6kp3D6yxU5Lx6VBDu24SBbfv0lrq2k3JyseeNYqJQ21oDW9bm1QqU2YbbwxsLxCv9Uc1stXxJ77d08dSgjCZ1PQsWnUAZLw53sGgytvvhcvdASy8d9VWNp0n5UlH27zxeFP6w78KAjdY54HvDxCJCk3hDR9jnE6Amwi8K6vMiI02bfEyrQb82I2yuZxCVj+4icS6wW/haMEnfnzNXNwqDxuLsWXL31ItyHmNgyhV5GOTPihA+phPXz91PbxsYDa2oMRZQ6M2uaGSbXHUAqiZA/cKPzISh5fKI1fsvbpjOditvYnig8JcvclrPe04EMuNr5+zPcaUI/kuwUb1sH7kMNGaP8tobRqTOLshN+ZQreVBC/3/tgjn+a5ERzmy1IPmqu5r/msSm3KJla9JOQZ+++3ZQuNZvqt8MF32WYyGxKieYP6claOVYMYfXxpGc3PrqdeVNUAw2fSnNp5N9+oVHTZD5aqmyeCE64sG7/IvUu+B9o/P6TEloJPy6SXcNO0ZkT+4Ttkvo/6KrQluJ8vt9PFSBU2/kFjX4IEJG4B6oASzvJ0QkVgn9P/7r+yfs1RAneNi5/r2upCsgpaYDLa676IdDkwy/m2f+QIyg=
template:
metadata:
name: imagepull-gitea
namespace: sshca
type: kubernetes.io/dockerconfigjson
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: sshca-data
namespace: sshca
spec:
encryptedData:
machine-ids.json: AgCmwNtLiL3SbRthy7TIMcKtNWzo2Xm1uSpdyWAWSxLnuyfBDT7sgNn2ILma/bCW9zJe/EaPbbZDgeUbcob1YWLkm6gBEZ8UkA0z/Jgu9hyvVDFoicvDFcmpLiPviyUrak7mmioeOgshAKmHAILa5m1fWNjbzxy0UgkjrGPJA9GXF/g1BFerf/kp5qAkpk0zAONx3ToganSDL7wXj4Mz6x2bb4Nu4s6kdyWdaxyz3evOzvBcy9HRl9Yyq/sIjW/nSahrTs1iwtWDOqF7j5pLmUa5FBoD2hlPmDUCC2Sw5JhwDJd2KuTV811Sl4qk60xLrp6RLlbhrhq3XsRPsUJm/5F8s7kKr2KPtEZu24+uZ12w7DYxlkuEJSlRcH1g/BMc1SD4PDQ2UJK04uQN6RVZlkm8bBYKunMniX9btF4ECXNlgYe0jr7o1SHj862tSnx63GJ4LVnO6Q8ahuM5d9BqMduo+8gpLBVb8vV1pT0zDhLVDGAsDHZE7s8V84eDn83iqlIVaTkUyUt4UAVvRseXENk7s2wyTSf7hYEbVPfcoMfuYR//PQWlN1+iEHtwxU6wSYEBmAXEuS0HXUAVFo55XSQylLDZBERkP0xD1svVFUV062hfFy5sTWTgEciZItMqdX+2TFlPdojZUSj0hk0TsxnuKUBnZLDimKmMa/8e360s3t4b9q9TL4PutGbr57SFZvat5wRmDjq/YgPOtA8H1QV6U7CU5SjG2vKH7KXdoI4wGk84n+F6ECUBQ8pp8lxwlzjyIDzIYM8EEsWW3qc7EcZC7wsj1i+0MJAoauyTYQBpAu9OzwzVSpHlK4N6QNm7do0fpL8UsAX1EbdSxsLg7yWUTpNx02qiXhtLVt/csUGiokHapLxy+60b3kzHS5vpW5k=
template:
metadata:
name: sshca-data
namespace: sshca

6
sshca/ssh_known_hosts Normal file
View File

@ -0,0 +1,6 @@
vmhost0.pyrocufflink.blue ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIE4HC02W4y4FG7tepnug47bH/DXAL2xX5klUN9r+a+P
vmhost0.pyrocufflink.blue ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2mhyQV9esoL+P20DYIK+mz7+9ndvavXOhc15nFYUkIQX7hZzfcZnvccjd/4Ii7U6IY/8pmgT7Qk72OS9l9aCUzxKwRe3hD9ICz1ncrBQB2dCw2zL3fdfywU5WHCYWdgJPY5L9EYe6G5XNnKZN8k0Bs5mtryLytQre06eiDo5tNsFs6iKNCM75JbHNTY2yI1Pcc+FS65jYxNUyuFm6MfbxgM8gUdtS8czifgFMZxXcaAjqN3Mc6UyR2NvBTrytnCuRay2d67KK3xWCtllw+hxkS7dGlpzV8DE+iYm7spFMFcQW3Az6xBs0G+SWBkvyBUn63YKsoarwl3G9VC9/SQhR
vmhost0.pyrocufflink.blue ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOSoJjVyG6dQMm0A+cTXFne1uh+smq13/bbvxJrxiVwFZiyi2ng5qU5tr+WSxyGNj2xLXGjtoygWUyr6D0R8mts=
vmhost1.pyrocufflink.blue ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKHL7MW0Tnl4BUyxWiwQ2ldAmQFqrVvRGd3razpQwK7P
vmhost1.pyrocufflink.blue ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2E9a0+JIcT7yWnbquZCSAdG43TFDyBlvdZgOYHanh6VRGlSDUWDkTdfqDuy4UvZ38OO5zRwjWv3X6jDF9wahyLYzkXYZ53/5piCnIl5Vki6KjpHCS3iFYVw8ZEX8NiPfMIqaNhmM+20q1qLGLV6YW/OJo504PfWh+pXGjMlIIJfLHlJpfhQD284RLZJWCjfEq+cr8j8/lE21j/adL9xReYoC9+TpfUNgUMRi06aMAu2fwR0ijU7oWSD/jnbYCvXgikt7cPrGI7jTIu2HFpTs5ctVIcE3c9NyQYbu1xKza2Scrt/0b3+jRdzAttGShwebW1iYzoctvzWDCd9DkHVQL
vmhost1.pyrocufflink.blue ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCix3Nzwir1BjTR+pv5Q1c+Yvqu9KS4OxEcDFqcvEQtVWWKZXR+QOAq/ZHvUaCi4FBuXvEKAJPQpZXF7ufdrd6Y=

113
sshca/sshca.yaml Normal file
View File

@ -0,0 +1,113 @@
apiVersion: v1
kind: Service
metadata:
name: sshca
namespace: sshca
labels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
app.kubernetes.io/instance: sshca
app.kubernetes.io/part-of: sshca
spec:
ports:
- port: 8087
name: sshca
selector:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
app.kubernetes.io/instance: sshca
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sshca
namespace: sshca
labels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
app.kubernetes.io/part-of: sshca
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
template:
metadata:
labels:
app.kubernetes.io/name: sshca
app.kubernetes.io/component: sshca
spec:
enableServiceLinks: false
containers:
- name: sshca
image: git.pyrocufflink.net/packages/sshca
args:
- -c
- /etc/sshca/config.toml
env:
- name: RUST_LOG
value: info,sshca=trace
ports:
- containerPort: 8087
name: sshca
readinessProbe: &probe
httpGet:
port: 8087
path: /
failureThreshold: 3
periodSeconds: 60
successThreshold: 1
timeoutSeconds: 1
startupProbe:
<<: *probe
failureThreshold: 30
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
volumeMounts:
- mountPath: /etc/ssh/ssh_known_hosts
name: ssh-known-hosts
subPath: ssh_known_hosts
readOnly: true
- mountPath: /etc/sshca
name: sshca-config
readOnly: true
- mountPath: /run/sshca/libvirt
name: sshca-libvirt-key
readOnly: true
- mountPath: /run/sshca/secrets/host/key
name: sshca-host-key
readOnly: true
- mountPath: /run/sshca/secrets/host/passphrase
name: sshca-host-passphrase
readOnly: true
- mountPath: /var/lib/sshca
name: sshca-data
readOnly: true
imagePullSecrets:
- name: imagepull-gitea
securityContext:
runAsNonRoot: true
fsGroup: 298
volumes:
- name: sshca-config
configMap:
name: sshca-config
- name: sshca-data
secret:
secretName: sshca-data
- name: sshca-host-key
secret:
secretName: sshca-host-key
- name: sshca-host-passphrase
secret:
secretName: sshca-host-passphrase
- name: sshca-libvirt-key
secret:
secretName: sshca-libvirt-sshkey
- name: ssh-known-hosts
configMap:
name: ssh-known-hosts