add harbor
This commit is contained in:
29
clusters/cl01tl/services/harbor/Chart.yaml
Normal file
29
clusters/cl01tl/services/harbor/Chart.yaml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: harbor
|
||||||
|
version: 1.0.0
|
||||||
|
description: Harbor
|
||||||
|
keywords:
|
||||||
|
- harbor
|
||||||
|
- images
|
||||||
|
- cache
|
||||||
|
- kubernetes
|
||||||
|
home: https://wiki.alexlebens.dev/doc/harbor-
|
||||||
|
sources:
|
||||||
|
- https://github.com/goharborv
|
||||||
|
- https://github.com/goharbor/harbor-helm
|
||||||
|
- https://github.com/valkey-io/valkey
|
||||||
|
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||||
|
- https://github.com/bitnami/charts/tree/main/bitnami/valkey
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
maintainers:
|
||||||
|
- name: alexlebens
|
||||||
|
dependencies:
|
||||||
|
- name: harbor
|
||||||
|
version: 1.16.2
|
||||||
|
repository: https://helm.goharbor.io
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-17-cluster
|
||||||
|
version: 4.2.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
icon: https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/kubernetes.png
|
||||||
|
appVersion: v2.12.1
|
@@ -0,0 +1,97 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: harbor-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: harbor-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: HARBOR_ADMIN_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: admin-password
|
||||||
|
- secretKey: secretKey
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secretKey
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
- secretKey: JOBSERVICE_SECRET
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: jobservice-secret
|
||||||
|
- secretKey: REGISTRY_HTTP_SECRET
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: registry-http-secret
|
||||||
|
- secretKey: REGISTRY_PASSWD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: registry-password
|
||||||
|
- secretKey: REGISTRY_HTPASSWD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cl01tl/harbor/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: registry-ht-password
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: harbor-postgresql-17-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: harbor-postgresql-17-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /digital-ocean/home-infra/postgres-backups
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /digital-ocean/home-infra/postgres-backups
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
49
clusters/cl01tl/services/harbor/templates/http-route.yaml
Normal file
49
clusters/cl01tl/services/harbor/templates/http-route.yaml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
apiVersion: gateway.networking.k8s.io/v1
|
||||||
|
kind: HTTPRoute
|
||||||
|
metadata:
|
||||||
|
name: http-route-harbor
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: http-route-harbor
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
parentRefs:
|
||||||
|
- group: gateway.networking.k8s.io
|
||||||
|
kind: Gateway
|
||||||
|
name: traefik-gateway
|
||||||
|
namespace: traefik
|
||||||
|
hostnames:
|
||||||
|
- harbor.alexlebens.net
|
||||||
|
rules:
|
||||||
|
- matches:
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /api/
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /service/
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /v2/
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /c/
|
||||||
|
backendRefs:
|
||||||
|
- group: ''
|
||||||
|
kind: Service
|
||||||
|
name: harbor-core
|
||||||
|
port: 80
|
||||||
|
weight: 100
|
||||||
|
- matches:
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /
|
||||||
|
backendRefs:
|
||||||
|
- group: ''
|
||||||
|
kind: Service
|
||||||
|
name: harbor-portal
|
||||||
|
port: 80
|
||||||
|
weight: 100
|
59
clusters/cl01tl/services/harbor/templates/ingress.yaml
Normal file
59
clusters/cl01tl/services/harbor/templates/ingress.yaml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# apiVersion: networking.k8s.io/v1
|
||||||
|
# kind: Ingress
|
||||||
|
# metadata:
|
||||||
|
# name: harbor-tailscale
|
||||||
|
# namespace: {{ .Release.Namespace }}
|
||||||
|
# labels:
|
||||||
|
# app.kubernetes.io/name: harbor-tailscale
|
||||||
|
# app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
# app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
# app.kubernetes.io/component: web
|
||||||
|
# app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
# labels:
|
||||||
|
# tailscale.com/proxy-class: no-metrics
|
||||||
|
# annotations:
|
||||||
|
# tailscale.com/experimental-forward-cluster-traffic-via-ingress: "true"
|
||||||
|
# spec:
|
||||||
|
# ingressClassName: tailscale
|
||||||
|
# tls:
|
||||||
|
# - hosts:
|
||||||
|
# - harbor-cl01tl
|
||||||
|
# rules:
|
||||||
|
# - host: harbor-cl01tl
|
||||||
|
# http:
|
||||||
|
# paths:
|
||||||
|
# - backend:
|
||||||
|
# service:
|
||||||
|
# name: harbor-core
|
||||||
|
# port:
|
||||||
|
# number: 80
|
||||||
|
# path: /api/
|
||||||
|
# pathType: Prefix
|
||||||
|
# - backend:
|
||||||
|
# service:
|
||||||
|
# name: harbor-core
|
||||||
|
# port:
|
||||||
|
# number: 80
|
||||||
|
# path: /service/
|
||||||
|
# pathType: Prefix
|
||||||
|
# - backend:
|
||||||
|
# service:
|
||||||
|
# name: harbor-core
|
||||||
|
# port:
|
||||||
|
# number: 80
|
||||||
|
# path: /v2/
|
||||||
|
# pathType: Prefix
|
||||||
|
# - backend:
|
||||||
|
# service:
|
||||||
|
# name: harbor-core
|
||||||
|
# port:
|
||||||
|
# number: 80
|
||||||
|
# path: /c/
|
||||||
|
# pathType: Prefix
|
||||||
|
# - backend:
|
||||||
|
# service:
|
||||||
|
# name: harbor-portal
|
||||||
|
# port:
|
||||||
|
# number: 80
|
||||||
|
# path: /
|
||||||
|
# pathType: Prefix
|
132
clusters/cl01tl/services/harbor/values.yaml
Normal file
132
clusters/cl01tl/services/harbor/values.yaml
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
harbor:
|
||||||
|
expose:
|
||||||
|
type: clusterIP
|
||||||
|
externalURL: https://harbor.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
resourcePolicy: "keep"
|
||||||
|
persistentVolumeClaim:
|
||||||
|
registry:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 20Gi
|
||||||
|
jobservice:
|
||||||
|
jobLog:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 5Gi
|
||||||
|
redis:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 5Gi
|
||||||
|
trivy:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 5Gi
|
||||||
|
imageChartStorage:
|
||||||
|
type: filesystem
|
||||||
|
filesystem:
|
||||||
|
rootdirectory: /storage
|
||||||
|
existingSecretAdminPassword: harbor-secret
|
||||||
|
existingSecretAdminPasswordKey: HARBOR_ADMIN_PASSWORD
|
||||||
|
ipFamily:
|
||||||
|
ipv6:
|
||||||
|
enabled: false
|
||||||
|
ipv4:
|
||||||
|
enabled: true
|
||||||
|
updateStrategy:
|
||||||
|
type: Recreate
|
||||||
|
existingSecretSecretKey: harbor-secret
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
core:
|
||||||
|
path: /metrics
|
||||||
|
port: 8001
|
||||||
|
registry:
|
||||||
|
path: /metrics
|
||||||
|
port: 8001
|
||||||
|
jobservice:
|
||||||
|
path: /metrics
|
||||||
|
port: 8001
|
||||||
|
exporter:
|
||||||
|
path: /metrics
|
||||||
|
port: 8001
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
trace:
|
||||||
|
enabled: false
|
||||||
|
cache:
|
||||||
|
enabled: false
|
||||||
|
portal:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/harbor-portal
|
||||||
|
tag: v2.12.2
|
||||||
|
core:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/harbor-core
|
||||||
|
tag: v2.12.2
|
||||||
|
existingSecret: harbor-secret
|
||||||
|
jobservice:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/harbor-jobservice
|
||||||
|
tag: v2.12.2
|
||||||
|
existingSecret: harbor-secret
|
||||||
|
existingSecretKey: JOBSERVICE_SECRET
|
||||||
|
registry:
|
||||||
|
registry:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/registry-photon
|
||||||
|
tag: v2.12.2
|
||||||
|
controller:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/harbor-registryctl
|
||||||
|
tag: v2.12.2
|
||||||
|
existingSecret: harbor-secret
|
||||||
|
existingSecretKey: REGISTRY_HTTP_SECRET
|
||||||
|
relativeurls: false
|
||||||
|
credentials:
|
||||||
|
existingSecret: harbor-secret
|
||||||
|
upload_purging:
|
||||||
|
enabled: true
|
||||||
|
age: 168h
|
||||||
|
interval: 24h
|
||||||
|
dryrun: false
|
||||||
|
trivy:
|
||||||
|
enabled: false
|
||||||
|
database:
|
||||||
|
type: external
|
||||||
|
external:
|
||||||
|
host: harbor-postgresql-17-cluster-rw
|
||||||
|
port: "5432"
|
||||||
|
username: app
|
||||||
|
coreDatabase: app
|
||||||
|
existingSecret: harbor-postgresql-17-cluster-app
|
||||||
|
redis:
|
||||||
|
type: internal
|
||||||
|
internal:
|
||||||
|
image:
|
||||||
|
repository: goharbor/redis-photon
|
||||||
|
tag: v2.12.2
|
||||||
|
exporter:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/goharbor/harbor-exporter
|
||||||
|
tag: v2.12.2
|
||||||
|
postgres-17-cluster:
|
||||||
|
mode: recovery
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
recovery:
|
||||||
|
endpointURL: https://nyc3.digitaloceanspaces.com
|
||||||
|
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/harbor/harbor-postgresql-17-cluster
|
||||||
|
endpointCredentials: harbor-postgresql-17-cluster-backup-secret
|
||||||
|
backup:
|
||||||
|
enabled: false
|
||||||
|
endpointURL: https://nyc3.digitaloceanspaces.com
|
||||||
|
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/harbor/harbor-postgresql-17-cluster
|
||||||
|
endpointCredentials: harbor-postgresql-17-cluster-backup-secret
|
||||||
|
backupIndex: 2
|
Reference in New Issue
Block a user