forked from wbwangk/doc
-
Notifications
You must be signed in to change notification settings - Fork 11
利用nginx验证docker插件
王伟兵 edited this page Aug 1, 2016
·
5 revisions
验证环境Ubuntu 14.04.3 LTS,首先在/etc/docker/plugins
建一个文本文件,名为webbauthz.spec,内容是tcp://localhost:8100
docker扫描到这个文件后,会发送localhost:8100/Plugin.Activate
请求来握手,请求的响应决定了插件的类型(本验证返回“authz”,表示授权插件)
标准版的nginx无法返回json值,所以安装了一个echo第三方插件 下面是nginx的配置文件:
server {
listen 8100;
server_name localhost;
location /Plugin.Activate {
echo '{ "Implements": ["authz"]}';
}
location /AuthZPlugin.AuthZReq {
echo '{ "Allow":false,"Msg":"this is a Msg.","Err":"" }';
}
location /AuthZPlugin.AuthZRes {
echo '{ "Allow":true,"Msg":"this is a Msg.","Err":"" }';
}
}
第一个location是前面提到的握手。/AuthZPlugin.AuthZReq
是docker在执行命令前调用,/AuthZPlugin.AuthZRes
是docker在执行命令后调用。这里对于/AuthZPlugin.AuthZReq
直接返回"Allow":false
,这会阻止所有的docker命令执行。
执行 service docker stop
命令来停止原来的docker守护进程,执行
docker daemon --authorization-plugin=webbauthz
来重新启动docker的守护进程。(最新版的docker用dockerd取代了deamon命令,需要执行dockerd --authorization-plugin=webbauthz
。)
另启用一个终端来测试,执行docker ps
,系统提示:
Error response from daemon: authorization denied by plugin webbauthz: this is a Msg.
然后,如果把nginx配置文件/AuthZPlugin.AuthZReq
location下的返回值修改为
echo '{ "Allow":true,"Msg":"this is a Msg.","Err":"" }';
然后再测试docker ps,发现可以正常执行了。