Jul*_*ie 4 linux docker kubernetes kubectl
我有一个关于能力的问题。
为什么我的程序在运行时工作docker run --cap-add=NET_ADMIN ...?
如果我使用文件 .yml 运行我的程序,它就不起作用:
containers:
- name: snake
image: docker.io/kelysa/snake:lastest
imagePullPolicy: Always
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN","NET_RAW"]
Run Code Online (Sandbox Code Playgroud)
使用 --cap-add 运行 docker 和运行具有相同功能的 pod 有什么区别?
Mar*_*ark 10
正如David Maze和根据 docker docs 所述:运行时权限和 Linux 功能
默认情况下,Docker 容器是“无特权的”,例如,不能在 Docker 容器内运行 Docker 守护程序。这是因为默认情况下不允许容器访问任何设备,但“特权”容器可以访问所有设备(请参阅有关 cgroups 设备的文档)。
Run Code Online (Sandbox Code Playgroud)--cap-add: Add Linux capabilities, --cap-drop: Drop Linux capabilities, --privileged=false: Give extended privileges to this container --device=[]: Allows you to run devices inside the container without the --privileged flag.当操作符执行时
docker run --privileged,Docker 将启用对主机上所有设备的访问,并在 AppArmor 或 SELinux 中设置一些配置,以允许容器对主机的访问几乎与在主机上容器外运行的进程相同。除了 --privileged 之外,操作员还可以使用 --cap-add 和 --cap-drop 对功能进行细粒度控制。
您可以找到两种功能:
此命令docker run --cap-add=NET_ADMIN将应用额外的 linux 功能。
根据文档:
为了与网络堆栈交互,而不是使用 --privileged 他们应该使用 --cap-add=NET_ADMIN 来修改网络接口。
注意:
为了减少系统调用攻击,最好只为容器提供所需的权限。另请参阅启用 Pod 安全策略。
从容器可以通过使用来实现:
securityContext:
capabilities:
drop: ["all"]
add: ["NET_BIND"]
Run Code Online (Sandbox Code Playgroud)
要查看容器内的应用能力,您可以使用:
getpcaps process_id or $(pgrep your-proces_name)列出和探索您使用的 linux 能力capsh --print
资源:
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
24967 次 |
| 最近记录: |