Hi Jonathan,

> A solution might be to expose to users the choice of using hostname or 
> canonical host name on both sides.
> Say having one setting that collapses functionalities from both KIPs 
> (bootstrap expansion + advertised lookup)
> and an additional parameter that defines how the resolution is performed, 
> using getCanonicalHostName() or not.

thanks sounds to me *less* simple than independent config options, sorry.

I would like to say once again that by itself  KIP-302 only speeds up
the client behavior that can happen anyway when the client restarts
multiple times,
as every time there is no guarantee that - in presence of multiple A
DNS records - the same IP is returned. Attempting to use additiona IPs
if the first fail just makes client recovery faster.

cheers
Edo

On 17 May 2018 at 12:12, Skrzypek, Jonathan <jonathan.skrzy...@gs.com> wrote:
> Yes, makes sense.
> You mentioned multiple times you see no overlap and no issue with your KIP, 
> and that they solve different use cases.
>
> Appreciate you have an existing use case that would work, but we need to make 
> sure this isn't confusing to users and that any combination will always work, 
> across security protocols.
>
> A solution might be to expose to users the choice of using hostname or 
> canonical host name on both sides.
> Say having one setting that collapses functionalities from both KIPs 
> (bootstrap expansion + advertised lookup) and an additional parameter that 
> defines how the resolution is performed, using getCanonicalHostName() or not.
>
> Maybe that gives less flexibility as users wouldn't be able to decide to only 
> perform DNS lookup on bootstrap.servers or on advertised listeners.
> But this would ensure consistency so that a user can decide to use cnames or 
> not (depending on their certificates and Kerberos principals in their 
> environment) and it would work.
>
> Jonathan Skrzypek
>
> -----Original Message-----
> From: Edoardo Comar [mailto:edoco...@gmail.com]
> Sent: 16 May 2018 21:59
> To: dev@kafka.apache.org
> Subject: Re: [DISCUSS] KIP-302 - Enable Kafka clients to use all DNS resolved 
> IP addresses
>
> Hi Jonathan,
> I am afraid that may not work for everybody.
>
> It would not work for us.
> With our current DNS, my Kafka clients are perfectly happy to use any IPs -
> DNS has multiple A records for the 'myhostname.mydomain' used for
> bootstrap and advertised listeners.
> The hosts all serve TLS certificates that include
> 'myhostname.mydomain'  and the clients are happy.
>
> However, applying getCanonicalHostName to those IPs would return
> hostnames that would not match the TLS certificates.
>
> So once again I believe your solution and ours solve different use cases.
>
> cheers
> Edo
>
> On 16 May 2018 at 18:29, Skrzypek, Jonathan <jonathan.skrzy...@gs.com> wrote:
>> I think there are combinations that will break SASL and SSL auth.
>> Could the trick be to have a single parameter that triggers dns resolve both 
>> for bootstrap and advertised listeners, both using getCanonicalHostName() ?
>>
>> Jonathan Skrzypek
>>
>> -----Original Message-----
>> From: Edoardo Comar [mailto:edoco...@gmail.com]
>> Sent: 16 May 2018 17:03
>> To: dev@kafka.apache.org
>> Subject: Re: [DISCUSS] KIP-302 - Enable Kafka clients to use all DNS 
>> resolved IP addresses
>>
>> Hi Rajini,
>>
>> In your example KIP-302 would attempt to connect to the first address
>> returned, let's say
>>
>> www.apache.org/195.154.151.36
>>
>> then, only if that fails, will in turn try the remaining:
>>
>> www.apache.org/40.79.78.1
>> www.apache.org/140.211.11.105
>> www.apache.org/2001:bc8:2142:300:0:0:0:0
>>
>> You're right to say that we expect certificates served by those
>> endpoints to be valid for "www.apache.org"
>>
>> Without KIP-302, only one would be attempted.
>> Which is the first one, that can change every time
>> (typically changes on every Java process restart,
>> but may change also any time InetAddress.getAllByName it's invoked
>> depending on the caching).
>>
>> The behavioral change that KIP-302 may introduce is that in the example 
>> above,
>> also an IPv6 connection may be attempted after some IPv4 ones.
>>
>> InetAddress.getAllByName() implementation uses a system property
>> "java.net.preferIPv6Addresses"
>> to decide which type of address to return first (default is still IPv4
>> in java 10)
>>
>> We will amend the KIP and PR so that the loop only uses IPs of the
>> same type as the first one returned.
>>
>> A part from the above, KIP 302 does not seem to change any existing
>> client behaviour, as any one of multiple IP addresses (of a given
>> v4/v6 type) can currently be picked.
>> We're happy however to keep the looping behavior optional with the
>> discussed config property, disabled by default.
>>
>> As for KIP-235 that may introduce new hostnames in the bootstrap list
>> (the current PR rewrites the bootstrap list)
>> and we fail to see the conflict with KIP-302, whatever the set of
>> configs chosen.
>>
>> We'd be happy to try understand what we are missing in a KIP call :-)
>>
>> cheers
>> Edo
>>
>> On 15 May 2018 at 16:58, Rajini Sivaram <rajinisiva...@gmail.com> wrote:
>>> Hi Edo,
>>>
>>> I agree that KIP-235 and KIP-302 address different scenarios. And I agree
>>> that each one is not sufficient in itself to address both the scenarios.
>>> But I also think that they conflict and hence they need to be looked at
>>> together and perhaps use a single config.
>>>
>>> As an example:
>>>
>>> If I run:
>>>
>>> for (InetAddress address : InetAddress.getAllByName("www.apache.org")) {
>>>     System.out.printf("HostName %s canonicalHostName %s IP %s\n",
>>>             address.getHostName(), address.getCanonicalHostName(),
>>> address.getHostAddress());
>>> }
>>>
>>> I get:
>>>
>>> HostName www.apache.org canonicalHostName tlp-eu-west.apache.org IP
>>> 195.154.151.36
>>> HostName www.apache.org canonicalHostName 40.79.78.1 IP 40.79.78.1
>>> HostName www.apache.org canonicalHostName themis.apache.org IP
>>> 140.211.11.105
>>> HostName www.apache.org canonicalHostName 2001:bc8:2142:300:0:0:0:0 IP
>>> 2001:bc8:2142:300:0:0:0:0
>>>
>>>
>>> If www.apache.org is used as a bootstrap address, KIP-302 would connect to (
>>>  www.apache.org/195.154.151.36 and www.apache.org/140.211.11.105) while
>>> KIP-235 would connect to (tlp-eu-west.apache.org/195.154.151.3. and
>>> themis.apache.org/140.211.11.105). This is a significant difference not
>>> just for Kerberos, but for any secure environment where hostname is
>>> verified to prevent man-in-the-middle attacks. In your case, I presume you
>>> would have SSL certificates with the equivalent of www.apache.org on both
>>> the load balancers. In Jonathan's case, I presume he has Kerberos
>>> principals for the equivalent of tlp-eu-west.apache.org and
>>> themis.apache.org. We would want to support both scenarios regardless of
>>> the security protocol, just need to come up with configuration options that
>>> don't conflict.
>>>
>>>
>>> On Mon, May 14, 2018 at 5:24 PM, Edoardo Comar <edoco...@gmail.com> wrote:
>>>
>>>> Thanks Rajini
>>>>
>>>> I still don't see the overlap between the two KIPS
>>>>
>>>> KIP-235 allows an expansion of hostnames on the bootstrap list.
>>>>
>>>> KIP-302 allows alternative IPs to be used to attempt a connection
>>>> (either at bootstrap and when processing the MetadataResponse) to a
>>>> given hostname.
>>>>
>>>> A use case would be that of active/passive LB fronting the brokers.
>>>>
>>>> Arguably, if Java honored the DNS-set TTL, and the TTL was low and on
>>>> subsequent requests, the order of IPs returned by the
>>>> InetAddress.getAllByName() was random, we may not need such an
>>>> enhancement.
>>>> In practice, a Java client can get stuck on a "bad" IP forever if it
>>>> only relies on the first IP returned.
>>>>
>>>> HTH,
>>>> Edo
>>>>
>>>> On 14 May 2018 at 16:23, Rajini Sivaram <rajinisiva...@gmail.com> wrote:
>>>> > Hi Edo,
>>>> >
>>>> > Thanks for the KIP. I think it will be good to include a diagram to make
>>>> it
>>>> > easier to distinguish this scenario from that of KIP-235 without reading
>>>> > the PR.
>>>> >
>>>> > It may be worth considering if KIP-235 and this KIP could use a single
>>>> > config name with different values instead of two boolean configs:
>>>> >
>>>> > bootstrap.reverse.dns.lookup = true/false
>>>> > enable.all.dns.ips = true/false
>>>> >
>>>> > Not all values of (bootstrap.reverse.dns.lookup, enable.all.dns.ips) seem
>>>> > to make sense. And not all scenarios are handled. Even if we use multiple
>>>> > configs, it seems to me that we may want to name them differently.
>>>> >
>>>> > The possible combinations are:
>>>> >
>>>> > 1) Bootstrap
>>>> >
>>>> > a) No lookup
>>>> > b) Use all DNS entries with host name
>>>> > c) Use all DNS entries with canonical host name
>>>> >
>>>> > 2) Advertised listeners
>>>> >
>>>> > a) No lookup
>>>> > b) Use all DNS entries with host name
>>>> > c) Use all DNS entries with canonical host name
>>>> >
>>>> > The combinations that are enabled by the two boolean configs (
>>>> > bootstrap.reverse.dns.lookup, enable.all.dns.ips)  are:
>>>> >
>>>> >    - (false, false) => (1a, 2a)
>>>> >    - (true, false) => (1c, 2a)
>>>> >    - (false, true) => (1b, 2b)
>>>> >    - (true, true) => (??, 2b)
>>>> >
>>>> > It will be good if we can clearly identify which combinations we want to
>>>> > support and the scenarios where they may be useful. Perhaps (1a, 2a),
>>>> (1c,
>>>> > 2a), (1b, 2b) and (1c, 2c) are useful?
>>>> >
>>>> >
>>>> > On Mon, May 14, 2018 at 2:58 PM, Skrzypek, Jonathan <
>>>> > jonathan.skrzy...@gs.com> wrote:
>>>> >
>>>> >> Ah, apologies didn't see there was already a decent amount of discussion
>>>> >> on this in the PR.
>>>> >>
>>>> >> This kind of sounds related to the environment you're running to me.
>>>> >> What is the rationale behind using the advertised listeners to do your
>>>> >> load balancing advertisement rather than a top level alias that has
>>>> >> everything ?
>>>> >>
>>>> >> It sounds like in your case there is a mismatch between
>>>> bootstrap.servers
>>>> >> and advertised.listeners, and you want advertised.listeners to take
>>>> >> precedence and have the client iterate over what is returned by the
>>>> broker.
>>>> >> So the extra parameter doesn't only have to do with DNS but it's also
>>>> >> appending from the broker, maybe the parameter name should reflect this
>>>> ?
>>>> >>
>>>> >> Jonathan Skrzypek
>>>> >>
>>>> >>
>>>> >> -----Original Message-----
>>>> >> From: Skrzypek, Jonathan [Tech]
>>>> >> Sent: 14 May 2018 14:46
>>>> >> To: dev@kafka.apache.org
>>>> >> Subject: RE: [DISCUSS] KIP-302 - Enable Kafka clients to use all DNS
>>>> >> resolved IP addresses
>>>> >>
>>>> >> Hi,
>>>> >>
>>>> >> I see you noted the similarities with KIP-235.
>>>> >> But KIP-235 might also solve what this KIP is trying to achieve.
>>>> >>
>>>> >> When parsing bootstrap.servers, KIP-235 has the client add all
>>>> underlying
>>>> >> hostnames and IPs.
>>>> >> And this happens before hitting the NetworkClient.
>>>> >>
>>>> >> So to me the client will try every single endpoint behind any
>>>> >> bootstrap.servers record.
>>>> >>
>>>> >> See 
>>>> >> https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_apache_kafka_pull_4485_commits_24757eb7b0&d=DwIBaQ&c=7563p3e2zaQw0AB1wrFVgyagb2IE5rTZOYPxLxfZlX4&r=nNmJlu1rR_QFAPdxGlafmDu9_r6eaCbPOM0NM1EHo-E&m=_ud9m_JZJ87C7eGsKcmzgJgDpNQDIIv5R4i_7VlhkLc&s=TqaiA9uW_myYO6FN-gKPfPlioxZR6DhnlBTpEj5M2aQ&e=
>>>> >> 6bcf8c7d7649c85232c52b5d54f0e4#diff-89ef153462e64c250a21bd324ae1a851
>>>> >> which calls getAllByName like you suggested
>>>> >>
>>>> >> Jonathan Skrzypek
>>>> >>
>>>> >>
>>>> >> -----Original Message-----
>>>> >> From: Edoardo Comar [mailto:edoco...@gmail.com]
>>>> >> Sent: 14 May 2018 14:17
>>>> >> To: dev@kafka.apache.org
>>>> >> Subject: [DISCUSS] KIP-302 - Enable Kafka clients to use all DNS
>>>> resolved
>>>> >> IP addresses
>>>> >>
>>>> >> Hi all,
>>>> >>
>>>> >> We just opened a KIP to add support for the client to use all IPs
>>>> returned
>>>> >> by DNS for the brokers
>>>> >>
>>>> >> The details are here -
>>>> >>
>>>> >> https://urldefense.proofpoint.com/v2/url?u=https-3A__cwiki.a
>>>> >> pache.org_confluence_display_KAFKA_KIP-2D302-2B-2D-2BEnable-
>>>> >> 2BKafka-2Bclients-2Bto-2Buse-2Ball-2BDNS-2Bresolved-2BIP-
>>>> >> 2Baddresses&d=DwIBaQ&c=7563p3e2zaQw0AB1wrFVgyagb2IE5rTZOYPxL
>>>> >> xfZlX4&r=nNmJlu1rR_QFAPdxGlafmDu9_r6eaCbPOM0NM1EHo-E&m=EJafF
>>>> >> l1clRyolgtcu2uCc4_cIOJnlxb1r1n-D2Dti4k&s=C-UZ6KUG7JFiPD_
>>>> >> CnHczDOVqH9-XC5f_OFkw4BTNrI4&e=
>>>> >>
>>>> >> The JIRA and provisional PR  (where the discussion lead to the creation
>>>> of
>>>> >> this KIP) are :
>>>> >>
>>>> >> https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.
>>>> >> apache.org_jira_browse_KAFKA-2D6863&d=DwIBaQ&c=7563p3e2zaQw0
>>>> >> AB1wrFVgyagb2IE5rTZOYPxLxfZlX4&r=nNmJlu1rR_QFAPdxGlafmDu9_r6
>>>> >> eaCbPOM0NM1EHo-E&m=EJafFl1clRyolgtcu2uCc4_cIOJnlxb1r1n-
>>>> >> D2Dti4k&s=3Puqs5iYoPsw6hARQr6gvokdFE-H5USMiNVGOUtNkJI&e=
>>>> >>
>>>> >> https://urldefense.proofpoint.com/v2/url?u=https-3A__github.
>>>> >> com_apache_kafka_pull_4987&d=DwIBaQ&c=7563p3e2zaQw0AB1wrFVgy
>>>> >> agb2IE5rTZOYPxLxfZlX4&r=nNmJlu1rR_QFAPdxGlafmDu9_r6eaC
>>>> >> bPOM0NM1EHo-E&m=EJafFl1clRyolgtcu2uCc4_cIOJnlxb1r1n-D2Dti4k&
>>>> >> s=Hqn5dOgQy4-MHTIJLE49O8bNomry3SoGq9OVoHU-CRA&e=
>>>> >>
>>>> >> Looking forward to the community's feedback.
>>>> >> It would be amazing to have it voted by May 22nd :-) :-)
>>>> >>
>>>> >> Edoardo & Mickael
>>>> >>
>>>>
>>>>
>>>>
>>>> --
>>>> "When the people fear their government, there is tyranny; when the
>>>> government fears the people, there is liberty." [Thomas Jefferson]
>>>>
>>
>>
>>
>> --
>> "When the people fear their government, there is tyranny; when the
>> government fears the people, there is liberty." [Thomas Jefferson]
>
>
>
> --
> "When the people fear their government, there is tyranny; when the
> government fears the people, there is liberty." [Thomas Jefferson]



-- 
"When the people fear their government, there is tyranny; when the
government fears the people, there is liberty." [Thomas Jefferson]

Reply via email to