Hi Lorenzo,

Thanks for driving this FIP — adding TLS/mTLS support is an important step
for running Fluss in shared, cloud, and multi-tenant environments, so big
+1 from me on the direction.

I'd also like to echo the two points Giannis raised, as I think they're
worth addressing explicitly in the proposal:

   1.

   *Zero-copy trade-off.* Since Netty's SslHandler can't encrypt a
   FileRegion, enabling TLS effectively means losing the zero-copy path. It
   would be great to call this out explicitly in the FIP so users understand
   the performance trade-off when turning TLS on, and to clarify whether it
   applies only to TLS-enabled listeners (so plaintext internal paths can keep
   zero-copy).
   2.

   *Credential lifetime.* Like Giannis, I'd find it helpful to know whether
   the design assumes short-lived credentials, or whether certificate rotation
   / revocation (CRL/OCSP) is left to the operator's PKI.

Overall this looks solid to me. Thanks again for the work!

Best, ForwardXu

Anton Borisov <[email protected]> 于2026年6月26日周五 18:57写道:

> Hi Lorenzo,
>
> Thank you for the clarifications, this makes sense to me.
>
> -- Anton
>
> ср, 24 июн. 2026 г. в 16:16, Lorenzo Affetti via dev <[email protected]
> >:
>
> >
> > Hi Giannis, Anton,
> >
> > Thanks for the detailed reviews. I've updated the FIP to address all
> > points raised. You can find the summary of changes below and a diff
> attached for your convenience.
> >
> > ---
> >
> > Zero-copy (Giannis Q1, Anton)
> >
> > This was a big oversight on my part; I apologize.
> > Thanks for unveiling this.
> >
> > You are both correct. TLS and sendfile are mutually exclusive: SslHandler
> > requires bytes in JVM-managed memory before encryption, which is
> > incompatible with FileChannel.transferTo(). On TLS-enabled listeners, log
> > fetch responses are copied into a buffer in the JVM before encryption.
> > Plaintext listeners are unaffected. This is the same trade-off Apache
> Kafka
> > makes with SSL.
> >
> > I've added a "Performance trade-off: zero-copy" subsection to the FIP
> that
> > calls this out explicitly, so operators can account for it in capacity
> > planning. kTLS is now explicitly listed as Out of Scope rather than left
> > implied.
> >
> > ---
> >
> > Short-lived credentials (Giannis Q2)
> >
> > The design does not assume short-lived credentials. Hot-reload is
> entirely
> > opt-in: setting security.ssl.reload.interval=0 disables polling, and the
> > system works correctly with static long-lived certificates. Rotation in
> that
> > model is handled with an explicit rolling restart, exactly as any other
> > config change today. The 5-minute default targets cloud-native
> deployments;
> > if files never change, reload is a no-op.
> >
> > I've added an explicit note on static/long-lived certs to the hot-reload
> > section.
> >
> > ---
> >
> > Non-goals (Anton)
> >
> > Added a dedicated Non-Goals section covering ZooKeeper connection
> security,
> > remote storage encryption, and data at rest. The FIP now states
> explicitly
> > that enabling RPC TLS does not imply end-to-end cluster encryption.
> >
> > ---
> >
> > Configuration validation (Anton)
> >
> > Expanded to a fail-fast startup validation table covering the cases you
> > listed.
> >
> > ---
> >
> > Metrics (Anton)
> >
> > The two metrics you flagged are promoted to v1:
> >
> >   - tls.handshake.failures (counter, per listener): matches
> >     Kafka's failed-authentication-total. Handshake failures are below
> >     the normal RPC error path; logs-only is effectively invisible in
> >     production.
> >
> >   - tls.certificate.days.to.expiry (gauge, per listener): fills the
> >     gap Kafka has never closed, enabling expiry alerting before it
> >     becomes a handshake failure.
> >
> > On the reactive self-healer: I agree the interval-only model is
> > simpler and closer to what Kafka ships. However, the reactive trigger
> > provides a concrete safety guarantee that the interval-only model
> > cannot: a certificate renewed just after a poll is adopted on the
> > next connection attempt rather than after up to reload.interval. For
> > short-lived certs (e.g., 1-hour SPIFFE SVIDs) with a 5-minute poll
> > interval, that window matters. The reactive logic is also isolated and
> > safe by construction: rate-limited, never swaps in a broken context,
> > and does not retry the triggering connection. I'd like to keep it in
> > v1. Happy to discuss further on the list if you feel strongly about
> > deferring it.
> >
> > ---
> >
> > SslPrincipalMapper (Anton)
> >
> > Added explicit fail-fast behaviour: unsupported rule grammar causes the
> > server to refuse to start, not fail at authentication time. This is the
> > right place — the rules are static config, validation is cheap (regex
> > compile), and startup failure is far more diagnosable than a per-
> > connection authorization failure that looks like an ACL misconfiguration.
> > The validation table in the FIP now has an eighth row for this.
> >
> > ---
> >
> > Let me know if
> > anything needs further discussion.
> >
> > Best,
> > Lorenzo
> >
> > On Fri, Jun 19, 2026 at 6:58 AM Giannis Polyzos <[email protected]>
> wrote:
> >>
> >> Hi Lorenzo,
> >> thank you for the really nice and detailed FIP.
> >>
> >> May I suggest attaching the link to the proposal?
> >>
> https://cwiki.apache.org/confluence/display/FLUSS/FIP-29%3A+%28m%29TLS+Support
> >>
> >> Overall the proposal looks great and looks solid to me.
> >> Two questions I have just for clarity:
> >> 1.  Netty’s SslHandler can’t encrypt a FileRegion.. Does this mean that
> TLS enables clients will lose zero-copy? Or is there a workaround for this?
> If not I think maybe it would be good to explicitly mention this in the
> proposal so users are aware of this trade-off
> >>
> >> 2. Does the design assume always short-lived credentials?
> >>
> >> Overall it looks good to me and it’s a +1 on my side.
> >>
> >> Best,
> >> Giannis
> >>
> >> On Fri, 12 Jun 2026 at 5:44 PM, Lorenzo Affetti via dev <
> [email protected]> wrote:
> >>>
> >>> Hello community!
> >>>
> >>> I would like to start a discussion about FIP-29: (m)TLS support.
> >>>
> >>> Here is the motivation:
> >>>
> >>> All Fluss RPC traffic — between clients and servers, and between
> servers —
> >>> currently travels over the network *in plaintext*.
> >>>
> >>> This has two consequences:
> >>>
> >>>    1. *Confidentiality.* Table data, metadata, and even the credentials
> >>>    exchanged by the existing application-layer authentication are
> visible to
> >>>    anyone able to observe the network. In shared, cloud, or
> multi-tenant
> >>>    deployments this is unacceptable.
> >>>    2. *Strong client authentication.* Fluss has a pluggable
> authentication
> >>>    framework, but it has no certificate-based mechanism. Operators who
> >>>    standardize on PKI / mutual TLS for service-to-service identity (a
> very
> >>>    common requirement) cannot integrate Fluss.
> >>>
> >>> This FIP adds:
> >>>
> >>>    - *TLS transport encryption* for the Netty RPC layer, enabled per
> server
> >>>    listener and on the client.
> >>>    - *Mutual TLS (mTLS) authentication*, where the server derives the
> >>>    authenticated FlussPrincipal from the client's X.509 certificate,
> >>>    integrated into the existing authentication/authorization pipeline.
> >>>
> >>>
> >>> Eager to hear about your thoughts!
> >>>
> >>> --
> >>> Lorenzo Affetti
> >>> Team Leader of Stream Storage
> >>> [email protected]
> >>> www.ververica.com
> >>> ------------------------------
> >>>
> >>> <https://www.ververica.com/>
> >>> Ververica GmbH | Herzogspitalstrasse 24 | 80331 München | Germany
> >>>
> >>> Follow us:
> >>> <https://www.linkedin.com/company/ververica/posts/?feedView=all>
> >>> <https://www.youtube.com/@ververica>
> >>> <
> https://open.spotify.com/show/2XME9h8iBOyr6YupqM99ir?si=87b064644add42a1
> >Available
> >>> on:  <https://aws.amazon.com/marketplace/pp/prodview-luvmqd6leha4i>
> >>> <
> https://marketplace.microsoft.com/en-us/product/saas/ververica.vvc_managed?tab=Overview
> >
> >>>
> >>> Pflichtangaben/Mandatory Information
> >>> <https://www.ververica.com/mandatory-information>
> >
> >
> >
> > --
> > Lorenzo Affetti
> > Senior Software Engineer @ Flink Team
> > Ververica
>

Reply via email to