[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [atomic-devel] Kubeadm vs. SELinux
- From: Daniel J Walsh <dwalsh redhat com>
- To: Devan Goodwin <dgoodwin redhat com>
- Cc: atomic-devel <atomic-devel projectatomic io>
- Subject: Re: [atomic-devel] Kubeadm vs. SELinux
- Date: Wed, 23 Nov 2016 10:49:25 -0500
On 11/23/2016 10:46 AM, Daniel J Walsh wrote:
>
> On 11/23/2016 10:33 AM, Devan Goodwin wrote:
>> On Wed, Nov 23, 2016 at 9:44 AM, Daniel J Walsh <dwalsh redhat com> wrote:
>>> On 11/22/2016 07:37 PM, Jason Brooks wrote:
>>>> On Tue, Nov 22, 2016 at 4:26 PM, Josh Berkus <jberkus redhat com> wrote:
>>>>> On 11/22/2016 03:27 PM, Clayton Coleman wrote:
>>>>>> Copying Devan as well since he's been working with kubeadm for a while.
>>>>>>
>>>>>>> On Nov 22, 2016, at 5:25 PM, Jason Brooks <jbrooks redhat com> wrote:
>>>>>>>
>>>>>>>> On Tue, Nov 22, 2016 at 2:38 PM, Daniel J Walsh <dwalsh redhat com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>> On 11/22/2016 05:15 PM, Josh Berkus wrote:
>>>>>>>>> Currently, it is not possible to run Kubeadm with SELinux enabled.
>>>>>>>>>
>>>>>>>>> This is bad; it means that Kubernetes' official installation
>>>>>>>>> instructions include `setenforce 0`. But it's hard to argue the point
>>>>>>>>> when a kubeadm install -- soon to be the main install option for
>>>>>>>>> Kubernetes, and the only one which currently works on Atomic -- simply
>>>>>>>>> doesn't work with SELinux enabled.
>>>>>>>>>
>>>>>>>>> The current blocker is that kubeadm init will hang forever at this stage:
>>>>>>>>>
>>>>>>>>> <master/apiclient> created API client, waiting for the control plane to
>>>>>>>>> become ready
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The errors shown in the journal are here:
>>>>>>>>>
>>>>>>>>> https://gist.github.com/jberkus/4e926c76fbf772ffee4eb774cb0a4c60
>>>>>>>>>
>>>>>>>>> That's on Fedora 25 Atomic. I've had the exact same experience on
>>>>>>>>> CentOS 7 and RHEL 7, although the error messages are not identical.
>>>>>>>>>
>>>>>>>>> Seems like this is on us to fix, if we want people to keep SELinux
>>>>>>>>> enforcing. I don;t know if we need to push patches to Kubeadm, or to
>>>>>>>>> SELinux, or both.
>>>>>>>>>
>>>>>>>> What AVC's are you seeing? Where is the bugzilla for this?
>>>>>>>>
>>>>>>>> ausearch -m avc -ts recent
>>>>>>> https://paste.fedoraproject.org/488671/79856867/
>>>>>>>
>>>>>>> This is from a kubeadm that's packaged up in a copr:
>>>>>>> https://copr.fedorainfracloud.org/coprs/jasonbrooks/kube-release/
>>>>>>>
>>>>>>> The kubernetes project provides rpms for centos and ubuntu, and there
>>>>>>> are a few things about the way they pkg it that conflict w/ atomic.
>>>>>>> Some more info at
>>>>>>> https://jebpages.com/2016/11/01/installing-kubernetes-on-centos-atomic-host-with-kubeadm/.
>>>>>>>
>>>>> In addition to this, please note that setenforce 0 is not required on
>>>>> the workers nodes, just on the master. The kubelet nodes work fine with
>>>>> just relabeling the /var/lib/kubelet directory.
>>>>>
>>>>> It would be really nice if we could somehow do that relabeling as part
>>>>> of the installation package, but I don't see how; it would need to be a
>>>>> patch/fork on kubeadm instead.
>>>> The problem containers are etcd and kube-discovery, they're set to
>>>> type unconfined_t to work around selinux, but I believe the correct
>>>> type is spc_t. Changing to spc_t allows the install to continue w/o
>>>> disabling selinux.
>>>>
>>>> I sent a PR to change this: https://github.com/kubernetes/kubernetes/pull/37327
>>> Correct although it would be nice to get new types for these containers
>>> perhaps
>>> we could build policy for each one that is not unconfined but still
>>> allow other processes
>>> to communicate with them. etcd_t, probbaly needs very limited access on
>>> a host system
>>> and I have no idea what kube-discovery does.
>> Kube-disocvery is the key piece that lets you run a very short kubeadm
>> join command, it's just a simple pod that offers up signed data
>> containing a list of api servers, and the CA cert to talk to them.
>> It's a temporary solution for kubeadm alpha and is disappearing
>> entirely, replaced by config maps in core k8s.
>>
>> We unconfined it in the rush for alpha to avoid shipping instructions
>> that involved setenforce 0. It couldn't read secrets by default,
>> though this is fixed in 1.5 with pmorie's work I believe.
>>
>> etcd container just needs access to /var/lib/etcd, suggestions on most
>> correct way to handle this would be very welcome.
> etcd could probably run with a standard container, but have
> /var/lib/etcd mounted in with the equivalent of
>
> docker run -v /var/lib/etcd:/var/lib/etcd:Z
>
> As long as everyone else talks to it via the network SELinux confinement
> should work fine.
>
>
Sounds like we should just ignore kube-discovery and run it as spc_t for
now until it disappears.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]