Skip to content

Commit 57b8395

Browse files
committed
first k8s plan for hpcs
1 parent 9a21fa9 commit 57b8395

13 files changed

+436
-0
lines changed

k8s/hpcs-namespace.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: hpcs

k8s/hpcs-server-account.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: hpcs-server
5+
namespace: hpcs

k8s/hpcs-server-configmap.yaml

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: hpcs-server
5+
namespace: hpcs
6+
data:
7+
hpcs-server.conf: |
8+
[spire-server]
9+
address = localhost
10+
port = 8081
11+
trust-domain = hpcs
12+
pre-command = ""
13+
spire-server-bin = spire-server
14+
15+
[spire-agent]
16+
spire-agent-socket = /run/sockets/agent/agent.sock
17+
18+
[vault]
19+
url = http://vault:8200
20+
server-role = hpcs-server
21+
22+
agent.conf: |
23+
agent {
24+
data_dir = "./data/agent"
25+
log_level = "DEBUG"
26+
trust_domain = "hpcs"
27+
server_address = "spire-server"
28+
server_port = 8081
29+
socket_path = "/var/run/sockets/agent/agent.sock"
30+
admin_socket_path = "/var/run/sockets/admin/admin.sock"
31+
32+
# Insecure bootstrap is NOT appropriate for production use but is ok for
33+
# simple testing/evaluation purposes.
34+
insecure_bootstrap = true
35+
}
36+
37+
plugins {
38+
KeyManager "disk" {
39+
plugin_data {
40+
directory = "./data/agent"
41+
}
42+
}
43+
44+
NodeAttestor "k8s_psat" {
45+
plugin_data {
46+
cluster = "docker-desktop"
47+
}
48+
}
49+
50+
WorkloadAttestor "k8s" {
51+
plugin_data {
52+
}
53+
}
54+
55+
WorkloadAttestor "unix" {
56+
plugin_data {
57+
discover_workload_path = true
58+
}
59+
}
60+
}

k8s/hpcs-server-statefulset.yaml

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: hpcs-server
5+
namespace: hpcs
6+
labels:
7+
app: hpcs-server
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: hpcs-server
13+
serviceName: hpcs-server
14+
template:
15+
metadata:
16+
namespace: hpcs
17+
labels:
18+
app: hpcs-server
19+
spec:
20+
serviceAccountName: hpcs-server
21+
shareProcessNamespace: true
22+
containers:
23+
- name: hpcs-server
24+
image: ghcr.io/cscfi/hpcs/server:k8s_plan
25+
command:
26+
- sleep
27+
args:
28+
- "30000"
29+
# - ./app.py
30+
# - --config
31+
# - /tmp/hpcs-server.conf
32+
volumeMounts:
33+
- name: hpcs-server-configs
34+
mountPath: /tmp/
35+
readOnly: false
36+
- name: hpcs-spire-sockets
37+
mountPath: /var/run/sockets
38+
readOnly: false
39+
- name: hpcs-spire-agent-token
40+
mountPath: /var/run/secrets/tokens
41+
readOnly: true
42+
volumes:
43+
- name: hpcs-server-configs
44+
configMap:
45+
name: hpcs-server
46+
- name: hpcs-spire-sockets
47+
hostPath:
48+
path: /run/spire/sockets
49+
type: DirectoryOrCreate
50+
- name: hpcs-spire-agent-token
51+
projected:
52+
sources:
53+
- serviceAccountToken:
54+
path: spire-agent
55+
expirationSeconds: 7200
56+
audience: spire-server
57+
volumeClaimTemplates:
58+
- metadata:
59+
name: spire-agent-data
60+
namespace: hpcs
61+
spec:
62+
accessModes:
63+
- ReadWriteOnce
64+
resources:
65+
requests:
66+
storage: 1Gi

k8s/hpcs-spire-account.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: hpcs-spire
5+
namespace: hpcs

k8s/spire-oidc-configmap.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: spire-oidc
5+
namespace: hpcs
6+
data:
7+
oidc-discovery-provider.conf: |
8+
log_level = "debug"
9+
domains = ["spire-oidc"]
10+
listen_socket_path = "/tmp/spire-server/private/oidc-api.sock"
11+
12+
server_api {
13+
address = "unix:///tmp/spire-server/private/api.sock"
14+
}
15+
16+
health_checks {}

k8s/spire-oidc-service.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Service definition for spire-oidc (expose the OIDC socket)
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: spire-oidc
6+
namespace: hpcs
7+
spec:
8+
type: LoadBalancer
9+
selector:
10+
app: spire-server
11+
ports:
12+
- name: https
13+
port: 443
14+
targetPort: hpcs-nginx

k8s/spire-server-account.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: spire-server
5+
namespace: hpcs

k8s/spire-server-cluster-role.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# ClusterRole to allow spire-server node attestor to query Token Review API
2+
# and to be able to push certificate bundles to a configmap
3+
kind: ClusterRole
4+
apiVersion: rbac.authorization.k8s.io/v1
5+
metadata:
6+
name: spire-server-trust-role
7+
rules:
8+
- apiGroups: ["authentication.k8s.io"]
9+
resources: ["tokenreviews"]
10+
verbs: ["create"]
11+
- apiGroups: [""]
12+
resources: ["configmaps","pods","nodes"]
13+
verbs: ["patch", "get", "list"]
14+
15+
---
16+
# Binds above cluster role to spire-server service account
17+
kind: ClusterRoleBinding
18+
apiVersion: rbac.authorization.k8s.io/v1
19+
metadata:
20+
name: spire-server-trust-role-binding
21+
subjects:
22+
- kind: ServiceAccount
23+
name: spire-server
24+
namespace: hpcs
25+
roleRef:
26+
kind: ClusterRole
27+
name: spire-server-trust-role
28+
apiGroup: rbac.authorization.k8s.io

k8s/spire-server-configmap.yaml

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
apiVersion: v1
2+
3+
kind: ConfigMap
4+
metadata:
5+
name: spire-bundle
6+
namespace: hpcs
7+
8+
---
9+
apiVersion: v1
10+
kind: ConfigMap
11+
metadata:
12+
name: spire-server
13+
namespace: hpcs
14+
data:
15+
server.conf: |
16+
server {
17+
bind_address = "0.0.0.0"
18+
bind_port = "8081"
19+
socket_path = "/tmp/spire-server/private/api.sock"
20+
trust_domain = "hpcs"
21+
data_dir = "/run/spire/data"
22+
log_level = "DEBUG"
23+
ca_key_type = "rsa-2048"
24+
25+
jwt_issuer = "spire-server"
26+
default_jwt_svid_ttl = "1h"
27+
28+
ca_subject = {
29+
country = ["US"],
30+
organization = ["SPIFFE"],
31+
common_name = "",
32+
}
33+
}
34+
35+
plugins {
36+
DataStore "sql" {
37+
plugin_data {
38+
database_type = "sqlite3"
39+
connection_string = "/run/spire/data/datastore.sqlite3"
40+
}
41+
}
42+
43+
NodeAttestor "k8s_psat" {
44+
plugin_data {
45+
clusters = {
46+
"docker-desktop" = {
47+
use_token_review_api_validation = true
48+
service_account_allow_list = ["hpcs:hpcs-server"]
49+
}
50+
}
51+
}
52+
}
53+
54+
KeyManager "disk" {
55+
plugin_data {
56+
keys_path = "/run/spire/data/keys.json"
57+
}
58+
}
59+
60+
Notifier "k8sbundle" {
61+
plugin_data {
62+
namespace = "hpcs"
63+
}
64+
}
65+
}
66+
67+
health_checks {
68+
listener_enabled = true
69+
bind_address = "0.0.0.0"
70+
bind_port = "8080"
71+
live_path = "/live"
72+
ready_path = "/ready"
73+
}

k8s/spire-server-nginx-configmap.yaml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: hpcs-nginx
5+
namespace: hpcs
6+
data:
7+
nginx.conf: |
8+
events {}
9+
http {
10+
access_log /tmp/access.log;
11+
error_log /tmp/error.log;
12+
13+
upstream spire-oidc {
14+
server unix:/tmp/spire-server/private/oidc-api.sock;
15+
}
16+
17+
server{
18+
listen 443 ssl;
19+
ssl_certificate /certs/selfsigned.crt;
20+
ssl_certificate_key /certs/selfsigned.key;
21+
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
22+
ssl_ciphers HIGH:!aNULL:!MD5;
23+
location / {
24+
proxy_pass http://spire-oidc;
25+
}
26+
}
27+
}

k8s/spire-server-service.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Service definition for spire server
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: spire-server
6+
namespace: hpcs
7+
spec:
8+
type: LoadBalancer
9+
selector:
10+
app: spire-server
11+
ports:
12+
- name: tcp-spire
13+
port: 8081
14+
targetPort: spire-server

0 commit comments

Comments
 (0)