From d345752e3d83f387da16de77f917100466c1e1ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yal=C4=B1n=20Do=C4=9Fu=20=C5=9Eahin?= <103506681+yalindogusahin@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:48:29 +0100 Subject: [PATCH] Feature/volume ingress (#8084) --- .../templates/volume/volume-ingress.yaml | 52 +++++++++++++++++++ k8s/charts/seaweedfs/values.yaml | 24 +++++++++ 2 files changed, 76 insertions(+) create mode 100644 k8s/charts/seaweedfs/templates/volume/volume-ingress.yaml diff --git a/k8s/charts/seaweedfs/templates/volume/volume-ingress.yaml b/k8s/charts/seaweedfs/templates/volume/volume-ingress.yaml new file mode 100644 index 000000000..6dce28e9f --- /dev/null +++ b/k8s/charts/seaweedfs/templates/volume/volume-ingress.yaml @@ -0,0 +1,52 @@ +{{- if and .Values.volume.enabled .Values.volume.ingress.enabled }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }} +apiVersion: networking.k8s.io/v1beta1 +{{- else }} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: ingress-{{ template "seaweedfs.name" . }}-volume + namespace: {{ .Release.Namespace }} + annotations: + {{- if and (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) .Values.volume.ingress.className }} + kubernetes.io/ingress.class: {{ .Values.volume.ingress.className }} + {{- end }} + {{- with .Values.volume.ingress.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + app.kubernetes.io/name: {{ template "seaweedfs.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: volume +spec: + {{- if and (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) .Values.volume.ingress.className }} + ingressClassName: {{ .Values.volume.ingress.className | quote }} + {{- end }} + tls: + {{ .Values.volume.ingress.tls | default list | toYaml | nindent 6}} + rules: + - {{- if .Values.volume.ingress.host }} + host: {{ .Values.volume.ingress.host | quote }} + {{- end }} + http: + paths: + - path: {{ .Values.volume.ingress.path | quote }} + {{- if semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion }} + pathType: {{ .Values.volume.ingress.pathType | quote }} + {{- end }} + backend: +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }} + service: + name: {{ template "seaweedfs.name" . }}-volume + port: + number: {{ .Values.volume.port }} +{{- else }} + serviceName: {{ template "seaweedfs.name" . }}-volume + servicePort: {{ .Values.volume.port }} +{{- end }} +{{- end }} diff --git a/k8s/charts/seaweedfs/values.yaml b/k8s/charts/seaweedfs/values.yaml index 17b3f44d1..35befc3d1 100644 --- a/k8s/charts/seaweedfs/values.yaml +++ b/k8s/charts/seaweedfs/values.yaml @@ -544,6 +544,30 @@ volume: failureThreshold: 100 timeoutSeconds: 30 + ingress: + enabled: false + className: "" + host: "volume.seaweedfs.local" + path: "/" + pathType: Prefix + annotations: + nginx.ingress.kubernetes.io/app-root: /ui/index.html + # nginx.ingress.kubernetes.io/use-regex: "true" + # nginx.ingress.kubernetes.io/rewrite-target: /$1 + # nginx.ingress.kubernetes.io/auth-type: "basic" + # nginx.ingress.kubernetes.io/auth-secret: "default/ingress-basic-auth-secret" + # nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - SW-Volume' + # nginx.ingress.kubernetes.io/service-upstream: "true" + # nginx.ingress.kubernetes.io/enable-rewrite-log: "true" + # nginx.ingress.kubernetes.io/ssl-redirect: "false" + # nginx.ingress.kubernetes.io/force-ssl-redirect: "false" + # nginx.ingress.kubernetes.io/configuration-snippet: | + # sub_filter '' ' '; #add base url + # sub_filter '="/' '="./'; #make absolute paths to relative + # sub_filter '=/' '=./'; + # sub_filter '/seaweedfsstatic' './seaweedfsstatic'; + # sub_filter_once off; + # Map of named volume groups for topology-aware deployments. # Each key inherits all fields from the `volume` section but can override # them locally—for example, replicas, nodeSelector, dataCenter, etc.