Skip to content

利用nginx验证docker插件

王伟兵 edited this page Aug 1, 2016 · 5 revisions

docker插件发现

验证环境Ubuntu 14.04.3 LTS,首先在/etc/docker/plugins建一个文本文件,名为webbauthz.spec,内容是tcp://localhost:8100 docker扫描到这个文件后,会发送localhost:8100/Plugin.Activate请求来握手,请求的响应决定了插件的类型(本验证返回“authz”,表示授权插件)

docker官方插件说明

nginx的安装与配置

标准版的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.AuthZReqlocation下的返回值修改为

 echo '{ "Allow":true,"Msg":"this is a Msg.","Err":"" }';

然后再测试docker ps,发现可以正常执行了。