Hi Daniel,

Glad to hear from you!

With regards to the stripped-down REST API alternative, I don't see how
this would prevent us from introducing the fully-fledged Connect REST API,
or even an augmented variant of it, at some point down the road. If we go
with the internal-only API now, and want to expand later, can't we gate the
expansion behind a feature flag configuration property that by default
disables the new feature?

I'm also not sure that we'd ever want to expose the raw Connect REST API
for dedicated MM2 clusters. If people want that capability, they can
already spin up a vanilla Connect cluster and run as many MM2 connectors as
they'd like on it, and as of KIP-458 [1], it's even possible to use a
single Connect cluster to replicate between any two Kafka clusters instead
of only targeting the Kafka cluster that the vanilla Connect cluster
operates on top of. I do agree that it'd be great to be able to dynamically
adjust things like topic filters without having to restart a dedicated MM2
node; I'm just not sure that the vanilla Connect REST API is the
appropriate way to do that, especially since the exact mechanisms that make
a single Connect cluster viable for replicating across any two Kafka
clusters could be abused and cause a dedicated MM2 cluster to start writing
to a completely different Kafka cluster that's not even defined in its
config file.

Finally, as far as security goes--since this is essentially a bug fix, I'm
inclined to make it as easy as possible for users to adopt it. MTLS is a
great start for securing a REST API, but it's not sufficient on its own
since anyone who could issue an authenticated REST request against the MM2
cluster would still be able to make any changes they want (with the
exception of accessing internal endpoints, which were secured with
KIP-507). If we were to bring up the fully-fledged Connect REST API,
cluster administrators would also likely have to add some kind of
authorization layer to prevent people from using the REST API to mess with
the configurations of the connectors that MM2 brought up. One way of doing
that is to add a REST extension to your Connect cluster, but implementing
and configuring one in order to be able to run a multi-node MM2 cluster
without hitting this bug seems like too much work to be worth it.

I think if we had a better picture of what a REST API for dedicated MM2
clusters would/should look like, then it would be easier to go along with
this, and we could even just add the feature flag in this KIP right now to
address any security concerns. My instinct would be to address this in a
follow-up KIP in order to reduce scope creep, though, and keep this KIP
focused on addressing the bug with multi-node dedicated MM2 clusters. What
do you think?

Cheers,

Chris

[1] -
https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy

On Thu, Aug 25, 2022 at 3:55 AM Dániel Urbán <urb.dani...@gmail.com> wrote:

> Hi Chris,
>
> Thanks for bringing this up again :)
>
> 1. I think that is reasonable, though I find the current state of MM2 to be
> confusing. The current issue with the distributed mode is not documented
> properly, but maybe the logging will help a bit.
>
> 2. Going for an internal-only Connect REST version would lock MM2 out of a
> path where the REST API can be used to dynamically reconfigure
> replications. For now, I agree, it would be easy to corrupt the state of
> MM2 if someone wanted to use the properties and the REST at the same time,
> but in the future, we might have a chance to introduce a different config
> mechanism, where only the cluster connections have to be specified in the
> properties file, and everything else can be configured through REST
> (enabling replications, changing topic filters, etc.). Because of this, I'm
> leaning towards a full Connect REST API. To avoid issues with conflicts
> between the props file and the REST, we could document security best
> practices (e.g. turn on basic auth or mTLS on the Connect REST to avoid
> unwanted interactions).
>
> 3. That is a good point, and I agree, a big plus for motivation.
>
> I have a working version of this in which all flows spin up a dedicated
> Connect REST, but I can give other solutions a try, too.
>
> Thanks,
> Daniel
>
> Chris Egerton <chr...@aiven.io.invalid> ezt írta (időpont: 2022. aug. 24.,
> Sze, 17:46):
>
> > Hi Daniel,
> >
> > I'd like to resurface this KIP in case you're still interested in
> pursuing
> > it. I know it's been a while since you published it, and it hasn't
> received
> > much attention, but I'm hoping we can give it a try now and finally put
> > this long-standing bug to rest. To that end, I have some thoughts about
> the
> > proposal. This isn't a complete review, but I wanted to give enough to
> get
> > the ball rolling:
> >
> > 1. Some environments with firewalls or strict security policies may not
> be
> > able to bring up a REST server for each MM2 node. If we decide that we'd
> > like to use the Connect REST API (or even just parts of it) to address
> this
> > bug with MM2, it does make sense to eventually make the availability of
> the
> > REST API a hard requirement for running MM2, but it might be a bit too
> > abrupt to do that all in a single release. What do you think about making
> > the REST API optional for now, but noting that it will become required
> in a
> > later release (probably 4.0.0 or, if that's not enough time, 5.0.0)? We
> > could choose not to bring the REST server for any node whose
> configuration
> > doesn't explicitly opt into one, and maybe log a warning message on
> startup
> > if none is configured. In effect, we'd be marking the current mode (no
> REST
> > server) as deprecated.
> >
> > 2. I'm not sure that we should count out the "Creating an internal-only
> > derivation of the Connect REST API" rejected alternative. Right now, the
> > single source of truth for the configuration of a MM2 cluster (assuming
> > it's being run in dedicated mode, and not as a connector in a vanilla
> > Connect cluster) is the configuration file used for the process. By
> > bringing up the REST API, we'd expose endpoints to modify connector
> > configurations, which would not only add complexity to the operation of a
> > MM2 cluster, but even qualify as an attack vector for malicious entities.
> > Thanks to KIP-507 we have some amount of security around the
> internal-only
> > endpoints used by the Connect framework, but for any public endpoints,
> the
> > Connect REST API doesn't come with any security out of the box.
> >
> > 3. Small point, but with support for exactly-once source connectors
> coming
> > out in 3.3.0, it's also worth noting that that's another feature that
> won't
> > work properly with multi-node MM2 clusters without adding a REST server
> for
> > each node (or some substitute that accomplishes the same goal). I don't
> > think this will affect the direction of the design discussion too much,
> but
> > it does help strengthen the motivation.
> >
> > Cheers,
> >
> > Chris
> >
> > On 2021/02/18 15:57:36 Dániel Urbán wrote:
> > > Hello everyone,
> > >
> > > * Sorry, I meant KIP-710.
> > >
> > > Right now the MirrorMaker cluster is somewhat unreliable, and not
> > > supporting running in a cluster properly. I'd say that fixing this
> would
> > be
> > > a nice addition.
> > > Does anyone have some input on this?
> > >
> > > Thanks in advance
> > > Daniel
> > >
> > > Dániel Urbán <ur...@gmail.com> ezt írta (időpont: 2021. jan. 26., K,
> > > 15:56):
> > >
> > > > Hello everyone,
> > > >
> > > > I would like to start a discussion on KIP-709, which addresses some
> > > > missing features in MM2 dedicated mode.
> > > >
> > > >
> >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-710%3A+Full+support+for+distributed+mode+in+dedicated+MirrorMaker+2.0+clusters
> > > >
> > > > Currently, the dedicated mode of MM2 does not fully support running
> in
> > a
> > > > cluster. The core issue is that the Connect REST Server is not
> included
> > in
> > > > the dedicated mode, which makes follower->leader communication
> > impossible.
> > > > In some cases, this results in the cluster not being able to react to
> > > > dynamic configuration changes (e.g. dynamic topic filter changes).
> > > > Another smaller detail is that MM2 dedicated mode eagerly resolves
> > config
> > > > provider references in the Connector configurations, which is
> > undesirable
> > > > and a breaking change compared to vanilla Connect. This can cause an
> > issue
> > > > for example when there is an environment variable reference, which
> > contains
> > > > some host-specific information, like a file path. The leader resolves
> > the
> > > > reference eagerly, and the resolved value is propagated to other MM2
> > nodes
> > > > instead of the reference being resolved locally, separately on each
> > node.
> > > >
> > > > The KIP addresses these by adding the Connect REST Server to the MM2
> > > > dedicated mode for each replication flow, and postponing the config
> > > > provider reference resolution.
> > > >
> > > > Please discuss, I know this is a major change, but also an important
> > > > feature for MM2 users.
> > > >
> > > > Daniel
> > > >
> > >
> >
>

Reply via email to