k8s: Add NGINX web server to serve apt
This also creates GKE managed certificates and routing for both Jenkins and
NGINX in the same configs.
Change-Id: Ia2718f36e9d98587605690a6f3cb0bf53a4f8c82
diff --git a/k8s/certificates.yaml b/k8s/certificates.yaml
new file mode 100644
index 0000000..f57bae3
--- /dev/null
+++ b/k8s/certificates.yaml
@@ -0,0 +1,8 @@
+---
+apiVersion: networking.gke.io/v1beta1
+kind: ManagedCertificate
+metadata:
+ name: mendel-linux-org
+spec:
+ domains:
+ - mendel-linux.org
diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml
index 18ec19e..950e81a 100644
--- a/k8s/ingress.yaml
+++ b/k8s/ingress.yaml
@@ -3,6 +3,8 @@
kind: Service
metadata:
name: jenkins-mendel-linux
+ annotations:
+ cloud.google.com/neg: '{"ingress": true}'
spec:
selector:
app: jenkins-operator
@@ -11,23 +13,60 @@
ports:
- protocol: TCP
port: 8080
- targetPort: 8080
---
-apiVersion: extensions/v1beta1
+apiVersion: cloud.google.com/v1beta1
+kind: BackendConfig
+metadata:
+ name: nginx-apt-backend
+spec:
+ cdn:
+ enabled: true
+ cachePolicy:
+ includeHost: true
+ includeProtocol: true
+ includeQueryString: false
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: nginx-apt
+ annotations:
+ cloud.google.com/neg: '{"ingress": true}'
+ cloud.google.com/backend-config: '{"ports": {"80": "nginx-apt-backend"}}'
+spec:
+ selector:
+ app: nginx-apt
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 80
+
+---
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: mendel-linux-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: mendel-linux-ip
- networking.gke.io/managed-certificates: mendel-linux-ssl-cert
+ ingress.kubernetes.io/ssl-cert: mendel-linux-org
+ networking.gke.io/managed-certificates: mendel-linux-org
spec:
+ backend:
+ serviceName: jenkins-mendel-linux
+ servicePort: 8080
tls:
- secretName: mendel-linux-ssl-cert
rules:
- host: mendel-linux.org
http:
paths:
- - backend:
+ - path: /apt/*
+ backend:
+ serviceName: nginx-apt
+ servicePort: 80
+ - path: /*
+ backend:
serviceName: jenkins-mendel-linux
servicePort: 8080
diff --git a/k8s/nginx-apt.yaml b/k8s/nginx-apt.yaml
new file mode 100644
index 0000000..58b7f27
--- /dev/null
+++ b/k8s/nginx-apt.yaml
@@ -0,0 +1,69 @@
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: nginx-config
+data:
+ default.conf: |
+ server {
+ listen 80;
+ server_name mendel-linux.org;
+
+ location /apt {
+ autoindex on;
+ alias /usr/share/nginx/html;
+ }
+
+ location / {
+ autoindex on;
+ root /usr/share/nginx/html;
+ }
+ }
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx-apt
+ labels:
+ app: nginx-apt
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: nginx-apt
+ template:
+ metadata:
+ labels:
+ app: nginx-apt
+ spec:
+ restartPolicy: Always
+ containers:
+ - name: nginx
+ image: nginx:1.19-alpine
+ imagePullPolicy: Always
+ ports:
+ - containerPort: 80
+ name: http
+ readinessProbe:
+ httpGet:
+ path: /apt
+ port: http
+ failureThreshold: 1
+ periodSeconds: 10
+ resources:
+ requests:
+ memory: 0.5Gi
+ volumeMounts:
+ - mountPath: /usr/share/nginx/html
+ subPath: publishes
+ name: aptly-publishes
+ - mountPath: /etc/nginx/conf.d
+ name: nginx-config
+ volumes:
+ - name: aptly-publishes
+ persistentVolumeClaim:
+ claimName: aptly-state
+ - name: nginx-config
+ configMap:
+ name: nginx-config