Download odp - LSA2 - 02 Namespaces

Transcript

Linux Namespaces

Why do we need that?

What namespaces do we have?

UTS namespace

User namespace

PID namespace

IPC namespace

Mount namespace

Network namespace

Kernel configuration?

General Setup -> Namespaces support -> *

CONFIG_NAMESPACES=yCONFIG_UTS_NS=yCONFIG_IPC_NS=yCONFIG_USER_NS=yCONFIG_PID_NS=yCONFIG_NET_NS=y

Software implementation

#include int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ... /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ ); clone() creates a new process...CLONE_NEWUTSCLONE_NEWIPCCLONE_NEWNETCLONE_NEWPIDCLONE_NEWNSCLONE_NEWUSER

Software implementation

#include int setns(int fd, int nstype); Given a file descriptor referring to a namespace, reassociate the calling thread with that namespace.

Supports:
CLONE_NEWIPC CLONE_NEWNET CLONE_NEWUTS

UTS namespace

The server is installed in Chicago.Timezone: North America -> US -> ChicagoApp requires timezone: Europe -> London

If the app can not handle the timezone change by its own... we have three choices:1. Create a chrooted environment with different default timezone2. Create a virtual machine and put the app there3. Create a new UTS namespace and start the app in it

User namespace

User authentication and mapping files:/etc/passwd

/etc/group

/etc/shadow

- What if we want to create a username called pesho, but such user already exists?
- What if we want to create user joan with UID 1005, but there is already user pesho with UID 1005?

IPC namespace

Unix/Linux IPCs- unix domain sockets- shared memory- semaphores- message queues/proc/PID/fd/ |- 3 -> socket:[3537]

IPC namespace

Unix/Linux IPCs- unix domain sockets- shared memory- semaphores- message queues

key shmid owner perms bytes nattch 0x0052e2c1 1139834880 postgres 600 37879808 4

Network namespace

- IP - IPv6- Routing- TCP- UDP- SCTP- DCCP- RDS

Having separate

loopback device for a processOr simply test the MySQL

server on the same IPCompletely different routing

for a process

Mount namespace

the most complex one...having only one / is a problem...

- at around 22000 mounts everything on your machine starts to lag... no matter how many cores or ram you have :(

- having a different /proc/mounts per process would be nice and very interesting to implement... :)

PID namespace

Migration of processes between machines (CRIU)It allows you to have a two or more processes running with the same PID.PID- is the PID on the host machineNSPID- is the PID that the process sees PIDNSPID 1421 5420ssh-agent 1730 5420xchat 1756 5420firefox