Пространства имен linux (linux namespaces)

21
1 Введение в Linux namespaces Kirill Krinkin, March, 2015

Upload: kirill-krinkin

Post on 15-Jul-2015

248 views

Category:

Software


9 download

TRANSCRIPT

Page 1: Пространства имен Linux (linux namespaces)

1

Введение в Linux namespaces

Kirill Krinkin, March, 2015

Page 2: Пространства имен Linux (linux namespaces)

2

Namespace vs CGroups

● Namespace – механизм изоляции и группировки структур данных ядра.

● Control groups – механизм изоляции ресурсов ядра

Page 3: Пространства имен Linux (linux namespaces)

3

Представление процесса в linux

include/linux/sched.h, include/linux/nsproxy.h

http://lxr.free-electrons.com/source/include/linux/sched.h#L1273http://lxr.free-electrons.com/source/include/linux/nsproxy.h#L29

Page 4: Пространства имен Linux (linux namespaces)

4

API

● clone()● unshare()● setns()

Page 5: Пространства имен Linux (linux namespaces)

5

clone / unshare

VS.

Page 6: Пространства имен Linux (linux namespaces)

6

Namespaces

● Mount (_NEWNS)● UTS (_NEWUTS)● IPC (_NEWIPC)● PID (_NEWPID)● user (_NEWUSER)

Page 7: Пространства имен Linux (linux namespaces)

7

Mount namespace

● mount namespace – копия дерева файловой системы, ассоциированная с процессом

● Создание:

● Опции:– распространение событий монтирования

– запрет перемонтирования

Page 8: Пространства имен Linux (linux namespaces)

8

Флаги mount

– bind – смонтировать существующее дерево в другую точку (поддерево будет доступно в обоих местах)

Распространение изменений:

–make-shared

–make-slave

–make-private

–make-unbindable

Подробнее: Documentation/filesystems/sharedsubtree.txt

Page 9: Пространства имен Linux (linux namespaces)

9

Пример: приватное монтирование

Page 10: Пространства имен Linux (linux namespaces)

10

UTS namespace

● Изоляция имени хоста и доменного имени● utsname

● Создание:

Page 11: Пространства имен Linux (linux namespaces)

11

Пример: создание UTS

см: namespaces/demo_uts_namespaces.c

Page 12: Пространства имен Linux (linux namespaces)

12

Удержание пространства имен

#touch ./uts

#mount —bind /proc/6221/ns/uts ./uts

см: namespaces/ns_exec.c

# hostname

– thinkpad

#./ns_exec ./uts hostname

– newhostname

Page 13: Пространства имен Linux (linux namespaces)

13

PID namespace

● Назначение: изоляция идентификаторов процессов● Создание

● Возможности:– миграция контейнеров с сохранением PIDs

– имитация init-процесса

– могут быть вложенными

Page 14: Пространства имен Linux (linux namespaces)

14

Иерархия PIDNS

31

2

4

31 2

12

0

родительпотомок

Page 15: Пространства имен Linux (linux namespaces)

15

PIDs & TGIDs

Page 16: Пространства имен Linux (linux namespaces)

16

Пример: PID namespace

● см: pidns_init_sleep.c

Page 17: Пространства имен Linux (linux namespaces)

17

IPC namespace

● Изоляция ресурсов IPC (System V IPC) – очередей сообщений, разделяемая память...

● Создание:

Page 18: Пространства имен Linux (linux namespaces)

18

USER namespace

● Изоляция идентификаторов пользователей и групп● Создание:

● Возможности:– Предоставление привилегированных операций

непривилегированному пользователю внутри пространства имен

– Отображение пользователей и групп

● /proc/sys/kernel/overflowuid

Page 19: Пространства имен Linux (linux namespaces)

19

Пример: user namespace

● см: demo_userns.c

./demo_userns

Page 20: Пространства имен Linux (linux namespaces)

20

Network namespace

● Изоляция сетевой конфигурации, интерфейсов, правил марштуризации

● Создание:

Примеры (через ip):– ip netns add netns1

– ip netns exec netns1 ip link list

– ip netns delete netns1

– ip netns exec netns1 ip link set dev lo up

– ip netns exec netns1 ping 127.0.0.1

Page 21: Пространства имен Linux (linux namespaces)

21

Для чтения

● http://www.ibm.com/developerworks/library/l-mount-namespaces/

● http://lwn.net/Articles/531114/