Hi Jonathan,
I'm ok with an expandable enum for the config that could be extended
in the future.
It is marginally better than multiple potentially conflicting config entries.

Though as I think the change for KIP-302 is independent from KIP-235
and they do not conflict,
when we'll look back at it post 2.0 we may see if it is more valuable
to shoehorn its config in an expanded enum or not

thanks,
Edo

On 24 May 2018 at 16:50, Skrzypek, Jonathan <jonathan.skrzy...@gs.com> wrote:
> Hi,
>
> As Rajini suggested in the thread for KIP 235 (attached), we could try to 
> have an enum that would drive what does the client expands/resolves.
>
> I suggest a client config called client.dns.lookup with different values 
> possible :
>
> - no : no dns lookup
> - hostnames.only : perform dns lookup on both bootstrap.servers and 
> advertised listeners
> - canonical.hostnames.only : perform dns lookup on both bootstrap.servers and 
> advertised listeners
> - bootstrap.hostnames.only : perform dns lookup on bootstrap.servers list and 
> expand it
> - bootstrap.canonical.hostnames.only : perform dns lookup on 
> bootstrap.servers list and expand it
> - advertised.listeners.hostnames.only : perform dns lookup on advertised 
> listeners
> - advertised.listeners.canonical.hostnames.only : perform dns lookup on 
> advertised listeners
>
> I realize this is a bit heavy but this gives users the ability to pick and 
> choose.
> I didn't include a setting to mix hostnames and canonical hostnames as I'm 
> not sure there would be a valid use case.
>
> Alternatively, to have less possible values, we could have 2 parameters :
>
> - dns.lookup.type with values : hostname / canonical.host.name
> - dns.lookup.behaviour : bootstrap.servers, advertised.listeners, both
>
> Thoughts ?
>
> Jonathan Skrzypek
>
>
> -----Original Message-----
> From: Edoardo Comar [mailto:edoco...@gmail.com]
> Sent: 17 May 2018 23:50
> To: dev@kafka.apache.org
> Subject: Re: [DISCUSS] KIP-302 - Enable Kafka clients to use all DNS resolved 
> IP addresses
>
> 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]
>
> ________________________________
>
> Your Personal Data: We may collect and process information about you that may 
> be subject to data protection laws. For more information about how we use and 
> disclose your personal data, how we protect your information, our legal basis 
> to use your information, your rights and who you can contact, please refer 
> to: www.gs.com/privacy-notices<http://www.gs.com/privacy-notices>
>
>
> ---------- Forwarded message ----------
> From: Rajini Sivaram <rajinisiva...@gmail.com>
> To: "Skrzypek, Jonathan" <jonathan.skrzy...@ln.email.gs.com>, dev 
> <dev@kafka.apache.org>, Ismael Juma <ism...@juma.me.uk>
> Cc:
> Bcc:
> Date: Tue, 22 May 2018 15:05:07 +0000
> Subject: Re: FW: [VOTE] KIP-235 Add DNS alias support for secured connection
> Hi Jonathan,
>
> I think it would make sense to convert the config in this KIP into an enum so 
> that we can add more variations later on. But since KIP-302 is still under 
> discussion, it is not clear what the config name should be. Since today is 
> the KIP deadline and the implementation itself is straightforward, it would 
> make sense to progress with this one for 2.0.0 if we can get one more binding 
> vote.
>
> Ismael, do you have time to take a look at KIP-235 today?
>
> Thanks,
>
> Rajini
>
>
> On Tue, May 22, 2018 at 3:45 PM, Skrzypek, Jonathan 
> <jonathan.skrzy...@gs.com> wrote:
>>
>> Hello Rajini,
>>
>> What do you think should be the next step here ?
>>
>>
>> Jonathan Skrzypek
>>
>> -----Original Message-----
>> From: Skrzypek, Jonathan [Tech]
>> Sent: 21 May 2018 10:51
>> To: 'dev'
>> Subject: RE: [VOTE] KIP-235 Add DNS alias support for secured connection
>>
>> Hi,
>>
>> What would be the next step here ?
>> I know there's a discussion going on around KIP-302, but I'm also conscious 
>> that the 2.0.0 deadline for KIPs is tomorrow.
>> I've opened this KIP in January and discussions have been productive with an 
>> end solution I had the impression was reasonable, so I am keen to see it 
>> make it the next release.
>>
>>
>> Jonathan Skrzypek
>>
>> -----Original Message-----
>> From: Skrzypek, Jonathan [Tech]
>> Sent: 14 May 2018 13:48
>> To: dev
>> Subject: RE: [VOTE] KIP-235 Add DNS alias support for secured connection
>>
>> Sure, I modified the KIP to add more details
>>
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-235%3A+Add+DNS+alias+support+for+secured+connection
>>
>>
>> Jonathan Skrzypek
>>
>>
>> -----Original Message-----
>> From: Ismael Juma [mailto:ism...@juma.me.uk]
>> Sent: 14 May 2018 11:53
>> To: dev
>> Subject: Re: [VOTE] KIP-235 Add DNS alias support for secured connection
>>
>> Thanks for the KIP, Jonathan. It would be helpful to have more detail on
>> how SSL authentication could be broken if the new behaviour is the default.
>> I know this was discussed in the mailing list thread, but it's important to
>> include it in the KIP since it's the main reason why a new config is needed
>> (and configs should be avoided whenever we can just do the right thing).
>>
>> Ismael
>>
>> On Fri, Mar 23, 2018 at 12:05 PM Skrzypek, Jonathan <
>> jonathan.skrzy...@gs.com> wrote:
>>
>> > Hi,
>> >
>> > I would like to start a vote for KIP-235
>> >
>> >
>> > https://urldefense.proofpoint.com/v2/url?u=https-3A__cwiki.apache.org_confluence_display_KAFKA_KIP-2D235-253A-2BAdd-2BDNS-2Balias-2Bsupport-2Bfor-2Bsecured-2Bconnection&d=DwIBaQ&c=7563p3e2zaQw0AB1wrFVgyagb2IE5rTZOYPxLxfZlX4&r=nNmJlu1rR_QFAPdxGlafmDu9_r6eaCbPOM0NM1EHo-E&m=FM_uCHnnO2dqxWC0bi7_QOJKfKmQI80-Xduvb-URWOw&s=RpGkijfK-WHcU0s8ZtMXEkIr69QraJhYKaGSC9V_rnI&e=
>> >
>> > This is a proposition to add an option for reverse dns lookup of
>> > bootstrap.servers hosts, allowing the use of dns aliases on clusters using
>> > SASL authentication.
>> >
>> >
>> >
>> >
>>
>> ________________________________
>>
>> Your Personal Data: We may collect and process information about you that 
>> may be subject to data protection laws. For more information about how we 
>> use and disclose your personal data, how we protect your information, our 
>> legal basis to use your information, your rights and who you can contact, 
>> please refer to: 
>> www.gs.com/privacy-notices<http://www.gs.com/privacy-notices>
>
>
>



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

Reply via email to