Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
helm repo add minio https://charts.min.io/
helm repo add spark-operator https://kubeflow.github.io/spark-operator
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add strimzi https://strimzi.io/charts/

- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.7.0
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.idea/*
charts/mlrun-ce/charts/*
.DS_Store
**/.DS_Store
*.DS_Store
2 changes: 1 addition & 1 deletion charts/mlrun-ce/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v1
name: mlrun-ce
version: 0.10.0-rc5
version: 0.10.0-rc6
description: MLRun Open Source Stack
home: https://iguazio.com
icon: https://www.iguazio.com/wp-content/uploads/2019/10/Iguazio-Logo.png
Expand Down
4 changes: 4 additions & 0 deletions charts/mlrun-ce/admin_installation_values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,9 @@ kube-prometheus-stack:
tdengine:
enabled: false

strimzi-kafka-operator:
enabled: true
watchAnyNamespace: true

kafka:
enabled: false
15 changes: 8 additions & 7 deletions charts/mlrun-ce/non_admin_cluster_ip_installation_values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,12 @@ pipelines:
priority_class:
enabled: false

strimzi-kafka-operator:
enabled: false

kafka:
rbac:
operatorNamespace: controller

kube-prometheus-stack:
prometheus-node-exporter:
fullnameOverride: node-exporter
hostNetwork: false
service:
port: 9100
hostRootFsMount:
enabled: false
enabled: false
7 changes: 7 additions & 0 deletions charts/mlrun-ce/non_admin_installation_values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,12 @@ pipelines:
priority_class:
enabled: false

strimzi-kafka-operator:
enabled: false

kafka:
rbac:
operatorNamespace: controller

kube-prometheus-stack:
enabled: false
10 changes: 5 additions & 5 deletions charts/mlrun-ce/requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ dependencies:
- name: kube-prometheus-stack
repository: https://prometheus-community.github.io/helm-charts
version: 72.1.1
- name: kafka
repository: https://charts.bitnami.com/bitnami
version: 31.3.1
digest: sha256:d92e2702f26b3fbbe527fd4439cec8ce50bc79ad54fc69e10c28301e04e0114a
generated: "2025-11-04T09:39:37.92185Z"
- name: strimzi-kafka-operator
repository: https://strimzi.io/charts/
version: 0.48.0
digest: sha256:f45be2a1208958d753b2e8a95f33eee17718ad1e691317ec0b50e3c088a7cae8
generated: "2026-02-03T14:08:48.606883+02:00"
8 changes: 4 additions & 4 deletions charts/mlrun-ce/requirements.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dependencies:
repository: "https://prometheus-community.github.io/helm-charts"
version: "72.1.1"
condition: kube-prometheus-stack.enabled
- name: kafka
repository: "https://charts.bitnami.com/bitnami"
version: "31.3.1"
condition: kafka.enabled
- name: strimzi-kafka-operator
repository: "https://strimzi.io/charts/"
version: "0.48.0"
condition: strimzi-kafka-operator.enabled
24 changes: 24 additions & 0 deletions charts/mlrun-ce/templates/kafka/kafka-bootstrap-alias.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{{- if .Values.kafka.bootstrapAlias.enabled }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.kafka.bootstrapAlias.name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kafka
app.kubernetes.io/component: bootstrap-alias
{{- include "mlrun-ce.common.labels" . | nindent 4 }}
spec:
type: ClusterIP
ports:
- name: client
port: 9092
targetPort: 9092
protocol: TCP
selector:
strimzi.io/cluster: {{ .Values.kafka.name }}
strimzi.io/kind: Kafka
strimzi.io/name: {{ .Values.kafka.name }}-kafka
{{- end }}

37 changes: 37 additions & 0 deletions charts/mlrun-ce/templates/kafka/kafka-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{{- if .Values.kafka.enabled }}
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: {{ .Values.kafka.name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kafka
app.kubernetes.io/component: cluster
{{- include "mlrun-ce.common.labels" . | nindent 4 }}
annotations:
# Delay Kafka CR creation until after CRDs are installed
helm.sh/hook: post-install,post-upgrade
helm.sh/hook-weight: "5"
spec:
kafka:
listeners:
{{- range .Values.kafka.listeners }}
- name: {{ .name }}
port: {{ .port }}
type: {{ .type }}
tls: {{ .tls }}
{{- if .configuration }}
configuration:
{{- toYaml .configuration | nindent 10 }}
{{- end }}
{{- end }}
config:
{{- toYaml .Values.kafka.config | nindent 6 }}
{{- if gt (.Values.kafka.zookeeper.replicas | int) 0 }}
zookeeper:
replicas: {{ .Values.kafka.zookeeper.replicas }}
storage:
type: persistent-claim
size: 8Gi
{{- end }}
{{- end }}
71 changes: 71 additions & 0 deletions charts/mlrun-ce/templates/kafka/kafka-network-policy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{{- if .Values.kafka.rbac.enabled -}}
{{- $kafkaName := .Values.kafka.name | default "kafka-stream" -}}
{{- $currentNamespace := .Release.Namespace -}}
---
# NetworkPolicy: Kafka Isolation
# Purpose: Ensure pods in this namespace can ONLY connect to Kafka in their OWN
# namespace, preventing cross-tenant Kafka access in multi-namespace deployments.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: kafka-isolation
namespace: {{ $currentNamespace }}
labels:
app.kubernetes.io/name: mlrun-ce
app.kubernetes.io/component: kafka-rbac
app.kubernetes.io/managed-by: {{ .Release.Name }}
spec:
# Apply to all pods in this namespace
podSelector: {}

policyTypes:
- Egress

egress:
# =============================================================================
# Kafka ports (9092-9094): ONLY allowed to Kafka in the SAME namespace
# =============================================================================
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: {{ $currentNamespace }}
podSelector:
matchLabels:
strimzi.io/cluster: {{ $kafkaName }}
ports:
- protocol: TCP
port: 9092 # client listener
- protocol: TCP
port: 9093 # controller listener
- protocol: TCP
port: 9094 # external listener

# =============================================================================
# All other traffic: ALLOWED (no restrictions)
# =============================================================================
# Allow all egress on non-Kafka ports. This ensures that services like:
# - Docker registries (Kaniko builds)
# - Kubernetes API server
# - DNS
# - External APIs
# ...continue to work without needing explicit whitelist rules.

# Allow all TCP traffic on ports below Kafka range
- ports:
- protocol: TCP
port: 1
endPort: 9091

# Allow all TCP traffic on ports above Kafka range
- ports:
- protocol: TCP
port: 9095
endPort: 65535

# Allow all UDP traffic (DNS, etc.)
- ports:
- protocol: UDP
port: 1
endPort: 65535

{{- end }}
34 changes: 34 additions & 0 deletions charts/mlrun-ce/templates/kafka/kafka-nodepool.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{{- if .Values.kafka.enabled }}
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: {{ .Values.kafka.name }}-pool
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kafka
app.kubernetes.io/component: nodepool
strimzi.io/cluster: {{ .Values.kafka.name }}
{{- include "mlrun-ce.common.labels" . | nindent 4 }}
annotations:
# Delay KafkaNodePool CR creation until after CRDs are installed
helm.sh/hook: post-install,post-upgrade
helm.sh/hook-weight: "5"
spec:
replicas: {{ .Values.kafka.replicas }}
roles:
- controller
- broker
storage:
type: {{ .Values.kafka.storage.type }}
size: {{ .Values.kafka.storage.size }}
{{- if .Values.kafka.storage.class }}
class: {{ .Values.kafka.storage.class }}
{{- end }}
resources:
requests:
memory: {{ .Values.kafka.resources.requests.memory }}
cpu: {{ .Values.kafka.resources.requests.cpu }}
limits:
memory: {{ .Values.kafka.resources.limits.memory }}
cpu: {{ .Values.kafka.resources.limits.cpu }}
{{- end }}
90 changes: 90 additions & 0 deletions charts/mlrun-ce/templates/kafka/kafka-rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{{- if .Values.kafka.rbac.enabled -}}
{{- $operatorNamespace := .Values.kafka.rbac.operatorNamespace | default .Release.Namespace -}}
{{- $kafkaName := .Values.kafka.name | default "kafka-stream" -}}
{{- $currentNamespace := .Release.Namespace -}}
---
# ServiceAccount for Kafka client applications
apiVersion: v1
kind: ServiceAccount
metadata:
name: kafka-client
namespace: {{ $currentNamespace }}
labels:
app.kubernetes.io/name: mlrun-ce
app.kubernetes.io/component: kafka-rbac
app.kubernetes.io/managed-by: {{ .Release.Name }}
---
# Role: Allow managing Kafka resources via CRDs in the operator namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ $currentNamespace }}-kafka-resource-manager
namespace: {{ $operatorNamespace }}
labels:
app.kubernetes.io/name: mlrun-ce
app.kubernetes.io/component: kafka-rbac
app.kubernetes.io/managed-by: {{ .Release.Name }}
user-namespace: {{ $currentNamespace }}
rules:
# Allow creating and managing KafkaTopic CRDs
- apiGroups:
- kafka.strimzi.io
resources:
- kafkatopics
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
# Allow checking KafkaTopic status
- apiGroups:
- kafka.strimzi.io
resources:
- kafkatopics/status
verbs:
- get
- list
- watch
# Allow reading KafkaUser CRDs (if using SCRAM auth)
- apiGroups:
- kafka.strimzi.io
resources:
- kafkausers
verbs:
- get
- list
- watch
# Allow reading the Kafka cluster info
- apiGroups:
- kafka.strimzi.io
resources:
- kafkas
verbs:
- get
- list
- watch
---
# RoleBinding: Grant Kafka resource management permissions to ServiceAccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: {{ $currentNamespace }}-kafka-resource-manager
namespace: {{ $operatorNamespace }}
labels:
app.kubernetes.io/name: mlrun-ce
app.kubernetes.io/component: kafka-rbac
app.kubernetes.io/managed-by: {{ .Release.Name }}
user-namespace: {{ $currentNamespace }}
subjects:
- kind: ServiceAccount
name: kafka-client
namespace: {{ $currentNamespace }}
roleRef:
kind: Role
name: {{ $currentNamespace }}-kafka-resource-manager
apiGroup: rbac.authorization.k8s.io
{{- end }}

Loading