Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit ddb9445

Browse files
committed
WIP
1 parent 2c31ae7 commit ddb9445

10 files changed

+104
-62
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,9 @@ build/*
1212

1313
.idea
1414
client-env.sh
15+
16+
k8s/helm/certs/*
17+
!k8s/helm/certs/aoc2024-http.crt
18+
!k8s/helm/certs/aoc2024-http.key
19+
!k8s/helm/certs/aoc2024-grpc.crt
20+
!k8s/helm/certs/aoc2024-grpc.key

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ ARG DAY
1616
COPY solutions/day${DAY} solutions/day${DAY}
1717
RUN go build -o app solutions/day${DAY}/main.go
1818
EXPOSE 3000
19+
EXPOSE 50051
1920

2021
HEALTHCHECK \
2122
--start-interval=10s \

k8s/cert.config

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[req]
2+
distinguished_name = req_distinguished_name
3+
x509_extensions = v3_req
4+
prompt = no
5+
6+
[req_distinguished_name]
7+
CN = *.aoc2024.se
8+
9+
[v3_req]
10+
keyUsage = critical, digitalSignature, keyEncipherment
11+
extendedKeyUsage = serverAuth
12+
subjectAltName = @alt_names
13+
14+
[alt_names]
15+
DNS.1 = *.aoc2024.se
16+
DNS.2 = *.grpc.aoc2024.se

k8s/create-cert.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env bash
2+
# Creates a certificate for the Kubernetes ingress controller,
3+
# this is required by the nginx-ingress controller to enable HTTP/2,
4+
# and HTTP 2 is required for gRPC.
5+
#
6+
# The certificate is already created and checked into this repository,
7+
# but the command is left here as documentation. The checked in certificate
8+
# is valid for ~100 years.
9+
10+
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 \
11+
-keyout k8s/helm/certs/aoc2024.key -out k8s/helm/certs/aoc2024.crt \
12+
-subj "/CN=*.aoc2024.se/O=AdventOfCode" \
13+
-config ./k8s/cert.config

k8s/helm/templates/day-deployment.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ spec:
3131
image: aoc2024-day{{ .day }}
3232
imagePullPolicy: Never
3333
ports:
34-
- containerPort: {{ .containerPort | default 3000 }}
34+
- containerPort: {{ .containerHttpPort | default 3000 }}
35+
- containerPort: {{ .containerGrpcPort | default 50051 }}
3536

3637
---
3738
{{- end }}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# An easier way to do this would be to generate one ingress resource
2+
# per service, similar to how we have done for deployments and services.
3+
# But now that I've got this working I think it's kinda clean, even though
4+
# ImplementationSpecific pathType is bit of a code smell.
5+
6+
apiVersion: networking.k8s.io/v1
7+
kind: Ingress
8+
metadata:
9+
name: aoc2024-ingress-grpc
10+
annotations:
11+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
12+
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
13+
spec:
14+
ingressClassName: nginx
15+
tls:
16+
- secretName: tls-certificate
17+
hosts:
18+
{{- range .Values.days}}
19+
- "day{{ .day }}.grpc.{{ $.Values.hostname }}"
20+
{{- end }}
21+
rules:
22+
{{- range .Values.days }}
23+
- host: "day{{ .day }}.grpc.{{ $.Values.hostname }}"
24+
http:
25+
paths:
26+
- path: /
27+
pathType: Prefix
28+
backend:
29+
service:
30+
name: aoc2024-day{{ .day }}
31+
port: { number: 50051 }
32+
{{- end }}
33+

k8s/helm/templates/day-ingress.yaml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,18 @@ apiVersion: networking.k8s.io/v1
77
kind: Ingress
88
metadata:
99
name: aoc2024-ingress
10-
annotations:
11-
nginx.ingress.kubernetes.io/rewrite-target: /$2
1210
spec:
1311
ingressClassName: nginx
1412
rules:
15-
- http:
13+
{{- range .Values.days }}
14+
- host: "day{{ .day }}.{{ $.Values.hostname }}"
15+
http:
1616
paths:
17-
{{- range .Values.days }}
18-
- path: /day{{ .day }}(/|$)(.*)
19-
pathType: ImplementationSpecific
17+
- path: /
18+
pathType: Prefix
2019
backend:
2120
service:
2221
name: aoc2024-day{{ .day }}
23-
port:
24-
number: 3000
25-
{{- end }}
22+
port: { name: http }
23+
{{- end }}
24+

k8s/helm/templates/day-service.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ spec:
1414
day: "{{ .day }}"
1515
ports:
1616
- protocol: TCP
17-
port: {{ .servicePort | default 3000 }}
18-
targetPort: {{ .containerPort | default 3000 }}
17+
port: {{ .serviceHttpPort | default 3000 }}
18+
targetPort: {{ .containerHttpPort | default 3000 }}
1919
name: http
20+
- protocol: TCP
21+
port: {{ .serviceGrpcPort | default 50051 }}
22+
targetPort: {{ .containerGrpcPort | default 50051 }}
23+
name: grpc
2024

2125
---
2226
{{- end }}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: tls-certificate
5+
type: kubernetes.io/tls
6+
data:
7+
tls.crt: {{ .Files.Get .Values.cert.crtFile | b64enc }}
8+
tls.key: {{ .Files.Get .Values.cert.keyFile | b64enc }}

k8s/helm/values.yaml

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,150 +1,111 @@
1+
hostname: 'aoc2024.se'
2+
cert:
3+
crtFile: 'certs/aoc2024.crt'
4+
keyFile: 'certs/aoc2024.key'
5+
16
days:
27
- day: '01'
38
replicas: 2
4-
containerPort: 3000
5-
servicePort: 3000
69
version: v1
10+
# These parameters are optional,
11+
# set here with default values as an example.
12+
containerHttpPort: 3000
13+
serviceHttpPort: 3000
14+
containerGrpcPort: 50051
15+
serviceGrpcPort: 50051
716

817
- day: '02'
918
replicas: 2
10-
containerPort: 3000
11-
servicePort: 3000
1219
version: v1
1320

1421
- day: '03'
1522
replicas: 2
16-
containerPort: 3000
17-
servicePort: 3000
1823
version: v1
1924

2025
- day: '04'
2126
replicas: 2
22-
containerPort: 3000
23-
servicePort: 3000
2427
version: v1
2528

2629
- day: '05'
2730
replicas: 2
28-
containerPort: 3000
29-
servicePort: 3000
3031
version: v1
3132

3233
- day: '06'
3334
replicas: 2
34-
containerPort: 3000
35-
servicePort: 3000
3635
version: v1
3736

3837
- day: '07'
3938
replicas: 2
40-
containerPort: 3000
41-
servicePort: 3000
4239
version: v1
4340

4441
- day: '08'
4542
replicas: 2
46-
containerPort: 3000
47-
servicePort: 3000
4843
version: v1
4944

5045
- day: '09'
5146
replicas: 2
52-
containerPort: 3000
53-
servicePort: 3000
5447
version: v1
5548

5649
- day: '10'
5750
replicas: 2
58-
containerPort: 3000
59-
servicePort: 3000
6051
version: v1
6152

6253
- day: '11'
6354
replicas: 2
64-
containerPort: 3000
65-
servicePort: 3000
6655
version: v1
6756

6857
- day: '12'
6958
replicas: 2
70-
containerPort: 3000
71-
servicePort: 3000
7259
version: v1
7360

7461
- day: '13'
7562
replicas: 2
76-
containerPort: 3000
77-
servicePort: 3000
7863
version: v1
7964

8065
- day: '14'
8166
replicas: 2
82-
containerPort: 3000
83-
servicePort: 3000
8467
version: v1
8568

8669
- day: '15'
8770
replicas: 2
88-
containerPort: 3000
89-
servicePort: 3000
9071
version: v1
9172

9273
- day: '16'
9374
replicas: 2
94-
containerPort: 3000
95-
servicePort: 3000
9675
version: v1
9776

9877
- day: '17'
9978
replicas: 2
100-
containerPort: 3000
101-
servicePort: 3000
10279
version: v1
10380

10481
- day: '18'
10582
replicas: 2
106-
containerPort: 3000
107-
servicePort: 3000
10883
version: v1
10984

11085
- day: '19'
11186
replicas: 2
112-
containerPort: 3000
113-
servicePort: 3000
11487
version: v1
11588

11689
- day: '20'
11790
replicas: 2
118-
containerPort: 3000
119-
servicePort: 3000
12091
version: v1
12192

12293
- day: '21'
12394
replicas: 2
124-
containerPort: 3000
125-
servicePort: 3000
12695
version: v1
12796

12897
- day: '22'
12998
replicas: 2
130-
containerPort: 3000
131-
servicePort: 3000
13299
version: v1
133100

134101
- day: '23'
135102
replicas: 2
136-
containerPort: 3000
137-
servicePort: 3000
138103
version: v1
139104

140105
- day: '24'
141106
replicas: 2
142-
containerPort: 3000
143-
servicePort: 3000
144107
version: v1
145108

146109
- day: '25'
147110
replicas: 2
148-
containerPort: 3000
149-
servicePort: 3000
150111
version: v1

0 commit comments

Comments
 (0)