Linux --cap add=NET_ADMIN和.yml中的add功能之间的区别
我有一个关于能力的问题 当我运行docker run--cap add=NET\u ADMIN…时,为什么我的程序可以工作 如果我用文件.yml运行我的程序,它是不起作用的,它是:Linux --cap add=NET_ADMIN和.yml中的add功能之间的区别,linux,docker,kubernetes,kubectl,Linux,Docker,Kubernetes,Kubectl,我有一个关于能力的问题 当我运行docker run--cap add=NET\u ADMIN…时,为什么我的程序可以工作 如果我用文件.yml运行我的程序,它是不起作用的,它是: containers: - name: snake image: docker.io/kelysa/snake:lastest imagePullPolicy: Always securityContext: privileg
containers:
- name: snake
image: docker.io/kelysa/snake:lastest
imagePullPolicy: Always
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN","NET_RAW"]
使用--cap add运行docker和使用相同功能运行pod之间有什么区别 如码头工人所述
默认情况下,Docker容器是“非特权”的,例如,不能在Docker容器内运行Docker守护程序。这是因为默认情况下,不允许容器访问任何设备,但允许“特权”容器访问所有设备(请参阅关于cgroups设备的文档)
当操作员执行docker run--privileged
时,docker将启用对主机上所有设备的访问,并在AppArmor或SELinux中设置一些配置,以允许容器几乎与主机上容器外部运行的进程一样访问主机
除了--privileged之外,操作员还可以使用--cap add和--cap drop对功能进行细粒度控制
您可以找到两种功能:
- 具有保留的默认功能列表的Docker
- 默认情况下未授予且可添加的功能
docker run--cap add=NET\u ADMIN
将应用额外的linux功能
根据文件:
为了与网络堆栈交互,他们应该使用--cap add=NET_ADMIN来修改网络接口,而不是使用--privileged
注意:
为了减少系统调用攻击,最好只授予容器所需的权限。另请参阅
从容器中,可通过以下方式实现:
securityContext:
capabilities:
drop: ["all"]
add: ["NET_BIND"]
要查看容器内应用的容量,可以使用:
getpcaps process\u id或$(pgrep your-proces\u name)
列出并探索您使用的linux功能capsh--print
资源:
- ,
- ,
希望这能有所帮助。什么叫“不起作用”?通常Docker和Kubernetes都为您管理网络环境,需要这种功能是非常不寻常的;这表明该工具在非Docker环境中运行可能更好。您是否找到了导致此问题的原因?这并没有突出两者之间的区别。
securityContext:
capabilities:
drop: ["all"]
add: ["NET_BIND"]