homelab icon indicating copy to clipboard operation
homelab copied to clipboard

feat: implement bgp and gateway api

Open timtorChen opened this issue 2 weeks ago • 2 comments

This PR implement my first trial of BGP and Gateway API.

Major changes: Remove the metalllb-system. Upgrate cilium version to 1.17 to support Gateway spec.addresses. Change ingress-nginx Loadbalancer IP to 192.168.33.2 (allocated by cilium)

add bgp config (k8s and mikrotik terrafrom)

ingress-nginx is kept for https backend

Minor: Remove most of Ingress object, but keep ingrss-nginx

timtorChen avatar Nov 30 '25 12:11 timtorChen

--- kubernetes/argo-system Kustomization: flux-system/1-argo-system HelmRelease: argo-system/argo-workflows

+++ kubernetes/argo-system Kustomization: flux-system/1-argo-system HelmRelease: argo-system/argo-workflows

@@ -77,17 +77,12 @@

       tag: v3.6.5
     server:
       authModes:
       - sso
       deploymentAnnotations:
         secret.reloader.stakater.com/reload: argo-workflows-secret
-      ingress:
-        enabled: true
-        hosts:
-        - workflows.timtor.dev
-        ingressClassName: nginx
       securityContext:
         allowPrivilegeEscalation: false
         capabilities:
           drop:
           - ALL
         readOnlyRootFilesystem: true
--- kubernetes/argo-system Kustomization: flux-system/1-argo-system HTTPRoute: argo-system/argo-workflows-server

+++ kubernetes/argo-system Kustomization: flux-system/1-argo-system HTTPRoute: argo-system/argo-workflows-server

@@ -0,0 +1,26 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-argo-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: argo-workflows-server
+  namespace: argo-system
+spec:
+  hostnames:
+  - workflows.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  rules:
+  - backendRefs:
+    - kind: Service
+      name: argo-workflows-server
+      port: 2746
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/argo-system Kustomization: flux-system/1-argo-system HTTPRoute: argo-system/argo-workflows-server-http-rediect

+++ kubernetes/argo-system Kustomization: flux-system/1-argo-system HTTPRoute: argo-system/argo-workflows-server-http-rediect

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-argo-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: argo-workflows-server-http-rediect
+  namespace: argo-system
+spec:
+  hostnames:
+  - workflows.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  rules:
+  - filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/kromgo Kustomization: flux-system/5-kromgo HelmRelease: kromgo/kromgo

+++ kubernetes/kromgo Kustomization: flux-system/5-kromgo HelmRelease: kromgo/kromgo

@@ -46,33 +46,60 @@

         rollingUpdate:
           unavailable: 1
         strategy: RollingUpdate
         type: deployment
     defaultPodOptions:
       automountServiceAccountToken: false
-    ingress:
-      main:
-        className: nginx
-        hosts:
-        - host: kromgo.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 8080
     persistence:
       kromgo-config:
         advancedMounts:
           main:
             main:
             - path: /kromgo/config.yaml
               readOnly: true
               subPath: config.yaml
         name: kromgo-config
         type: configMap
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - kromgo.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - kromgo.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: kromgo
+            port: 8080
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       main:
         controller: main
         ports:
           http:
             port: 8080
--- kubernetes/kromgo Kustomization: flux-system/5-kromgo CiliumNetworkPolicy: kromgo/kromgo-app-policy

+++ kubernetes/kromgo Kustomization: flux-system/5-kromgo CiliumNetworkPolicy: kromgo/kromgo-app-policy

@@ -12,12 +12,22 @@

     matchLabels:
       app.kubernetes.io/name: kromgo
   ingress:
   - fromEndpoints:
     - matchLabels:
         k8s:io.kubernetes.pod.namespace: ingress-nginx
+    toPorts:
+    - ports:
+      - port: '8080'
+        protocol: TCP
+- endpointSelector:
+    matchLabels:
+      app.kubernetes.io/name: kromgo
+  ingress:
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '8080'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/metallb-system Kustomization: flux-system/1-metallb-system Namespace: flux-system/metallb-system

+++ kubernetes/metallb-system Kustomization: flux-system/1-metallb-system Namespace: flux-system/metallb-system

@@ -1,12 +0,0 @@

----
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 1-metallb-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-    pod-security.kubernetes.io/audit: privileged
-    pod-security.kubernetes.io/enforce: privileged
-    pod-security.kubernetes.io/warn: privileged
-  name: metallb-system
-
--- kubernetes/metallb-system Kustomization: flux-system/1-metallb-system HelmRepository: metallb-system/metallb

+++ kubernetes/metallb-system Kustomization: flux-system/1-metallb-system HelmRepository: metallb-system/metallb

@@ -1,13 +0,0 @@

----
-apiVersion: source.toolkit.fluxcd.io/v1
-kind: HelmRepository
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 1-metallb-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: metallb
-  namespace: metallb-system
-spec:
-  interval: 24h
-  url: https://metallb.github.io/metallb
-
--- kubernetes/metallb-system Kustomization: flux-system/1-metallb-system HelmRelease: metallb-system/metallb

+++ kubernetes/metallb-system Kustomization: flux-system/1-metallb-system HelmRelease: metallb-system/metallb

@@ -1,30 +0,0 @@

----
-apiVersion: helm.toolkit.fluxcd.io/v2
-kind: HelmRelease
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 1-metallb-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: metallb
-  namespace: metallb-system
-spec:
-  chart:
-    spec:
-      chart: metallb
-      sourceRef:
-        kind: HelmRepository
-        name: metallb
-      version: 0.14.9
-  install:
-    crds: CreateReplace
-  interval: 1h
-  maxHistory: 1
-  upgrade:
-    crds: CreateReplace
-  values:
-    crds:
-      enabled: true
-    speaker:
-      frr:
-        enabled: false
-
--- kubernetes/metallb-system Kustomization: flux-system/1-metallb-system IPAddressPool: metallb-system/default

+++ kubernetes/metallb-system Kustomization: flux-system/1-metallb-system IPAddressPool: metallb-system/default

@@ -1,13 +0,0 @@

----
-apiVersion: metallb.io/v1beta1
-kind: IPAddressPool
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 1-metallb-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: default
-  namespace: metallb-system
-spec:
-  addresses:
-  - 192.168.253.100/32
-
--- kubernetes/metallb-system Kustomization: flux-system/1-metallb-system L2Advertisement: metallb-system/default

+++ kubernetes/metallb-system Kustomization: flux-system/1-metallb-system L2Advertisement: metallb-system/default

@@ -1,15 +0,0 @@

----
-apiVersion: metallb.io/v1beta1
-kind: L2Advertisement
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 1-metallb-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: default
-  namespace: metallb-system
-spec:
-  interfaces:
-  - eth0
-  ipAddressPools:
-  - default
-
--- kubernetes/ingress-nginx Kustomization: flux-system/3-ingress-nginx HelmRelease: ingress-nginx/ingress-nginx

+++ kubernetes/ingress-nginx Kustomization: flux-system/3-ingress-nginx HelmRelease: ingress-nginx/ingress-nginx

@@ -85,13 +85,13 @@

           memory: 512Mi
         requests:
           cpu: 100m
           memory: 128Mi
       service:
         externalIPs:
-        - 192.168.253.100
+        - 192.168.33.2
         externalTrafficPolicy: Local
         type: LoadBalancer
       updateStrategy:
         rollingUpdate:
           maxSurge: 1
           maxUnavailable: 1
--- kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph Ingress: rook-ceph/s3-fast

+++ kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph Ingress: rook-ceph/s3-fast

@@ -1,23 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 2-rook-ceph
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: s3-fast
-  namespace: rook-ceph
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: s3-fast.timtor.dev
-    http:
-      paths:
-      - backend:
-          service:
-            name: rook-ceph-rgw-fast
-            port:
-              number: 8080
-        path: /
-        pathType: Prefix
-
--- kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/ceph-dashboard

+++ kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/ceph-dashboard

@@ -0,0 +1,26 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 2-rook-ceph
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: ceph-dashboard
+  namespace: rook-ceph
+spec:
+  hostnames:
+  - ceph.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  rules:
+  - backendRefs:
+    - kind: Service
+      name: rook-ceph-mgr-dashboard
+      port: 7000
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/ceph-dashboard-http-redirect

+++ kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/ceph-dashboard-http-redirect

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 2-rook-ceph
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: ceph-dashboard-http-redirect
+  namespace: rook-ceph
+spec:
+  hostnames:
+  - ceph.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  rules:
+  - filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/s3-fast

+++ kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/s3-fast

@@ -0,0 +1,26 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 2-rook-ceph
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: s3-fast
+  namespace: rook-ceph
+spec:
+  hostnames:
+  - s3-fast.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  rules:
+  - backendRefs:
+    - kind: Service
+      name: rook-ceph-rgw-fast
+      port: 8080
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/s3-fast-http-redirect

+++ kubernetes/rook-ceph Kustomization: flux-system/2-rook-ceph HTTPRoute: rook-ceph/s3-fast-http-redirect

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 2-rook-ceph
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: s3-fast-http-redirect
+  namespace: rook-ceph
+spec:
+  hostnames:
+  - s3-fast.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  rules:
+  - filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system HelmRelease: kube-system/cilium

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system HelmRelease: kube-system/cilium

@@ -11,33 +11,41 @@

   chart:
     spec:
       chart: cilium
       sourceRef:
         kind: HelmRepository
         name: cilium
-      version: 1.16.6
+      version: 1.17.10
   interval: 1h
   maxHistory: 1
   values:
+    bgpControlPlane:
+      enabled: true
     cgroup:
       autoMount:
         enabled: false
       hostRoot: /sys/fs/cgroup
     envoy:
       enabled: true
+    gatewayAPI:
+      enabled: true
+      gatewayClass:
+        create: auto
     hubble:
       enabled: true
       relay:
         enabled: true
       ui:
         enabled: true
     ipam:
       mode: kubernetes
     k8sServiceHost: localhost
     k8sServicePort: 7445
     kubeProxyReplacement: true
+    nodePort:
+      enabled: true
     securityContext:
       capabilities:
         ciliumAgent:
         - CHOWN
         - KILL
         - NET_ADMIN
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system GitRepository: kube-system/gateway-api-crd

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system GitRepository: kube-system/gateway-api-crd

@@ -0,0 +1,19 @@

+---
+apiVersion: source.toolkit.fluxcd.io/v1
+kind: GitRepository
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: gateway-api-crd
+  namespace: kube-system
+spec:
+  ignore: |
+    /*
+    !/config/crd/standard
+    !/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
+  interval: 1m
+  ref:
+    tag: v1.3.0
+  url: https://github.com/kubernetes-sigs/gateway-api
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system Kustomization: kube-system/gateway-api-crd

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system Kustomization: kube-system/gateway-api-crd

@@ -0,0 +1,16 @@

+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: gateway-api-crd
+  namespace: kube-system
+spec:
+  interval: 10m0s
+  prune: false
+  sourceRef:
+    kind: GitRepository
+    name: gateway-api-crd
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPClusterConfig: flux-system/cilium-bgp

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPClusterConfig: flux-system/cilium-bgp

@@ -0,0 +1,23 @@

+---
+apiVersion: cilium.io/v2alpha1
+kind: CiliumBGPClusterConfig
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: cilium-bgp
+spec:
+  bgpInstances:
+  - localASN: 65001
+    name: homelab-talos-cluster
+    peers:
+    - name: mikrotik
+      peerASN: 65000
+      peerAddress: 192.168.248.1
+      peerConfigRef:
+        name: cilium-peer
+  nodeSelector:
+    matchExpressions:
+    - key: node-role.kubernetes.io/control-plane
+      operator: DoesNotExist
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPPeerConfig: flux-system/cilium-peer

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPPeerConfig: flux-system/cilium-peer

@@ -0,0 +1,22 @@

+---
+apiVersion: cilium.io/v2alpha1
+kind: CiliumBGPPeerConfig
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: cilium-peer
+spec:
+  families:
+  - advertisements:
+      matchLabels:
+        advertise: bgp
+    afi: ipv4
+    safi: unicast
+  gracefulRestart:
+    enabled: true
+    restartTimeSeconds: 15
+  timers:
+    holdTimeSeconds: 9
+    keepAliveTimeSeconds: 3
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPAdvertisement: flux-system/shared-bgpadvertisements

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumBGPAdvertisement: flux-system/shared-bgpadvertisements

@@ -0,0 +1,20 @@

+---
+apiVersion: cilium.io/v2alpha1
+kind: CiliumBGPAdvertisement
+metadata:
+  labels:
+    advertise: bgp
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: shared-bgpadvertisements
+spec:
+  advertisements:
+  - advertisementType: Service
+    selector:
+      matchExpressions:
+      - key: dummy
+        operator: DoesNotExist
+    service:
+      addresses:
+      - LoadBalancerIP
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system Certificate: kube-system/timtor.dev-wildcard-certificate

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system Certificate: kube-system/timtor.dev-wildcard-certificate

@@ -0,0 +1,18 @@

+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: timtor.dev-wildcard-certificate
+  namespace: kube-system
+spec:
+  dnsNames:
+  - timtor.dev
+  - '*.timtor.dev'
+  issuerRef:
+    kind: ClusterIssuer
+    name: timtor.dev-le-dns01
+  secretName: timtor.dev-wildcard-certificate-secret
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system GatewayClass: flux-system/cilium

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system GatewayClass: flux-system/cilium

@@ -0,0 +1,12 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: GatewayClass
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: cilium
+spec:
+  controllerName: io.cilium/gateway-controller
+  description: The default Cilium GatewayClass
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system Gateway: kube-system/cilium-default

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system Gateway: kube-system/cilium-default

@@ -0,0 +1,34 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: Gateway
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: cilium-default
+  namespace: kube-system
+spec:
+  addresses:
+  - type: IPAddress
+    value: 192.168.33.1
+  gatewayClassName: cilium
+  listeners:
+  - allowedRoutes:
+      namespaces:
+        from: All
+    name: http
+    port: 80
+    protocol: HTTP
+  - allowedRoutes:
+      namespaces:
+        from: All
+    name: https
+    port: 443
+    protocol: HTTPS
+    tls:
+      certificateRefs:
+      - group: ''
+        kind: Secret
+        name: timtor.dev-wildcard-certificate-secret
+      mode: Terminate
+
--- kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumLoadBalancerIPPool: flux-system/shared-pool

+++ kubernetes/kube-system Kustomization: flux-system/1-kube-system CiliumLoadBalancerIPPool: flux-system/shared-pool

@@ -0,0 +1,17 @@

+---
+apiVersion: cilium.io/v2alpha1
+kind: CiliumLoadBalancerIPPool
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 1-kube-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: shared-pool
+spec:
+  allowFirstLastIPs: 'No'
+  blocks:
+  - cidr: 192.168.33.0/24
+  serviceSelector:
+    matchExpressions:
+    - key: dummy
+      operator: DoesNotExist
+
--- kubernetes/grafana Kustomization: flux-system/5-grafana HelmRelease: grafana/grafana

+++ kubernetes/grafana Kustomization: flux-system/5-grafana HelmRelease: grafana/grafana

@@ -114,17 +114,12 @@

         ha_peer_timeout: 15s
         ha_peers: grafana-alerting:9094
     image:
       registry: docker.io
       repository: grafana/grafana
       tag: 12.0.1
-    ingress:
-      enabled: true
-      hosts:
-      - grafana.timtor.dev
-      ingressClassName: nginx
     plugins:
     - grafana-synthetic-monitoring-app
     podAnnotations:
       secret.reloader.stakater.com/reload: grafana-secret
     replicas: 2
     resources:
--- kubernetes/grafana Kustomization: flux-system/5-grafana CiliumNetworkPolicy: grafana/grafana-app-policy

+++ kubernetes/grafana Kustomization: flux-system/5-grafana CiliumNetworkPolicy: grafana/grafana-app-policy

@@ -9,15 +9,14 @@

   namespace: grafana
 specs:
 - endpointSelector:
     matchLabels:
       app.kubernetes.io/name: grafana
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '3000'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/grafana Kustomization: flux-system/5-grafana HTTPRoute: grafana/grafana

+++ kubernetes/grafana Kustomization: flux-system/5-grafana HTTPRoute: grafana/grafana

@@ -0,0 +1,26 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 5-grafana
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: grafana
+  namespace: grafana
+spec:
+  hostnames:
+  - grafana.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  rules:
+  - backendRefs:
+    - kind: Service
+      name: grafana
+      port: 80
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/grafana Kustomization: flux-system/5-grafana HTTPRoute: grafana/grafana-http-redirect

+++ kubernetes/grafana Kustomization: flux-system/5-grafana HTTPRoute: grafana/grafana-http-redirect

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 5-grafana
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: grafana-http-redirect
+  namespace: grafana
+spec:
+  hostnames:
+  - grafana.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  rules:
+  - filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/unifi-controller Kustomization: flux-system/5-unifi-controller HelmRelease: unifi-controller/unifi-controller

+++ kubernetes/unifi-controller Kustomization: flux-system/5-unifi-controller HelmRelease: unifi-controller/unifi-controller

@@ -90,12 +90,13 @@

           subPath: data
         type: persistentVolumeClaim
       tmp:
         globalMounts:
         - path: /tmp
         type: emptyDir
+    route: {}
     service:
       main:
         controller: main
         ports:
           http:
             port: 8443
--- kubernetes/miniflux Kustomization: flux-system/6-miniflux HelmRelease: miniflux/miniflux

+++ kubernetes/miniflux Kustomization: flux-system/6-miniflux HelmRelease: miniflux/miniflux

@@ -88,32 +88,59 @@

           automountServiceAccountToken: false
           securityContext:
             fsGroup: 65534
         replicas: 1
         strategy: RollingUpdate
         type: deployment
-    ingress:
-      main:
-        className: nginx
-        hosts:
-        - host: rss.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 8080
     persistence:
       secret:
         type: custom
         volumeSpec:
           csi:
             driver: secrets-store.csi.k8s.io
             readOnly: true
             volumeAttributes:
               secretProviderClass: miniflux-secret
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - rss.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - rss.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: miniflux
+            port: 8080
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       main:
         controller: main
         ports:
           http:
             port: 8080
--- kubernetes/miniflux Kustomization: flux-system/6-miniflux CiliumNetworkPolicy: miniflux/miniflux-app-policy

+++ kubernetes/miniflux Kustomization: flux-system/6-miniflux CiliumNetworkPolicy: miniflux/miniflux-app-policy

@@ -9,15 +9,14 @@

   namespace: miniflux
 specs:
 - endpointSelector:
     matchLabels:
       app.kubernetes.io/name: miniflux
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '8080'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/mydata/immich Kustomization: flux-system/6-immich HelmRelease: mydata/immich

+++ kubernetes/mydata/immich Kustomization: flux-system/6-immich HelmRelease: mydata/immich

@@ -181,25 +181,12 @@

     defaultPodOptions:
       automountServiceAccountToken: false
       securityContext:
         fsGroup: 65534
     global:
       nameOverride: immich
-    ingress:
-      main:
-        annotations:
-          nginx.ingress.kubernetes.io/proxy-body-size: '0'
-        className: nginx
-        hosts:
-        - host: photo.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: server
-              port: 3001
     persistence:
       cache:
         accessMode: ReadWriteMany
         advancedMounts:
           machine-learning:
             main:
@@ -223,12 +210,50 @@

         volumeSpec:
           csi:
             driver: secrets-store.csi.k8s.io
             readOnly: true
             volumeAttributes:
               secretProviderClass: immich-secret
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - photo.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - photo.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: immich
+            port: 3001
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       machine-learning:
         controller: machine-learning
         ports:
           http:
             port: 3003
--- kubernetes/mydata/immich Kustomization: flux-system/6-immich CiliumNetworkPolicy: mydata/immich-app-policy

+++ kubernetes/mydata/immich Kustomization: flux-system/6-immich CiliumNetworkPolicy: mydata/immich-app-policy

@@ -14,19 +14,16 @@

     matchLabels:
       app.kubernetes.io/name: immich
   ingress:
   - {}
 - endpointSelector:
     matchLabels:
-      app.kubernetes.io/component: server
       app.kubernetes.io/name: immich
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        app.kubernetes.io/name: ingress-nginx
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '3001'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/mydata/navidrome Kustomization: flux-system/6-navidrome HelmRelease: mydata/navidrome

+++ kubernetes/mydata/navidrome Kustomization: flux-system/6-navidrome HelmRelease: mydata/navidrome

@@ -61,23 +61,12 @@

         pod:
           securityContext:
             fsGroup: 65534
         replicas: 1
         strategy: Recreate
         type: deployment
-    ingress:
-      main:
-        className: nginx
-        hosts:
-        - host: music.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 4533
     persistence:
       cache:
         accessMode: ReadWriteOnce
         advancedMounts:
           main:
             main:
@@ -97,12 +86,50 @@

         advancedMounts:
           main:
             main:
             - path: /db
         existingClaim: navidrome-db
         type: persistentVolumeClaim
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - music.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - music.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: navidrome
+            port: 4533
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       main:
         controller: main
         ports:
           http:
             port: 4533
--- kubernetes/mydata/navidrome Kustomization: flux-system/6-navidrome CiliumNetworkPolicy: mydata/navidrome-policy

+++ kubernetes/mydata/navidrome Kustomization: flux-system/6-navidrome CiliumNetworkPolicy: mydata/navidrome-policy

@@ -9,15 +9,13 @@

   namespace: mydata
 specs:
 - endpointSelector:
     matchLabels:
       app.kubernetes.io/name: navidrome
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        app.kubernetes.io/name: ingress-nginx
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '4533'
         protocol: TCP
 
--- kubernetes/mydata/nextcloud Kustomization: flux-system/6-nextcloud HelmRelease: mydata/nextcloud

+++ kubernetes/mydata/nextcloud Kustomization: flux-system/6-nextcloud HelmRelease: mydata/nextcloud

@@ -98,25 +98,12 @@

             fsGroup: 33
         replicas: 2
         rollingUpdate:
           unavailable: 1
         strategy: RollingUpdate
         type: deployment
-    ingress:
-      main:
-        annotations:
-          nginx.ingress.kubernetes.io/proxy-body-size: '0'
-        className: nginx
-        hosts:
-        - host: drive.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 8080
     persistence:
       apache-extra-config:
         globalMounts:
         - path: /etc/apache2/conf-enabled/extra.conf
           subPath: extra.conf
         items:
@@ -181,12 +168,50 @@

         volumeSpec:
           csi:
             driver: secrets-store.csi.k8s.io
             readOnly: true
             volumeAttributes:
               secretProviderClass: nextcloud-secret
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - drive.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - drive.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: nextcloud
+            port: 8080
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       main:
         controller: main
         ports:
           http:
             port: 8080
--- kubernetes/mydata/nextcloud Kustomization: flux-system/6-nextcloud CiliumNetworkPolicy: mydata/nextcloud-app-policy

+++ kubernetes/mydata/nextcloud Kustomization: flux-system/6-nextcloud CiliumNetworkPolicy: mydata/nextcloud-app-policy

@@ -9,16 +9,14 @@

   namespace: mydata
 specs:
 - endpointSelector:
     matchLabels:
       app.kubernetes.io/name: nextcloud
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        app.kubernetes.io/name: ingress-nginx
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '8080'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/vaultwarden Kustomization: flux-system/6-vaultwarden HelmRelease: vaultwarden/vaultwarden

+++ kubernetes/vaultwarden Kustomization: flux-system/6-vaultwarden HelmRelease: vaultwarden/vaultwarden

@@ -85,28 +85,12 @@

               value: '1'
           securityContext:
             fsGroup: 65534
         replicas: 1
         strategy: Recreate
         type: deployment
-    ingress:
-      main:
-        className: nginx
-        hosts:
-        - host: vault.timtor.dev
-          paths:
-          - path: /
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 8080
-          - path: /notifications/hub
-            pathType: Prefix
-            service:
-              identifier: main
-              port: 8080
     persistence:
       data:
         existingClaim: vaultwarden-data
         globalMounts:
         - path: /data
         type: persistentVolumeClaim
@@ -115,12 +99,50 @@

         volumeSpec:
           csi:
             driver: secrets-store.csi.k8s.io
             readOnly: true
             volumeAttributes:
               secretProviderClass: vaultwarden-secret
+    route:
+      http-redirect:
+        enabled: true
+        hostnames:
+        - vault.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: http
+        rules:
+        - filters:
+          - requestRedirect:
+              scheme: https
+              statusCode: 301
+            type: RequestRedirect
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
+      main:
+        enabled: true
+        hostnames:
+        - vault.timtor.dev
+        kind: HTTPRoute
+        parentRefs:
+        - name: cilium-default
+          namespace: kube-system
+          sectionName: https
+        rules:
+        - backendRefs:
+          - kind: Service
+            name: vaultwarden
+            port: 8080
+          matches:
+          - path:
+              type: PathPrefix
+              value: /
     service:
       main:
         controller: main
         ports:
           http:
             port: 8080
--- kubernetes/vaultwarden Kustomization: flux-system/6-vaultwarden CiliumNetworkPolicy: vaultwarden/vaultwarden-policy

+++ kubernetes/vaultwarden Kustomization: flux-system/6-vaultwarden CiliumNetworkPolicy: vaultwarden/vaultwarden-policy

@@ -9,15 +9,14 @@

   namespace: vaultwarden
 specs:
 - endpointSelector:
     matchLabels:
       app.kubernetes.io/name: vaultwarden
   ingress:
-  - fromEndpoints:
-    - matchLabels:
-        k8s:io.kubernetes.pod.namespace: ingress-nginx
+  - fromEntities:
+    - ingress
     toPorts:
     - ports:
       - port: '8080'
         protocol: TCP
 - egress:
   - toEndpoints:
--- kubernetes/flux-system Kustomization: flux-system/0-flux-system Kustomization: flux-system/1-metallb-system

+++ kubernetes/flux-system Kustomization: flux-system/0-flux-system Kustomization: flux-system/1-metallb-system

@@ -1,17 +0,0 @@

----
-apiVersion: kustomize.toolkit.fluxcd.io/v1
-kind: Kustomization
-metadata:
-  labels:
-    kustomize.toolkit.fluxcd.io/name: 0-flux-system
-    kustomize.toolkit.fluxcd.io/namespace: flux-system
-  name: 1-metallb-system
-  namespace: flux-system
-spec:
-  interval: 10m0s
-  path: /kubernetes/metallb-system
-  prune: false
-  sourceRef:
-    kind: GitRepository
-    name: homelab
-
--- kubernetes/flux-system Kustomization: flux-system/0-flux-system HTTPRoute: flux-system/webhook-receiver

+++ kubernetes/flux-system Kustomization: flux-system/0-flux-system HTTPRoute: flux-system/webhook-receiver

@@ -0,0 +1,26 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 0-flux-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: webhook-receiver
+  namespace: flux-system
+spec:
+  hostnames:
+  - flux.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  rules:
+  - backendRefs:
+    - kind: Service
+      name: webhook-receiver
+      port: 80
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- kubernetes/flux-system Kustomization: flux-system/0-flux-system HTTPRoute: flux-system/webhook-receiver-http-redirect

+++ kubernetes/flux-system Kustomization: flux-system/0-flux-system HTTPRoute: flux-system/webhook-receiver-http-redirect

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: 0-flux-system
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: webhook-receiver-http-redirect
+  namespace: flux-system
+spec:
+  hostnames:
+  - flux.timtor.dev
+  parentRefs:
+  - name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  rules:
+  - filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+

github-actions[bot] avatar Nov 30 '25 12:11 github-actions[bot]

--- HelmRelease: miniflux/miniflux Ingress: miniflux/miniflux

+++ HelmRelease: miniflux/miniflux Ingress: miniflux/miniflux

@@ -1,24 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: miniflux
-  labels:
-    app.kubernetes.io/instance: miniflux
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: miniflux
-  namespace: miniflux
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: rss.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: miniflux
-            port:
-              number: 8080
-
--- HelmRelease: miniflux/miniflux HTTPRoute: miniflux/miniflux-http-redirect

+++ HelmRelease: miniflux/miniflux HTTPRoute: miniflux/miniflux-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: miniflux-http-redirect
+  labels:
+    app.kubernetes.io/instance: miniflux
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: miniflux
+  namespace: miniflux
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - rss.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: miniflux/miniflux HTTPRoute: miniflux/miniflux-main

+++ HelmRelease: miniflux/miniflux HTTPRoute: miniflux/miniflux-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: miniflux-main
+  labels:
+    app.kubernetes.io/instance: miniflux
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: miniflux
+  namespace: miniflux
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - rss.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: miniflux
+      namespace: miniflux
+      port: 8080
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- HelmRelease: kromgo/kromgo Ingress: kromgo/kromgo

+++ HelmRelease: kromgo/kromgo Ingress: kromgo/kromgo

@@ -1,24 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: kromgo
-  labels:
-    app.kubernetes.io/instance: kromgo
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: kromgo
-  namespace: kromgo
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: kromgo.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: kromgo
-            port:
-              number: 8080
-
--- HelmRelease: kromgo/kromgo HTTPRoute: kromgo/kromgo-http-redirect

+++ HelmRelease: kromgo/kromgo HTTPRoute: kromgo/kromgo-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: kromgo-http-redirect
+  labels:
+    app.kubernetes.io/instance: kromgo
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: kromgo
+  namespace: kromgo
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - kromgo.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: kromgo/kromgo HTTPRoute: kromgo/kromgo-main

+++ HelmRelease: kromgo/kromgo HTTPRoute: kromgo/kromgo-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: kromgo-main
+  labels:
+    app.kubernetes.io/instance: kromgo
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: kromgo
+  namespace: kromgo
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - kromgo.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: kromgo
+      namespace: kromgo
+      port: 8080
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- HelmRelease: mydata/navidrome Ingress: mydata/navidrome

+++ HelmRelease: mydata/navidrome Ingress: mydata/navidrome

@@ -1,24 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: navidrome
-  labels:
-    app.kubernetes.io/instance: navidrome
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: navidrome
-  namespace: mydata
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: music.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: navidrome
-            port:
-              number: 4533
-
--- HelmRelease: mydata/navidrome HTTPRoute: mydata/navidrome-http-redirect

+++ HelmRelease: mydata/navidrome HTTPRoute: mydata/navidrome-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: navidrome-http-redirect
+  labels:
+    app.kubernetes.io/instance: navidrome
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: navidrome
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - music.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: mydata/navidrome HTTPRoute: mydata/navidrome-main

+++ HelmRelease: mydata/navidrome HTTPRoute: mydata/navidrome-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: navidrome-main
+  labels:
+    app.kubernetes.io/instance: navidrome
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: navidrome
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - music.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: navidrome
+      namespace: mydata
+      port: 4533
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- HelmRelease: mydata/immich Ingress: mydata/immich

+++ HelmRelease: mydata/immich Ingress: mydata/immich

@@ -1,26 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: immich
-  labels:
-    app.kubernetes.io/instance: immich
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: immich
-  annotations:
-    nginx.ingress.kubernetes.io/proxy-body-size: '0'
-  namespace: mydata
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: photo.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: immich
-            port:
-              number: 3001
-
--- HelmRelease: mydata/immich HTTPRoute: mydata/immich-http-redirect

+++ HelmRelease: mydata/immich HTTPRoute: mydata/immich-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: immich-http-redirect
+  labels:
+    app.kubernetes.io/instance: immich
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: immich
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - photo.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: mydata/immich HTTPRoute: mydata/immich-main

+++ HelmRelease: mydata/immich HTTPRoute: mydata/immich-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: immich-main
+  labels:
+    app.kubernetes.io/instance: immich
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: immich
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - photo.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: immich
+      namespace: mydata
+      port: 3001
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- HelmRelease: vaultwarden/vaultwarden Ingress: vaultwarden/vaultwarden

+++ HelmRelease: vaultwarden/vaultwarden Ingress: vaultwarden/vaultwarden

@@ -1,31 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: vaultwarden
-  labels:
-    app.kubernetes.io/instance: vaultwarden
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: vaultwarden
-  namespace: vaultwarden
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: vault.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: vaultwarden
-            port:
-              number: 8080
-      - path: /notifications/hub
-        pathType: Prefix
-        backend:
-          service:
-            name: vaultwarden
-            port:
-              number: 8080
-
--- HelmRelease: vaultwarden/vaultwarden HTTPRoute: vaultwarden/vaultwarden-http-redirect

+++ HelmRelease: vaultwarden/vaultwarden HTTPRoute: vaultwarden/vaultwarden-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: vaultwarden-http-redirect
+  labels:
+    app.kubernetes.io/instance: vaultwarden
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: vaultwarden
+  namespace: vaultwarden
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - vault.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: vaultwarden/vaultwarden HTTPRoute: vaultwarden/vaultwarden-main

+++ HelmRelease: vaultwarden/vaultwarden HTTPRoute: vaultwarden/vaultwarden-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: vaultwarden-main
+  labels:
+    app.kubernetes.io/instance: vaultwarden
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: vaultwarden
+  namespace: vaultwarden
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - vault.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: vaultwarden
+      namespace: vaultwarden
+      port: 8080
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+
--- HelmRelease: kube-system/cilium ConfigMap: kube-system/cilium-config

+++ HelmRelease: kube-system/cilium ConfigMap: kube-system/cilium-config

@@ -13,42 +13,63 @@

   debug: 'false'
   debug-verbose: ''
   enable-policy: default
   policy-cidr-match-mode: ''
   operator-prometheus-serve-addr: :9963
   enable-metrics: 'true'
+  enable-envoy-config: 'true'
+  envoy-config-retry-interval: 15s
+  enable-gateway-api: 'true'
+  enable-gateway-api-secrets-sync: 'true'
+  enable-gateway-api-proxy-protocol: 'false'
+  enable-gateway-api-app-protocol: 'false'
+  enable-gateway-api-alpn: 'false'
+  gateway-api-xff-num-trusted-hops: '0'
+  gateway-api-service-externaltrafficpolicy: Cluster
+  gateway-api-secrets-namespace: cilium-secrets
+  gateway-api-hostnetwork-enabled: 'false'
+  gateway-api-hostnetwork-nodelabelselector: ''
+  enable-policy-secrets-sync: 'true'
+  policy-secrets-only-from-secrets-namespace: 'true'
+  policy-secrets-namespace: cilium-secrets
   enable-ipv4: 'true'
   enable-ipv6: 'false'
   custom-cni-conf: 'false'
   enable-bpf-clock-probe: 'false'
   monitor-aggregation: medium
   monitor-aggregation-interval: 5s
   monitor-aggregation-flags: all
   bpf-map-dynamic-size-ratio: '0.0025'
   bpf-policy-map-max: '16384'
   bpf-lb-map-max: '65536'
   bpf-lb-external-clusterip: 'false'
+  bpf-lb-source-range-all-types: 'false'
+  bpf-lb-algorithm-annotation: 'false'
+  bpf-lb-mode-annotation: 'false'
+  bpf-distributed-lru: 'false'
   bpf-events-drop-enabled: 'true'
   bpf-events-policy-verdict-enabled: 'true'
   bpf-events-trace-enabled: 'true'
   preallocate-bpf-maps: 'false'
   cluster-name: default
   cluster-id: '0'
   routing-mode: tunnel
   tunnel-protocol: vxlan
+  tunnel-source-port-range: 0-0
   service-no-backend-response: reject
   enable-l7-proxy: 'true'
   enable-ipv4-masquerade: 'true'
   enable-ipv4-big-tcp: 'false'
   enable-ipv6-big-tcp: 'false'
   enable-ipv6-masquerade: 'true'
   enable-tcx: 'true'
   datapath-mode: veth
   enable-masquerade-to-route-source: 'false'
   enable-xt-socket-fallback: 'true'
   install-no-conntrack-iptables-rules: 'false'
+  iptables-random-fully: 'false'
   auto-direct-node-routes: 'false'
   direct-routing-skip-unreachable: 'false'
   enable-local-redirect-policy: 'false'
   enable-runtime-device-detection: 'true'
   kube-proxy-replacement: 'true'
   kube-proxy-replacement-healthz-bind-address: ''
@@ -56,23 +77,26 @@

   nodeport-addresses: ''
   enable-health-check-nodeport: 'true'
   enable-health-check-loadbalancer-ip: 'false'
   node-port-bind-protection: 'true'
   enable-auto-protect-node-port-range: 'true'
   bpf-lb-acceleration: disabled
+  enable-experimental-lb: 'false'
   enable-svc-source-range-check: 'true'
   enable-l2-neigh-discovery: 'true'
   arping-refresh-period: 30s
   k8s-require-ipv4-pod-cidr: 'false'
   k8s-require-ipv6-pod-cidr: 'false'
   enable-k8s-networkpolicy: 'true'
+  enable-endpoint-lockdown-on-policy-overflow: 'false'
   write-cni-conf-when-ready: /host/etc/cni/net.d/05-cilium.conflist
   cni-exclusive: 'true'
   cni-log-file: /var/run/cilium/cilium-cni.log
   enable-endpoint-health-checking: 'true'
   enable-health-checking: 'true'
+  health-check-icmp-failure-threshold: '3'
   enable-well-known-identities: 'false'
   enable-node-selector-labels: 'false'
   synchronize-k8s-nodes: 'true'
   operator-api-serve-addr: 127.0.0.1:9234
   enable-hubble: 'true'
   hubble-socket-path: /var/run/cilium/hubble.sock
@@ -82,34 +106,36 @@

   hubble-disable-tls: 'false'
   hubble-tls-cert-file: /var/lib/cilium/tls/hubble/server.crt
   hubble-tls-key-file: /var/lib/cilium/tls/hubble/server.key
   hubble-tls-client-ca-files: /var/lib/cilium/tls/hubble/client-ca.crt
   ipam: kubernetes
   ipam-cilium-node-update-rate: 15s
+  default-lb-service-ipam: lbipam
   egress-gateway-reconciliation-trigger-interval: 1s
   enable-vtep: 'false'
   vtep-endpoint: ''
   vtep-cidr: ''
   vtep-mask: ''
   vtep-mac: ''
+  enable-bgp-control-plane: 'true'
+  bgp-secrets-namespace: kube-system
+  enable-bgp-control-plane-status-report: 'true'
   procfs: /host/proc
   bpf-root: /sys/fs/bpf
   cgroup-root: /sys/fs/cgroup
   enable-k8s-terminating-endpoint: 'true'
   enable-sctp: 'false'
-  k8s-client-qps: '10'
-  k8s-client-burst: '20'
   remove-cilium-node-taints: 'true'
   set-cilium-node-taints: 'true'
   set-cilium-is-up-condition: 'true'
   unmanaged-pod-watcher-interval: '15'
   dnsproxy-enable-transparent-mode: 'true'
   dnsproxy-socket-linger-timeout: '10'
   tofqdns-dns-reject-response-code: refused
   tofqdns-enable-dns-compression: 'true'
-  tofqdns-endpoint-max-ip-per-hostname: '50'
+  tofqdns-endpoint-max-ip-per-hostname: '1000'
   tofqdns-idle-connection-grace-period: 0s
   tofqdns-max-deferred-connection-deletes: '10000'
   tofqdns-proxy-response-max-delay: 100ms
   agent-not-ready-taint-key: node.cilium.io/agent-not-ready
   mesh-auth-enabled: 'true'
   mesh-auth-queue-size: '1024'
@@ -119,15 +145,22 @@

   proxy-xff-num-trusted-hops-egress: '0'
   proxy-connect-timeout: '2'
   proxy-initial-fetch-timeout: '30'
   proxy-max-requests-per-connection: '0'
   proxy-max-connection-duration-seconds: '0'
   proxy-idle-timeout-seconds: '60'
+  proxy-max-concurrent-retries: '128'
+  http-retry-count: '3'
   external-envoy-proxy: 'true'
   envoy-base-id: '0'
+  envoy-access-log-buffer-size: '4096'
   envoy-keep-cap-netbindservice: 'false'
   max-connected-clusters: '255'
   clustermesh-enable-endpoint-sync: 'false'
   clustermesh-enable-mcs-api: 'false'
   nat-map-stats-entries: '32'
   nat-map-stats-interval: 30s
+  enable-internal-traffic-policy: 'true'
+  enable-lb-ipam: 'true'
+  enable-non-default-deny-policies: 'true'
+  enable-source-ip-verification: 'true'
 
--- HelmRelease: kube-system/cilium ConfigMap: kube-system/cilium-envoy-config

+++ HelmRelease: kube-system/cilium ConfigMap: kube-system/cilium-envoy-config

@@ -3,8 +3,8 @@

 kind: ConfigMap
 metadata:
   name: cilium-envoy-config
   namespace: kube-system
 data:
   bootstrap-config.json: |
-    {"admin":{"address":{"pipe":{"path":"/var/run/cilium/envoy/sockets/admin.sock"}}},"bootstrapExtensions":[{"name":"envoy.bootstrap.internal_listener","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.bootstrap.internal_listener.v3.InternalListener"}}],"dynamicResources":{"cdsConfig":{"apiConfigSource":{"apiType":"GRPC","grpcServices":[{"envoyGrpc":{"clusterName":"xds-grpc-cilium"}}],"setNodeOnFirstMessageOnly":true,"transportApiVersion":"V3"},"initialFetchTimeout":"30s","resourceApiVersion":"V3"},"ldsConfig":{"apiConfigSource":{"apiType":"GRPC","grpcServices":[{"envoyGrpc":{"clusterName":"xds-grpc-cilium"}}],"setNodeOnFirstMessageOnly":true,"transportApiVersion":"V3"},"initialFetchTimeout":"30s","resourceApiVersion":"V3"}},"node":{"cluster":"ingress-cluster","id":"host~127.0.0.1~no-id~localdomain"},"overloadManager":{"resourceMonitors":[{"name":"envoy.resource_monitors.global_downstream_max_connections","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig","max_active_downstream_connections":"50000"}}]},"staticResources":{"clusters":[{"cleanupInterval":"2.500s","connectTimeout":"2s","lbPolicy":"CLUSTER_PROVIDED","name":"ingress-cluster","type":"ORIGINAL_DST","typedExtensionProtocolOptions":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions","commonHttpProtocolOptions":{"idleTimeout":"60s","maxConnectionDuration":"0s","maxRequestsPerConnection":0},"useDownstreamProtocolConfig":{}}}},{"cleanupInterval":"2.500s","connectTimeout":"2s","lbPolicy":"CLUSTER_PROVIDED","name":"egress-cluster-tls","transportSocket":{"name":"cilium.tls_wrapper","typedConfig":{"@type":"type.googleapis.com/cilium.UpstreamTlsWrapperContext"}},"type":"ORIGINAL_DST","typedExtensionProtocolOptions":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions","commonHttpProtocolOptions":{"idleTimeout":"60s","maxConnectionDuration":"0s","maxRequestsPerConnection":0},"upstreamHttpProtocolOptions":{},"useDownstreamProtocolConfig":{}}}},{"cleanupInterval":"2.500s","connectTimeout":"2s","lbPolicy":"CLUSTER_PROVIDED","name":"egress-cluster","type":"ORIGINAL_DST","typedExtensionProtocolOptions":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions","commonHttpProtocolOptions":{"idleTimeout":"60s","maxConnectionDuration":"0s","maxRequestsPerConnection":0},"useDownstreamProtocolConfig":{}}}},{"cleanupInterval":"2.500s","connectTimeout":"2s","lbPolicy":"CLUSTER_PROVIDED","name":"ingress-cluster-tls","transportSocket":{"name":"cilium.tls_wrapper","typedConfig":{"@type":"type.googleapis.com/cilium.UpstreamTlsWrapperContext"}},"type":"ORIGINAL_DST","typedExtensionProtocolOptions":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions","commonHttpProtocolOptions":{"idleTimeout":"60s","maxConnectionDuration":"0s","maxRequestsPerConnection":0},"upstreamHttpProtocolOptions":{},"useDownstreamProtocolConfig":{}}}},{"connectTimeout":"2s","loadAssignment":{"clusterName":"xds-grpc-cilium","endpoints":[{"lbEndpoints":[{"endpoint":{"address":{"pipe":{"path":"/var/run/cilium/envoy/sockets/xds.sock"}}}}]}]},"name":"xds-grpc-cilium","type":"STATIC","typedExtensionProtocolOptions":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions","explicitHttpConfig":{"http2ProtocolOptions":{}}}}},{"connectTimeout":"2s","loadAssignment":{"clusterName":"/envoy-admin","endpoints":[{"lbEndpoints":[{"endpoint":{"address":{"pipe":{"path":"/var/run/cilium/envoy/sockets/admin.sock"}}}}]}]},"name":"/envoy-admin","type":"STATIC"}],"listeners":[{"address":{"socketAddress":{"address":"0.0.0.0","portValue":9964}},"filterChains":[{"filters":[{"name":"envoy.filters.network.http_connection_manager","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager","httpFilters":[{"name":"envoy.filters.http.router","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"}}],"internalAddressConfig":{"cidrRanges":[{"addressPrefix":"10.0.0.0","prefixLen":8},{"addressPrefix":"172.16.0.0","prefixLen":12},{"addressPrefix":"192.168.0.0","prefixLen":16},{"addressPrefix":"127.0.0.1","prefixLen":32}]},"routeConfig":{"virtualHosts":[{"domains":["*"],"name":"prometheus_metrics_route","routes":[{"match":{"prefix":"/metrics"},"name":"prometheus_metrics_route","route":{"cluster":"/envoy-admin","prefixRewrite":"/stats/prometheus"}}]}]},"statPrefix":"envoy-prometheus-metrics-listener","streamIdleTimeout":"0s"}}]}],"name":"envoy-prometheus-metrics-listener"},{"address":{"socketAddress":{"address":"127.0.0.1","portValue":9878}},"filterChains":[{"filters":[{"name":"envoy.filters.network.http_connection_manager","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager","httpFilters":[{"name":"envoy.filters.http.router","typedConfig":{"@type":"type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"}}],"internalAddressConfig":{"cidrRanges":[{"addressPrefix":"10.0.0.0","prefixLen":8},{"addressPrefix":"172.16.0.0","prefixLen":12},{"addressPrefix":"192.168.0.0","prefixLen":16},{"addressPrefix":"127.0.0.1","prefixLen":32}]},"routeConfig":{"virtual_hosts":[{"domains":["*"],"name":"health","routes":[{"match":{"prefix":"/healthz"},"name":"health","route":{"cluster":"/envoy-admin","prefixRewrite":"/ready"}}]}]},"statPrefix":"envoy-health-listener","streamIdleTimeout":"0s"}}]}],"name":"envoy-health-listener"}]}}
[Diff truncated by flux-local]
--- HelmRelease: kube-system/cilium ConfigMap: kube-system/hubble-relay-config

+++ HelmRelease: kube-system/cilium ConfigMap: kube-system/hubble-relay-config

@@ -3,12 +3,11 @@

 kind: ConfigMap
 metadata:
   name: hubble-relay-config
   namespace: kube-system
 data:
   config.yaml: "cluster-name: default\npeer-service: \"hubble-peer.kube-system.svc.cluster.local.:443\"\
-    \nlisten-address: :4245\ngops: true\ngops-port: \"9893\"\ndial-timeout: \nretry-timeout:\
-    \ \nsort-buffer-len-max: \nsort-buffer-drain-timeout: \ntls-hubble-client-cert-file:\
-    \ /var/lib/hubble-relay/tls/client.crt\ntls-hubble-client-key-file: /var/lib/hubble-relay/tls/client.key\n\
-    tls-hubble-server-ca-files: /var/lib/hubble-relay/tls/hubble-server-ca.crt\n\n\
-    disable-server-tls: true\n"
+    \nlisten-address: :4245\ngops: true\ngops-port: \"9893\"\nretry-timeout: \nsort-buffer-len-max:\
+    \ \nsort-buffer-drain-timeout: \ntls-hubble-client-cert-file: /var/lib/hubble-relay/tls/client.crt\n\
+    tls-hubble-client-key-file: /var/lib/hubble-relay/tls/client.key\ntls-hubble-server-ca-files:\
+    \ /var/lib/hubble-relay/tls/hubble-server-ca.crt\n\ndisable-server-tls: true\n"
 
--- HelmRelease: kube-system/cilium ClusterRole: kube-system/cilium-operator

+++ HelmRelease: kube-system/cilium ClusterRole: kube-system/cilium-operator

@@ -53,12 +53,13 @@

   - update
   - patch
 - apiGroups:
   - ''
   resources:
   - namespaces
+  - secrets
   verbs:
   - get
   - list
   - watch
 - apiGroups:
   - ''
@@ -66,12 +67,16 @@

   - services
   - endpoints
   verbs:
   - get
   - list
   - watch
+  - create
+  - update
+  - delete
+  - patch
 - apiGroups:
   - cilium.io
   resources:
   - ciliumnetworkpolicies
   - ciliumclusterwidenetworkpolicies
   verbs:
@@ -135,12 +140,19 @@

   - update
   - get
   - list
   - watch
   - delete
   - patch
+- apiGroups:
+  - cilium.io
+  resources:
+  - ciliumbgpclusterconfigs/status
+  - ciliumbgppeerconfigs/status
+  verbs:
+  - update
 - apiGroups:
   - apiextensions.k8s.io
   resources:
   - customresourcedefinitions
   verbs:
   - create
@@ -181,12 +193,13 @@

   resources:
   - ciliumloadbalancerippools
   - ciliumpodippools
   - ciliumbgppeeringpolicies
   - ciliumbgpclusterconfigs
   - ciliumbgpnodeconfigoverrides
+  - ciliumbgppeerconfigs
   verbs:
   - get
   - list
   - watch
 - apiGroups:
   - cilium.io
@@ -205,7 +218,40 @@

   resources:
   - leases
   verbs:
   - create
   - get
   - update
+- apiGroups:
+  - gateway.networking.k8s.io
+  resources:
+  - gatewayclasses
+  - gateways
+  - tlsroutes
+  - httproutes
+  - grpcroutes
+  - referencegrants
+  - referencepolicies
+  verbs:
+  - get
+  - list
+  - watch
+- apiGroups:
+  - gateway.networking.k8s.io
+  resources:
+  - gatewayclasses/status
+  - gateways/status
+  - httproutes/status
+  - grpcroutes/status
+  - tlsroutes/status
+  verbs:
+  - update
+  - patch
+- apiGroups:
+  - multicluster.x-k8s.io
+  resources:
+  - serviceimports
+  verbs:
+  - get
+  - list
+  - watch
 
--- HelmRelease: kube-system/cilium DaemonSet: kube-system/cilium

+++ HelmRelease: kube-system/cilium DaemonSet: kube-system/cilium

@@ -25,15 +25,17 @@

         app.kubernetes.io/name: cilium-agent
         app.kubernetes.io/part-of: cilium
     spec:
       securityContext:
         appArmorProfile:
           type: Unconfined
+        seccompProfile:
+          type: Unconfined
       containers:
       - name: cilium-agent
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         command:
         - cilium-agent
         args:
         - --config-dir=/tmp/cilium/config-map
         startupProbe:
@@ -55,12 +57,14 @@

             path: /healthz
             port: 9879
             scheme: HTTP
             httpHeaders:
             - name: brief
               value: 'true'
+            - name: require-k8s-connectivity
+              value: 'false'
           periodSeconds: 30
           successThreshold: 1
           failureThreshold: 10
           timeoutSeconds: 5
         readinessProbe:
           httpGet:
@@ -179,13 +183,13 @@

           mountPath: /var/lib/cilium/tls/hubble
           readOnly: true
         - name: tmp
           mountPath: /tmp
       initContainers:
       - name: config
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         command:
         - cilium-dbg
         - build-config
         env:
         - name: K8S_NODE_NAME
@@ -204,13 +208,13 @@

           value: '7445'
         volumeMounts:
         - name: tmp
           mountPath: /tmp
         terminationMessagePolicy: FallbackToLogsOnError
       - name: apply-sysctl-overwrites
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         env:
         - name: BIN_PATH
           value: /opt/cni/bin
         command:
         - sh
@@ -234,13 +238,13 @@

             - SYS_ADMIN
             - SYS_CHROOT
             - SYS_PTRACE
             drop:
             - ALL
       - name: mount-bpf-fs
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         args:
         - mount | grep "/sys/fs/bpf type bpf" || mount -t bpf bpf /sys/fs/bpf
         command:
         - /bin/bash
         - -c
@@ -250,13 +254,13 @@

           privileged: true
         volumeMounts:
         - name: bpf-maps
           mountPath: /sys/fs/bpf
           mountPropagation: Bidirectional
       - name: clean-cilium-state
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         command:
         - /init-container.sh
         env:
         - name: CILIUM_ALL_STATE
           valueFrom:
@@ -298,13 +302,13 @@

         - name: cilium-cgroup
           mountPath: /sys/fs/cgroup
           mountPropagation: HostToContainer
         - name: cilium-run
           mountPath: /var/run/cilium
       - name: install-cni-binaries
-        image: quay.io/cilium/cilium:v1.16.6@sha256:1e0896b1c4c188b4812c7e0bed7ec3f5631388ca88325c1391a0ef9172c448da
+        image: quay.io/cilium/cilium:v1.17.10@sha256:d93cda710570df64dcb849807bd163013903143d74d5a4ebf16e1a659146c0d3
         imagePullPolicy: IfNotPresent
         command:
         - /install-plugin.sh
         resources:
           requests:
             cpu: 100m
--- HelmRelease: kube-system/cilium DaemonSet: kube-system/cilium-envoy

+++ HelmRelease: kube-system/cilium DaemonSet: kube-system/cilium-envoy

@@ -28,22 +28,21 @@

     spec:
       securityContext:
         appArmorProfile:
           type: Unconfined
       containers:
       - name: cilium-envoy
-        image: quay.io/cilium/cilium-envoy:v1.30.9-1737073743-40a016d11c0d863b772961ed0168eea6fe6b10a5@sha256:a69dfe0e54b24b0ff747385c8feeae0612cfbcae97bfcc8ee42a773bb3f69c88
+        image: quay.io/cilium/cilium-envoy:v1.34.10-1760767433-887ebe7d6ccc2a9dc8c73f6ae4927283283b507e@sha256:78a7c6ceb4135680eb94ed1ca80b1be00647878e6694522f8380cc2a8b99e434
         imagePullPolicy: IfNotPresent
         command:
         - /usr/bin/cilium-envoy-starter
         args:
         - --
         - -c /var/run/cilium/envoy/bootstrap-config.json
         - --base-id 0
         - --log-level info
-        - --log-format [%Y-%m-%d %T.%e][%t][%l][%n] [%g:%#] %v
         startupProbe:
           httpGet:
             host: 127.0.0.1
             path: /healthz
             port: 9878
             scheme: HTTP
--- HelmRelease: kube-system/cilium Deployment: kube-system/cilium-operator

+++ HelmRelease: kube-system/cilium Deployment: kube-system/cilium-operator

@@ -30,13 +30,13 @@

         name: cilium-operator
         app.kubernetes.io/part-of: cilium
         app.kubernetes.io/name: cilium-operator
     spec:
       containers:
       - name: cilium-operator
-        image: quay.io/cilium/operator-generic:v1.16.6@sha256:13d32071d5a52c069fb7c35959a56009c6914439adc73e99e098917646d154fc
+        image: quay.io/cilium/operator-generic:v1.17.10@sha256:09cee355c86b8c50d43ecc8f63cedc5d4a8597aa41be72a63ca4479c31c2f2be
         imagePullPolicy: IfNotPresent
         command:
         - cilium-operator-generic
         args:
         - --config-dir=/tmp/cilium/config-map
         - --debug=$(CILIUM_DEBUG)
--- HelmRelease: kube-system/cilium Deployment: kube-system/hubble-relay

+++ HelmRelease: kube-system/cilium Deployment: kube-system/hubble-relay

@@ -33,13 +33,13 @@

           capabilities:
             drop:
             - ALL
           runAsGroup: 65532
           runAsNonRoot: true
           runAsUser: 65532
-        image: quay.io/cilium/hubble-relay:v1.16.6@sha256:ca8dcaa5a81a37743b1397ba2221d16d5d63e4a47607584f1bf50a3b0882bf3b
+        image: quay.io/cilium/hubble-relay:v1.17.10@sha256:da6747dd2bccc2901693b49ed4a687723f8d5c1e37d40fb95ea04910d31eaab2
         imagePullPolicy: IfNotPresent
         command:
         - hubble-relay
         args:
         - serve
         ports:
--- HelmRelease: kube-system/cilium Deployment: kube-system/hubble-ui

+++ HelmRelease: kube-system/cilium Deployment: kube-system/hubble-ui

@@ -31,13 +31,13 @@

         runAsUser: 1001
       priorityClassName: null
       serviceAccountName: hubble-ui
       automountServiceAccountToken: true
       containers:
       - name: frontend
-        image: quay.io/cilium/hubble-ui:v0.13.1@sha256:e2e9313eb7caf64b0061d9da0efbdad59c6c461f6ca1752768942bfeda0796c6
+        image: quay.io/cilium/hubble-ui:v0.13.3@sha256:661d5de7050182d495c6497ff0b007a7a1e379648e60830dd68c4d78ae21761d
         imagePullPolicy: IfNotPresent
         ports:
         - name: http
           containerPort: 8081
         livenessProbe:
           httpGet:
@@ -52,13 +52,13 @@

           mountPath: /etc/nginx/conf.d/default.conf
           subPath: nginx.conf
         - name: tmp-dir
           mountPath: /tmp
         terminationMessagePolicy: FallbackToLogsOnError
       - name: backend
-        image: quay.io/cilium/hubble-ui-backend:v0.13.1@sha256:0e0eed917653441fded4e7cdb096b7be6a3bddded5a2dd10812a27b1fc6ed95b
+        image: quay.io/cilium/hubble-ui-backend:v0.13.3@sha256:db1454e45dc39ca41fbf7cad31eec95d99e5b9949c39daaad0fa81ef29d56953
         imagePullPolicy: IfNotPresent
         env:
         - name: EVENTS_SERVER_PORT
           value: '8090'
         - name: FLOWS_API_ADDR
           value: hubble-relay:80
--- HelmRelease: kube-system/cilium Namespace: kube-system/cilium-secrets

+++ HelmRelease: kube-system/cilium Namespace: kube-system/cilium-secrets

@@ -0,0 +1,8 @@

+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+
--- HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-gateway-secrets

+++ HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-gateway-secrets

@@ -0,0 +1,18 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: cilium-gateway-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+rules:
+- apiGroups:
+  - ''
+  resources:
+  - secrets
+  verbs:
+  - get
+  - list
+  - watch
+
--- HelmRelease: kube-system/cilium Role: kube-system/cilium-bgp-control-plane-secrets

+++ HelmRelease: kube-system/cilium Role: kube-system/cilium-bgp-control-plane-secrets

@@ -0,0 +1,18 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: cilium-bgp-control-plane-secrets
+  namespace: kube-system
+  labels:
+    app.kubernetes.io/part-of: cilium
+rules:
+- apiGroups:
+  - ''
+  resources:
+  - secrets
+  verbs:
+  - get
+  - list
+  - watch
+
--- HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-tlsinterception-secrets

+++ HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-tlsinterception-secrets

@@ -0,0 +1,18 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: cilium-tlsinterception-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+rules:
+- apiGroups:
+  - ''
+  resources:
+  - secrets
+  verbs:
+  - get
+  - list
+  - watch
+
--- HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-operator-gateway-secrets

+++ HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-operator-gateway-secrets

@@ -0,0 +1,19 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: cilium-operator-gateway-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+rules:
+- apiGroups:
+  - ''
+  resources:
+  - secrets
+  verbs:
+  - create
+  - delete
+  - update
+  - patch
+
--- HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-operator-tlsinterception-secrets

+++ HelmRelease: kube-system/cilium Role: cilium-secrets/cilium-operator-tlsinterception-secrets

@@ -0,0 +1,19 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: cilium-operator-tlsinterception-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+rules:
+- apiGroups:
+  - ''
+  resources:
+  - secrets
+  verbs:
+  - create
+  - delete
+  - update
+  - patch
+
--- HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-gateway-secrets

+++ HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-gateway-secrets

@@ -0,0 +1,17 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: cilium-gateway-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: cilium-gateway-secrets
+subjects:
+- kind: ServiceAccount
+  name: cilium
+  namespace: kube-system
+
--- HelmRelease: kube-system/cilium RoleBinding: kube-system/cilium-bgp-control-plane-secrets

+++ HelmRelease: kube-system/cilium RoleBinding: kube-system/cilium-bgp-control-plane-secrets

@@ -0,0 +1,17 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: cilium-bgp-control-plane-secrets
+  namespace: kube-system
+  labels:
+    app.kubernetes.io/part-of: cilium
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: cilium-bgp-control-plane-secrets
+subjects:
+- kind: ServiceAccount
+  name: cilium
+  namespace: kube-system
+
--- HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-tlsinterception-secrets

+++ HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-tlsinterception-secrets

@@ -0,0 +1,17 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: cilium-tlsinterception-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: cilium-tlsinterception-secrets
+subjects:
+- kind: ServiceAccount
+  name: cilium
+  namespace: kube-system
+
--- HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-operator-gateway-secrets

+++ HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-operator-gateway-secrets

@@ -0,0 +1,17 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: cilium-operator-gateway-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: cilium-operator-gateway-secrets
+subjects:
+- kind: ServiceAccount
+  name: cilium-operator
+  namespace: kube-system
+
--- HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-operator-tlsinterception-secrets

+++ HelmRelease: kube-system/cilium RoleBinding: cilium-secrets/cilium-operator-tlsinterception-secrets

@@ -0,0 +1,17 @@

+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: cilium-operator-tlsinterception-secrets
+  namespace: cilium-secrets
+  labels:
+    app.kubernetes.io/part-of: cilium
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: cilium-operator-tlsinterception-secrets
+subjects:
+- kind: ServiceAccount
+  name: cilium-operator
+  namespace: kube-system
+
--- HelmRelease: metallb-system/metallb ServiceAccount: metallb-system/metallb-controller

+++ HelmRelease: metallb-system/metallb ServiceAccount: metallb-system/metallb-controller

@@ -1,12 +0,0 @@

----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: metallb-controller
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/component: controller
-
--- HelmRelease: metallb-system/metallb ServiceAccount: metallb-system/metallb-speaker

+++ HelmRelease: metallb-system/metallb ServiceAccount: metallb-system/metallb-speaker

@@ -1,12 +0,0 @@

----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: metallb-speaker
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/component: speaker
-
--- HelmRelease: metallb-system/metallb ConfigMap: metallb-system/metallb-excludel2

+++ HelmRelease: metallb-system/metallb ConfigMap: metallb-system/metallb-excludel2

@@ -1,27 +0,0 @@

----
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: metallb-excludel2
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-data:
-  excludel2.yaml: |
-    announcedInterfacesToExclude:
-    - ^docker.*
-    - ^cbr.*
-    - ^dummy.*
-    - ^virbr.*
-    - ^lxcbr.*
-    - ^veth.*
-    - ^lo$
-    - ^cali.*
-    - ^tunl.*
-    - ^flannel.*
-    - ^kube-ipvs.*
-    - ^cni.*
-    - ^nodelocaldns.*
-
--- HelmRelease: metallb-system/metallb ClusterRole: metallb-system/metallb:controller

+++ HelmRelease: metallb-system/metallb ClusterRole: metallb-system/metallb:controller

@@ -1,86 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: metallb:controller
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-rules:
-- apiGroups:
-  - ''
-  resources:
-  - services
-  - namespaces
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ''
-  resources:
-  - nodes
-  verbs:
-  - list
-- apiGroups:
-  - ''
-  resources:
-  - services/status
-  verbs:
-  - update
-- apiGroups:
-  - ''
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
-- apiGroups:
-  - admissionregistration.k8s.io
-  resources:
-  - validatingwebhookconfigurations
-  resourceNames:
-  - metallb-webhook-configuration
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - admissionregistration.k8s.io
-  resources:
-  - validatingwebhookconfigurations
-  verbs:
-  - list
-  - watch
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  resourceNames:
-  - bfdprofiles.metallb.io
-  - bgpadvertisements.metallb.io
-  - bgppeers.metallb.io
-  - ipaddresspools.metallb.io
-  - l2advertisements.metallb.io
-  - communities.metallb.io
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  verbs:
-  - list
-  - watch
-
--- HelmRelease: metallb-system/metallb ClusterRole: metallb-system/metallb:speaker

+++ HelmRelease: metallb-system/metallb ClusterRole: metallb-system/metallb:speaker

@@ -1,44 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: metallb:speaker
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-rules:
-- apiGroups:
-  - ''
-  resources:
-  - services
-  - endpoints
-  - nodes
-  - namespaces
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - discovery.k8s.io
-  resources:
-  - endpointslices
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ''
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
-- apiGroups:
-  - metallb.io
-  resources:
-  - servicel2statuses
-  - servicel2statuses/status
-  verbs:
-  - '*'
-
--- HelmRelease: metallb-system/metallb ClusterRoleBinding: metallb-system/metallb:controller

+++ HelmRelease: metallb-system/metallb ClusterRoleBinding: metallb-system/metallb:controller

@@ -1,18 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: metallb:controller
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-subjects:
-- kind: ServiceAccount
-  name: metallb-controller
-  namespace: metallb-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: metallb:controller
-
--- HelmRelease: metallb-system/metallb ClusterRoleBinding: metallb-system/metallb:speaker

+++ HelmRelease: metallb-system/metallb ClusterRoleBinding: metallb-system/metallb:speaker

@@ -1,18 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: metallb:speaker
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-subjects:
-- kind: ServiceAccount
-  name: metallb-speaker
-  namespace: metallb-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: metallb:speaker
-
--- HelmRelease: metallb-system/metallb Role: metallb-system/metallb-pod-lister

+++ HelmRelease: metallb-system/metallb Role: metallb-system/metallb-pod-lister

@@ -1,83 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  name: metallb-pod-lister
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-rules:
-- apiGroups:
-  - ''
-  resources:
-  - pods
-  verbs:
-  - list
-  - get
-- apiGroups:
-  - ''
-  resources:
-  - secrets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ''
-  resources:
-  - configmaps
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - bfdprofiles
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - bgppeers
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - l2advertisements
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - bgpadvertisements
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - ipaddresspools
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - communities
-  verbs:
-  - get
-  - list
-  - watch
-
--- HelmRelease: metallb-system/metallb Role: metallb-system/metallb-controller

+++ HelmRelease: metallb-system/metallb Role: metallb-system/metallb-controller

@@ -1,94 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  name: metallb-controller
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-rules:
-- apiGroups:
-  - ''
-  resources:
-  - secrets
-  verbs:
-  - create
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ''
-  resources:
-  - secrets
-  resourceNames:
-  - metallb-memberlist
-  verbs:
-  - list
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  resourceNames:
-  - metallb-controller
-  verbs:
-  - get
-- apiGroups:
-  - ''
-  resources:
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - ipaddresspools
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - bgppeers
-  verbs:
-  - get
-  - list
-- apiGroups:
-  - metallb.io
-  resources:
-  - bgpadvertisements
-  verbs:
-  - get
-  - list
-- apiGroups:
-  - metallb.io
-  resources:
-  - l2advertisements
-  verbs:
-  - get
-  - list
-- apiGroups:
-  - metallb.io
-  resources:
-  - communities
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - metallb.io
-  resources:
-  - bfdprofiles
-  verbs:
-  - get
-  - list
-  - watch
-
--- HelmRelease: metallb-system/metallb RoleBinding: metallb-system/metallb-pod-lister

+++ HelmRelease: metallb-system/metallb RoleBinding: metallb-system/metallb-pod-lister

@@ -1,18 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  name: metallb-pod-lister
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: metallb-pod-lister
-subjects:
-- kind: ServiceAccount
-  name: metallb-speaker
-
--- HelmRelease: metallb-system/metallb RoleBinding: metallb-system/metallb-controller

+++ HelmRelease: metallb-system/metallb RoleBinding: metallb-system/metallb-controller

@@ -1,18 +0,0 @@

----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  name: metallb-controller
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: metallb-controller
-subjects:
-- kind: ServiceAccount
-  name: metallb-controller
-
--- HelmRelease: metallb-system/metallb Service: metallb-system/metallb-webhook-service

+++ HelmRelease: metallb-system/metallb Service: metallb-system/metallb-webhook-service

@@ -1,19 +0,0 @@

----
-apiVersion: v1
-kind: Service
-metadata:
-  name: metallb-webhook-service
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-spec:
-  ports:
-  - port: 443
-    targetPort: 9443
-  selector:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/component: controller
-
--- HelmRelease: metallb-system/metallb DaemonSet: metallb-system/metallb-speaker

+++ HelmRelease: metallb-system/metallb DaemonSet: metallb-system/metallb-speaker

@@ -1,117 +0,0 @@

----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
-  name: metallb-speaker
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/component: speaker
-spec:
-  updateStrategy:
-    type: RollingUpdate
-  selector:
-    matchLabels:
-      app.kubernetes.io/name: metallb
-      app.kubernetes.io/instance: metallb
-      app.kubernetes.io/component: speaker
-  template:
-    metadata:
-      labels:
-        app.kubernetes.io/name: metallb
-        app.kubernetes.io/instance: metallb
-        app.kubernetes.io/component: speaker
-    spec:
-      serviceAccountName: metallb-speaker
-      terminationGracePeriodSeconds: 0
-      hostNetwork: true
-      volumes:
-      - name: memberlist
-        secret:
-          secretName: metallb-memberlist
-          defaultMode: 420
-      - name: metallb-excludel2
-        configMap:
-          defaultMode: 256
-          name: metallb-excludel2
-      containers:
-      - name: speaker
-        image: quay.io/metallb/speaker:v0.14.9
-        args:
-        - --port=7472
-        - --log-level=info
-        env:
-        - name: METALLB_NODE_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: spec.nodeName
-        - name: METALLB_HOST
-          valueFrom:
-            fieldRef:
-              fieldPath: status.hostIP
-        - name: METALLB_ML_BIND_ADDR
-          valueFrom:
-            fieldRef:
-              fieldPath: status.podIP
-        - name: METALLB_ML_LABELS
-          value: app.kubernetes.io/name=metallb,app.kubernetes.io/component=speaker
-        - name: METALLB_ML_BIND_PORT
-          value: '7946'
-        - name: METALLB_ML_SECRET_KEY_PATH
-          value: /etc/ml_secret_key
-        - name: METALLB_POD_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.name
-        ports:
-        - name: monitoring
-          containerPort: 7472
-        - name: memberlist-tcp
-          containerPort: 7946
-          protocol: TCP
-        - name: memberlist-udp
-          containerPort: 7946
-          protocol: UDP
-        livenessProbe:
-          httpGet:
-            path: /metrics
-            port: monitoring
-          initialDelaySeconds: 10
-          periodSeconds: 10
-          timeoutSeconds: 1
-          successThreshold: 1
-          failureThreshold: 3
-        readinessProbe:
-          httpGet:
-            path: /metrics
-            port: monitoring
-          initialDelaySeconds: 10
-          periodSeconds: 10
-          timeoutSeconds: 1
-          successThreshold: 1
-          failureThreshold: 3
-        securityContext:
-          allowPrivilegeEscalation: false
-          readOnlyRootFilesystem: true
-          capabilities:
-            drop:
-            - ALL
-            add:
-            - NET_RAW
-        volumeMounts:
-        - name: memberlist
-          mountPath: /etc/ml_secret_key
-        - name: metallb-excludel2
-          mountPath: /etc/metallb
-      nodeSelector:
-        kubernetes.io/os: linux
-      tolerations:
-      - key: node-role.kubernetes.io/master
-        effect: NoSchedule
-        operator: Exists
-      - key: node-role.kubernetes.io/control-plane
-        effect: NoSchedule
-        operator: Exists
-
--- HelmRelease: metallb-system/metallb Deployment: metallb-system/metallb-controller

+++ HelmRelease: metallb-system/metallb Deployment: metallb-system/metallb-controller

@@ -1,86 +0,0 @@

----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: metallb-controller
-  namespace: metallb-system
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/component: controller
-spec:
-  strategy:
-    type: RollingUpdate
-  selector:
-    matchLabels:
-      app.kubernetes.io/name: metallb
-      app.kubernetes.io/instance: metallb
-      app.kubernetes.io/component: controller
-  template:
-    metadata:
-      labels:
-        app.kubernetes.io/name: metallb
-        app.kubernetes.io/instance: metallb
-        app.kubernetes.io/component: controller
-    spec:
-      serviceAccountName: metallb-controller
-      terminationGracePeriodSeconds: 0
-      securityContext:
-        fsGroup: 65534
-        runAsNonRoot: true
-        runAsUser: 65534
-      containers:
-      - name: controller
-        image: quay.io/metallb/controller:v0.14.9
-        args:
-        - --port=7472
-        - --log-level=info
-        - --tls-min-version=VersionTLS12
-        env:
-        - name: METALLB_ML_SECRET_NAME
-          value: metallb-memberlist
-        - name: METALLB_DEPLOYMENT
-          value: metallb-controller
-        ports:
-        - name: monitoring
-          containerPort: 7472
-        - containerPort: 9443
-          name: webhook-server
-          protocol: TCP
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-        livenessProbe:
-          httpGet:
-            path: /metrics
-            port: monitoring
-          initialDelaySeconds: 10
-          periodSeconds: 10
-          timeoutSeconds: 1
-          successThreshold: 1
-          failureThreshold: 3
-        readinessProbe:
-          httpGet:
-            path: /metrics
-            port: monitoring
-          initialDelaySeconds: 10
-          periodSeconds: 10
-          timeoutSeconds: 1
-          successThreshold: 1
-          failureThreshold: 3
-        securityContext:
-          allowPrivilegeEscalation: false
-          readOnlyRootFilesystem: true
-          capabilities:
-            drop:
-            - ALL
-      nodeSelector:
-        kubernetes.io/os: linux
-      volumes:
-      - name: cert
-        secret:
-          defaultMode: 420
-          secretName: metallb-webhook-cert
-
--- HelmRelease: metallb-system/metallb ValidatingWebhookConfiguration: metallb-system/metallb-webhook-configuration

+++ HelmRelease: metallb-system/metallb ValidatingWebhookConfiguration: metallb-system/metallb-webhook-configuration

@@ -1,131 +0,0 @@

----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  name: metallb-webhook-configuration
-  labels:
-    app.kubernetes.io/name: metallb
-    app.kubernetes.io/instance: metallb
-    app.kubernetes.io/managed-by: Helm
-webhooks:
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta2-bgppeer
-  failurePolicy: Fail
-  name: bgppeervalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta2
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - bgppeers
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta1-ipaddresspool
-  failurePolicy: Fail
-  name: ipaddresspoolvalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - ipaddresspools
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta1-bgpadvertisement
-  failurePolicy: Fail
-  name: bgpadvertisementvalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - bgpadvertisements
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta1-community
-  failurePolicy: Fail
-  name: communityvalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - communities
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta1-bfdprofile
-  failurePolicy: Fail
-  name: bfdprofilevalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - DELETE
-    resources:
-    - bfdprofiles
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  clientConfig:
-    service:
-      name: metallb-webhook-service
-      namespace: metallb-system
-      path: /validate-metallb-io-v1beta1-l2advertisement
-  failurePolicy: Fail
-  name: l2advertisementvalidationwebhook.metallb.io
-  rules:
-  - apiGroups:
-    - metallb.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - l2advertisements
-  sideEffects: None
-
--- HelmRelease: ingress-nginx/ingress-nginx Service: ingress-nginx/ingress-nginx-controller

+++ HelmRelease: ingress-nginx/ingress-nginx Service: ingress-nginx/ingress-nginx-controller

@@ -10,13 +10,13 @@

     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
   namespace: ingress-nginx
 spec:
   type: LoadBalancer
   externalIPs:
-  - 192.168.253.100
+  - 192.168.33.2
   externalTrafficPolicy: Local
   ipFamilyPolicy: SingleStack
   ipFamilies:
   - IPv4
   ports:
   - name: http
--- HelmRelease: argo-system/argo-workflows Ingress: argo-system/argo-workflows-server

+++ HelmRelease: argo-system/argo-workflows Ingress: argo-system/argo-workflows-server

@@ -1,27 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: argo-workflows-server
-  namespace: argo-system
-  labels:
-    app.kubernetes.io/name: argo-workflows-server
-    app.kubernetes.io/instance: argo-workflows
-    app.kubernetes.io/component: server
-    app: server
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/part-of: argo-workflows
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: workflows.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: argo-workflows-server
-            port:
-              number: 2746
-
--- HelmRelease: grafana/grafana ConfigMap: grafana/grafana

+++ HelmRelease: grafana/grafana ConfigMap: grafana/grafana

@@ -50,13 +50,13 @@

     [paths]
     data = /var/lib/grafana/
     logs = /var/log/grafana
     plugins = /var/lib/grafana/plugins
     provisioning = /etc/grafana/provisioning
     [server]
-    domain = grafana.timtor.dev
+    domain = ''
     root_url = https://grafana.timtor.dev
     [unified_alerting]
     enabled = true
     ha_advertise_address = ${POD_IP}:9094
     ha_listen_address = ${POD_IP}:9094
     ha_peer_timeout = 15s
--- HelmRelease: grafana/grafana Ingress: grafana/grafana

+++ HelmRelease: grafana/grafana Ingress: grafana/grafana

@@ -1,23 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: grafana
-  namespace: grafana
-  labels:
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: grafana.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: grafana
-            port:
-              number: 80
-
--- HelmRelease: mydata/nextcloud Ingress: mydata/nextcloud

+++ HelmRelease: mydata/nextcloud Ingress: mydata/nextcloud

@@ -1,26 +0,0 @@

----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: nextcloud
-  labels:
-    app.kubernetes.io/instance: nextcloud
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: nextcloud
-  annotations:
-    nginx.ingress.kubernetes.io/proxy-body-size: '0'
-  namespace: mydata
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: drive.timtor.dev
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: nextcloud
-            port:
-              number: 8080
-
--- HelmRelease: mydata/nextcloud HTTPRoute: mydata/nextcloud-http-redirect

+++ HelmRelease: mydata/nextcloud HTTPRoute: mydata/nextcloud-http-redirect

@@ -0,0 +1,31 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: nextcloud-http-redirect
+  labels:
+    app.kubernetes.io/instance: nextcloud
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: nextcloud
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: http
+  hostnames:
+  - drive.timtor.dev
+  rules:
+  - backendRefs: null
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+    filters:
+    - requestRedirect:
+        scheme: https
+        statusCode: 301
+      type: RequestRedirect
+
--- HelmRelease: mydata/nextcloud HTTPRoute: mydata/nextcloud-main

+++ HelmRelease: mydata/nextcloud HTTPRoute: mydata/nextcloud-main

@@ -0,0 +1,32 @@

+---
+apiVersion: gateway.networking.k8s.io/v1alpha2
+kind: HTTPRoute
+metadata:
+  name: nextcloud-main
+  labels:
+    app.kubernetes.io/instance: nextcloud
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: nextcloud
+  namespace: mydata
+spec:
+  parentRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: cilium-default
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - drive.timtor.dev
+  rules:
+  - backendRefs:
+    - group: ''
+      kind: Service
+      name: nextcloud
+      namespace: mydata
+      port: 8080
+      weight: 1
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+

github-actions[bot] avatar Nov 30 '25 12:11 github-actions[bot]