Re: [RFC][PATCH 0/9] Make containers kernel objects
From: David Howells
Date: Tue May 23 2017 - 12:36:12 EST
James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:
> What David is pointing out is that the kernel has a DNS cache
> (net/dns_resolver/) it can do name to IP translations, but isn't
> namespaced. Once it has one entry all containers would see it if they
> cause a lookup to go through the kernel cache, so going through the
> cache you can't have a name resolving to different IP addresses on a
> per container basis.
Yes - and the transport to userspace, the request_key() upcall, isn't
namespaced either. Namespacing it isn't entirely simple since we have to set
the right mount namespace (for execve, config, etc.), plus any other relevant
namespaces (such as network) - which is dependent on key type.
I can't record the mount namespace in the network namespace because that would
create a dependency loop:
mnt_ns -> mnt -> sb -> net_ns -> mnt_ns
> I think Eric's point is that if you need the same DNS names resolving
> to different IP addresses on a per container basis, you can do this in
> userspace today but you have to disable the in-kernel DNS cache.
You could disable the in-kernel dns resolver in your config, but then you
don't get referrals in NFS. Also, CIFS, AFS and other filesystems would be
affected. If you're fine with the restrictions, then there is no problem.
David