commit b2c53d2181d7e39a3067b4b5b33b4da3e56ede2c Author: Philip Haupt <“der.mad.mob@gmail.com”> Date: Sat Mar 15 14:33:40 2025 +0100 feat: homepage diff --git a/homepage/cm.yaml b/homepage/cm.yaml new file mode 100644 index 0000000..840b0cc --- /dev/null +++ b/homepage/cm.yaml @@ -0,0 +1,61 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage +data: + kubernetes.yaml: | + mode: cluster + settings.yaml: "" + #settings.yaml: | + # providers: + # longhorn: + # url: https://longhorn.my.network + custom.css: "" + custom.js: "" + bookmarks.yaml: | + - Developer: + - Github: + - abbr: GH + href: https://github.com/ + services.yaml: | + - My First Group: + - My First Service: + href: http://localhost/ + description: Homepage is awesome + + - My Second Group: + - My Second Service: + href: http://localhost/ + description: Homepage is the best + + - My Third Group: + - My Third Service: + href: http://localhost/ + description: Homepage is 😎 + widgets.yaml: | + - kubernetes: + cluster: + show: true + cpu: true + memory: true + showLabel: true + label: "cluster" + nodes: + show: true + cpu: true + memory: true + showLabel: true + - resources: + backend: resources + expanded: true + cpu: true + memory: true + network: default + - search: + provider: duckduckgo + target: _blank + docker.yaml: "" diff --git a/homepage/cr.yaml b/homepage/cr.yaml new file mode 100644 index 0000000..347554e --- /dev/null +++ b/homepage/cr.yaml @@ -0,0 +1,40 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: homepage + labels: + app.kubernetes.io/name: homepage +rules: + - apiGroups: + - "" + resources: + - namespaces + - pods + - nodes + verbs: + - get + - list + - apiGroups: + - extensions + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - apiGroups: + - traefik.io + resources: + - ingressroutes + verbs: + - get + - list + - apiGroups: + - metrics.k8s.io + resources: + - nodes + - pods + verbs: + - get + - list diff --git a/homepage/crb.yaml b/homepage/crb.yaml new file mode 100644 index 0000000..3996630 --- /dev/null +++ b/homepage/crb.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: homepage + labels: + app.kubernetes.io/name: homepage +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: homepage +subjects: + - kind: ServiceAccount + name: homepage + namespace: homepage diff --git a/homepage/deploy.yaml b/homepage/deploy.yaml new file mode 100644 index 0000000..c38e1c6 --- /dev/null +++ b/homepage/deploy.yaml @@ -0,0 +1,66 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage +spec: + revisionHistoryLimit: 3 + replicas: 1 + strategy: + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/name: homepage + template: + metadata: + labels: + app.kubernetes.io/name: homepage + spec: + serviceAccountName: homepage + automountServiceAccountToken: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + containers: + - name: homepage + image: "ghcr.io/gethomepage/homepage:v0.10.9" + imagePullPolicy: Always + ports: + - name: http + containerPort: 3000 + protocol: TCP + volumeMounts: + - mountPath: /app/config/custom.js + name: homepage-config + subPath: custom.js + - mountPath: /app/config/custom.css + name: homepage-config + subPath: custom.css + - mountPath: /app/config/bookmarks.yaml + name: homepage-config + subPath: bookmarks.yaml + - mountPath: /app/config/docker.yaml + name: homepage-config + subPath: docker.yaml + - mountPath: /app/config/kubernetes.yaml + name: homepage-config + subPath: kubernetes.yaml + - mountPath: /app/config/services.yaml + name: homepage-config + subPath: services.yaml + - mountPath: /app/config/settings.yaml + name: homepage-config + subPath: settings.yaml + - mountPath: /app/config/widgets.yaml + name: homepage-config + subPath: widgets.yaml + - mountPath: /app/config/logs + name: logs + volumes: + - name: homepage-config + configMap: + name: homepage + - name: logs + emptyDir: {} diff --git a/homepage/gateway.yaml b/homepage/gateway.yaml new file mode 100644 index 0000000..0355792 --- /dev/null +++ b/homepage/gateway.yaml @@ -0,0 +1,20 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: homepage + namespace: homepage +spec: + gatewayClassName: cilium + listeners: + - hostname: homepage.home + name: homepage-home-http + port: 80 + protocol: HTTP + # - hostname: homepage.home + # name: homepage-home-https + # port: 443 + # protocol: HTTPS + # tls: + # certificateRefs: + # - kind: Secret + # name: homepage-server-tls \ No newline at end of file diff --git a/homepage/http-route.yaml b/homepage/http-route.yaml new file mode 100644 index 0000000..3f93545 --- /dev/null +++ b/homepage/http-route.yaml @@ -0,0 +1,18 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: homepage + namespace: homepage +spec: + parentRefs: + - name: homepage + hostnames: + - "homepage.home" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: homepage + port: 3000 diff --git a/homepage/ingress.yaml b/homepage/ingress.yaml new file mode 100644 index 0000000..2bd13ed --- /dev/null +++ b/homepage/ingress.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage + annotations: + gethomepage.dev/description: Dynamically Detected Homepage + gethomepage.dev/enabled: "true" + gethomepage.dev/group: Cluster Management + gethomepage.dev/icon: homepage.png + gethomepage.dev/name: Homepage +spec: + ingressClassName: cilium + rules: + - host: "homepage.home" + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: homepage + port: + number: 3000 \ No newline at end of file diff --git a/homepage/kustomization.yaml b/homepage/kustomization.yaml new file mode 100644 index 0000000..48116c0 --- /dev/null +++ b/homepage/kustomization.yaml @@ -0,0 +1,15 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - cm.yaml + - cr.yaml + - crb.yaml + - deploy.yaml + #- gateway.yaml + #- http-route.yaml + - ingress.yaml + - ns.yaml + - secret.yaml + - svc.yaml + - svcacc.yaml \ No newline at end of file diff --git a/homepage/main.yaml b/homepage/main.yaml new file mode 100644 index 0000000..b9aead7 --- /dev/null +++ b/homepage/main.yaml @@ -0,0 +1,239 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: homepage +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +secrets: +- name: homepage +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: homepage + name: homepage +rules: +- apiGroups: + - "" + resources: + - namespaces + - pods + - nodes + verbs: + - get + - list +- apiGroups: + - extensions + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list +- apiGroups: + - traefik.io + resources: + - ingressroutes + verbs: + - get + - list +- apiGroups: + - metrics.k8s.io + resources: + - nodes + - pods + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/name: homepage + name: homepage +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: homepage +subjects: +- kind: ServiceAccount + name: homepage + namespace: homepage +--- +apiVersion: v1 +data: + bookmarks.yaml: | + - Developer: + - Github: + - abbr: GH + href: https://github.com/ + custom.css: "" + custom.js: "" + docker.yaml: "" + kubernetes.yaml: | + mode: cluster + services.yaml: "- My First Group:\n - My First Service:\n href: http://localhost/\n + \ description: Homepage is awesome\n\n- My Second Group:\n - My Second + Service:\n href: http://localhost/\n description: Homepage is the + best\n\n- My Third Group:\n - My Third Service:\n href: http://localhost/\n + \ description: Homepage is \U0001F60E\n" + settings.yaml: "" + widgets.yaml: | + - kubernetes: + cluster: + show: true + cpu: true + memory: true + showLabel: true + label: "cluster" + nodes: + show: true + cpu: true + memory: true + showLabel: true + - resources: + backend: resources + expanded: true + cpu: true + memory: true + network: default + - search: + provider: duckduckgo + target: _blank +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +--- +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: homepage + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +type: kubernetes.io/service-account-token +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + io.cilium/lb-ipam-ips: 192.168.0.130 + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +spec: + ports: + - name: http + port: 3000 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/name: homepage + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: homepage + strategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/name: homepage + spec: + automountServiceAccountToken: true + containers: + - image: ghcr.io/gethomepage/homepage:v0.10.9 + imagePullPolicy: Always + name: homepage + ports: + - containerPort: 3000 + name: http + protocol: TCP + volumeMounts: + - mountPath: /app/config/custom.js + name: homepage-config + subPath: custom.js + - mountPath: /app/config/custom.css + name: homepage-config + subPath: custom.css + - mountPath: /app/config/bookmarks.yaml + name: homepage-config + subPath: bookmarks.yaml + - mountPath: /app/config/docker.yaml + name: homepage-config + subPath: docker.yaml + - mountPath: /app/config/kubernetes.yaml + name: homepage-config + subPath: kubernetes.yaml + - mountPath: /app/config/services.yaml + name: homepage-config + subPath: services.yaml + - mountPath: /app/config/settings.yaml + name: homepage-config + subPath: settings.yaml + - mountPath: /app/config/widgets.yaml + name: homepage-config + subPath: widgets.yaml + - mountPath: /app/config/logs + name: logs + dnsPolicy: ClusterFirst + enableServiceLinks: true + serviceAccountName: homepage + volumes: + - configMap: + name: homepage + name: homepage-config + - emptyDir: {} + name: logs +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + gethomepage.dev/description: Dynamically Detected Homepage + gethomepage.dev/enabled: "true" + gethomepage.dev/group: Cluster Management + gethomepage.dev/icon: homepage.png + gethomepage.dev/name: Homepage + labels: + app.kubernetes.io/name: homepage + name: homepage + namespace: homepage +spec: + ingressClassName: cilium + rules: + - host: homepage.home + http: + paths: + - backend: + service: + name: homepage + port: + number: 3000 + path: / + pathType: Prefix diff --git a/homepage/ns.yaml b/homepage/ns.yaml new file mode 100644 index 0000000..30bceaf --- /dev/null +++ b/homepage/ns.yaml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: homepage \ No newline at end of file diff --git a/homepage/secret.yaml b/homepage/secret.yaml new file mode 100644 index 0000000..d4da395 --- /dev/null +++ b/homepage/secret.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/service-account-token +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage + annotations: + kubernetes.io/service-account.name: homepage diff --git a/homepage/svc.yaml b/homepage/svc.yaml new file mode 100644 index 0000000..dd0482b --- /dev/null +++ b/homepage/svc.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage + annotations: + io.cilium/lb-ipam-ips: 192.168.0.130 +spec: + type: ClusterIP + ports: + - port: 3000 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: homepage diff --git a/homepage/svcacc.yaml b/homepage/svcacc.yaml new file mode 100644 index 0000000..63d6522 --- /dev/null +++ b/homepage/svcacc.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: homepage + namespace: homepage + labels: + app.kubernetes.io/name: homepage +secrets: + - name: homepage