A load balancer that balances the load across the brokers wouldn't work,
but here the LB is being used as a terminating SSL proxy. That should work
if each Kafka is configured with its own proxy.
On Mon, Nov 21, 2016 at 2:57 PM, tao xiao <xiaotao...@gmail.com> wrote:

> I doubt the LB solution will work for Kafka. Client needs to connect to the
> leader of a partition to produce/consume messages. If we put a LB in front
> of all brokers which means all brokers share the same LB how does the LB
> figure out the leader?
> On Mon, Nov 21, 2016 at 10:26 PM Martin Gainty <mgai...@hotmail.com>
> wrote:
>
> >
> >
> >
> >
> > ________________________________
> > From: Zac Harvey <zac.har...@welltok.com>
> > Sent: Monday, November 21, 2016 8:59 AM
> > To: users@kafka.apache.org
> > Subject: Re: Can Kafka/SSL be terminated at a load balancer?
> >
> > Thanks again Rajini,
> >
> >
> > Using these configs, would clients connect to the load balancer over
> > SSL/9093? And then would I configure the load balancer to forward traffic
> > from SSL/9093 to plaintext/9093?
> >
> > MG>Zach
> >
> > MG>i could be wrong but SSL port != plaintext port ..but consider:
> >
> > MG>consider recent testcase where all traffic around a certain location
> > gets bogged with DOS attacks
> >
> > MG>what are the legitimate role(s) of the LB when SSL Traffic and HTTP1.1
> > Traffic and FTP Traffic are ALL blocked?
> >
> > MG>LB should never be stripping SSL headers to redirect to PlainText
> > because you are not rerouting to a faster route
> >
> > MG>most net engineers worth their salt will configure their routers to
> > static routes to loop around bogged-down routers
> >
> > MG>WDYT?
> >
> > Thanks again, just still a little uncertain about the traffic/ports
> coming
> > into the load balancer!
> >
> >
> > Best,
> >
> > Zac
> >
> > ________________________________
> > From: Rajini Sivaram <rajinisiva...@googlemail.com>
> > Sent: Monday, November 21, 2016 8:48:41 AM
> > To: users@kafka.apache.org
> > Subject: Re: Can Kafka/SSL be terminated at a load balancer?
> >
> > Zac,
> >
> > Yes, that is correct. Ruby clients will not be authenticated by Kafka.
> They
> > talk SSL to the load balancer and the load balancer uses PLAINTEXT
> without
> > authentication to talk to Kafka.
> >
> > On Mon, Nov 21, 2016 at 1:29 PM, Zac Harvey <zac.har...@welltok.com>
> > wrote:
> >
> > > *Awesome* explanation Rajini - thank you!
> > >
> > >
> > > Just to confirm: the SASL/PLAIN configs would only be for the
> interbroker
> > > communication, correct? Meaning, beyond your recommended changes to
> > > server.properties, and the addition of the new jaas.conf file, the
> > > producers (Ruby clients) wouldn't need to authenticate, correct?
> > >
> > >
> > > Thanks again for all the great help so far, you've already helped me
> more
> > > than you know!
> > >
> > >
> > > Zac
> > >
> > > ________________________________
> > > From: Rajini Sivaram <rajinisiva...@googlemail.com>
> > > Sent: Monday, November 21, 2016 3:53:47 AM
> > > To: users@kafka.apache.org
> > > Subject: Re: Can Kafka/SSL be terminated at a load balancer?
> > >
> > > Zac,
> > >
> > > *advertised.listeners* is used to make client connections from
> > > producers/consumers as well as for client-side connections for
> > inter-broker
> > > communication. In your scenario, setting it to *PLAINTEXT://mykafka01*
> > > would work for inter-broker, bypassing the load balancer, but clients
> > would
> > > also then attempt to connect directly to *mykafka01*.  Setting it to
> > > *SSL://mybalancer01* would work for producers/consumers, but brokers
> > would
> > > try to connect to *mybalancer01* using PLAINTEXT. Unfortunately neither
> > > works for both. You need two endpoints, one for inter-broker that
> > bypasses
> > > *mybalancer01* and another for clients that uses *mybalancer01*. With
> the
> > > current Kafka configuration, you would require two security protocols
> to
> > > enable two endpoints.
> > >
> > > You could enable SSL in Kafka (using self-signed certificates if you
> > need)
> > > for one of the two endpoints to overcome this limitation. But
> presumably
> > > you have a secure internal network running Kafka and want to avoid the
> > cost
> > > of encryption in Kafka. The simplest solution I can think of is to use
> > > SASL_PLAINTEXT using SASL/PLAIN for inter-broker as a workaround. The
> > > configuration options in server.properties would look like:
> > >
> > > listeners=PLAINTEXT://:9093,SASL_PLAINTEXT://:9092
> > >
> > > advertised.listeners=PLAINTEXT://mybalancer01.example.com:9093
> > > ,SASL_PLAINTEXT://mykafka01.example.com:9092
> > >
> > > security.inter.broker.protocol=SASL_PLAINTEXT
> > >
> > > sasl.enabled.mechanisms=PLAIN
> > >
> > > sasl.mechanism.inter.broker.protocol=PLAIN
> > >
> > >
> > > You also need a JAAS configuration file configured for the broker JVM (
> > > *KAFKA_OPTS="-Djava.security.auth.login.config=/kafka/jaas.conf"*) .
> See
> > > https://kafka.apache.org/documentation#security_sasl for configuring
> > > SASL.*
> > > jaas.conf* would look something like:
> > >
> > > KafkaServer {
> > >
> > >         org.apache.kafka.common.security.plain.PlainLoginModule
> required
> > >
> > >         username="kafka"
> > >
> > >         user_kafka="kafka-password"
> > >
> > >         password="kafka-password";
> > >
> > > };
> > >
> > >
> > > Hope that helps.
> > >
> > >
> > > On Fri, Nov 18, 2016 at 6:39 PM, Zac Harvey <zac.har...@welltok.com>
> > > wrote:
> > >
> > > > Thanks again Rajini!
> > > >
> > > >
> > > > One last followup question, if you don't mind. You said that my
> > > > server.properties file should look something like this:
> > > >
> > > >
> > > > listeners=SSL://:9093
> > > > advertised.listeners=SSL://mybalancer01.example.com:9093
> > > > security.inter.broker.protocol=SSL
> > > >
> > > > However, please remember that I'm looking for the load balancer to
> > > > terminate SSL, meaning that (my desired) communication between the
> load
> > > > balancer and Kafka would be over plaintext (not SSL).  In other
> words:
> > > >
> > > > Ruby Producers/Clients <----SSL:9093----> Load Balancer <----
> > > > Plaintext:9092 ----> Kafka
> > > >
> > > > So producers/client connect to the load balancer over SSL and port
> > 9093,
> > > > but then the load balancer communicates with Kafka over plaintext and
> > > port
> > > > 9092.
> > > >
> > > > I also don't need inter broker communication to be SSL; it can be
> > > > plaintext.
> > > >
> > > > If this is the case, do I still need to change server.properties, or
> > can
> > > I
> > > > leave it like so:
> > > >
> > > > listeners=plaintext://:9092
> > > > advertised.listeners=plaintext://mybalancer01.example.com:9092
> > > >
> > > > Or could it just be:
> > > >
> > > > listeners=plaintext://:9092
> > > > advertised.listeners=plaintext://mykafka01.example.com:9092
> > > >
> > > > Thanks again!
> > > > Zac
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > ________________________________
> > > > From: Rajini Sivaram <rajinisiva...@googlemail.com>
> > > > Sent: Friday, November 18, 2016 9:57:22 AM
> > > > To: users@kafka.apache.org
> > > > Subject: Re: Can Kafka/SSL be terminated at a load balancer?
> > > >
> > > > You should set advertised.listeners rather than the older
> > > > advertised.host.name property in server.properties:
> > > >
> > > >
> > > >    - listeners=SSL://:9093
> > > >    - advertised.listeners=SSL://mybalancer01.example.com:9093
> > > >    - security.inter.broker.protocol=SSL
> > > >
> > > >
> > > > If your listeners are on particular interfaces, you can set address
> in
> > > the
> > > > 'listeners' property too.
> > > >
> > > >
> > > > If you want inter-broker communication to bypass the SSL proxy, you
> > would
> > > > need another security protocol that can be used for inter-broker
> > > > communication (PLAINTEXT in the example below).
> > > >
> > > >
> > > >
> > > >    - listeners=SSL://:9093,PLAINTEXT://:9092
> > > >    - advertised.listeners=SSL://mybalancer01.example.com:9093,
> > > PLAINTEXT://
> > > >    mykafka01.example.com:9092
> > > >    - security.inter.broker.protocol=PLAINTEXT
> > > >
> > > >  I haven't used the Ruby clients, so I am not sure about client
> > > > configuration. With Java clients, if you don't specify truststore,
> the
> > > > default trust stores are used, so with trusted CA-signed
> certificates,
> > no
> > > > additional client configuration is required. You can test your
> > > installation
> > > > using the console producer and consumer that are shipped with Kafka
> to
> > > make
> > > > sure it is working before you run with Ruby clients.
> > > >
> > > >
> > > >
> > > > On Fri, Nov 18, 2016 at 1:23 PM, Zac Harvey <zac.har...@welltok.com>
> > > > wrote:
> > > >
> > > > >
> > > > > Thanks Rajini,
> > > > >
> > > > >
> > > > > So currently one of our Kafka nodes is 'mykafka01.example.com',
> and
> > in
> > > > > its server.properties file, I have advertised.host.name=mykafka01
> > > > > .example.com. Our load balancer lives at mybalancer01.example.com,
> > and
> > > > > this what producers will connect to (over SSL) to send messages to
> > > Kafka.
> > > > >
> > > > >
> > > > > It sounds like you're saying I need to change my Kafka node's
> > > > > server.properties to have advertised.host.name=mybalance
> > > r01.example.com,
> > > > > yes? If not, can you perhaps provide a quick snippet of the
> changes I
> > > > would
> > > > > need to make to server.properties?
> > > > >
> > > > >
> > > > > Again, the cert served by the balancer will be a highly-trusted
> (root
> > > > > CA-signed) certificate that all clients will natively trust.
> > > > Interestingly
> > > > > enough, most (if not all) the Kafka producers/clients will be
> written
> > > in
> > > > > Ruby (using the zendesk Kafka-Ruby gem<https://github.com/
> > > > > zendesk/ruby-kafka>), so there wont be any JKS configuration
> options
> > > > > available for those Ruby clients.
> > > > >
> > > > >
> > > > > Besides making the change to server.properties that I mentioned
> > above,
> > > > are
> > > > > there any other client-side configs that will need to be made for
> the
> > > > Ruby
> > > > > clients to connect over SSL?
> > > > >
> > > > >
> > > > > Thank you enormously here!
> > > > >
> > > > >
> > > > > Best,
> > > > >
> > > > > Zac
> > > > >
> > > > >
> > > > > ________________________________
> > > > > From: Rajini Sivaram <rajinisiva...@googlemail.com>
> > > > > Sent: Friday, November 18, 2016 5:15:13 AM
> > > > > To: users@kafka.apache.org
> > > > > Subject: Re: Can Kafka/SSL be terminated at a load balancer?
> > > > >
> > > > > Zac,
> > > > >
> > > > > Kafka has its own built-in load-balancing mechanism based on
> > partition
> > > > > assignment. Requests are processed by partition leaders,
> distributing
> > > > load
> > > > > across the brokers in the cluster. If you want to put a proxy like
> > > > HAProxy
> > > > > with SSL termination in front of your brokers for added security,
> you
> > > can
> > > > > do that. You can have completely independent trust chain between
> > > > > clients->proxy and proxy->broker. You need to configure Kafka
> brokers
> > > > with
> > > > > the proxy host as the host in the advertised listeners for the
> > security
> > > > > protocol used by clients.
> > > > >
> > > > > On Thu, Nov 17, 2016 at 9:44 PM, Zac Harvey <
> zac.har...@welltok.com>
> > > > > wrote:
> > > > >
> > > > > > We have two Kafka nodes and for reasons outside of this question,
> > > would
> > > > > > like to set up a load balancer to terminate SSL with producers
> > > > (clients).
> > > > > > The SSL cert hosted by the load balancer will be signed by
> > > trusted/root
> > > > > CA
> > > > > > that clients should natively trust.
> > > > > >
> > > > > >
> > > > > > Is this possible to do, or does Kafka somehow require SSL to be
> > setup
> > > > > > directly on the Kafka servers themselves?
> > > > > >
> > > > > >
> > > > > > Thanks!
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Regards,
> > > > >
> > > > > Rajini
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Regards,
> > > >
> > > > Rajini
> > > >
> > >
> > >
> > >
> > > --
> > > Regards,
> > >
> > > Rajini
> > >
> >
> >
> >
> > --
> > Regards,
> >
> > Rajini
> >
>



-- 
Regards,

Rajini

Reply via email to