Docker 插件开发
Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2023-10-17
Filed under
—
Categories:
MarkDown
—
Tags:
Tag,
Docker Plugins
Docker 授权插件示例 Access authorization plugin AuthZ& AuthN - Docker Access Authorization Plugin docker container ls
安装 docker
插件
启动 Python
授权插件脚本
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
class DockerAuthHandler(BaseHTTPRequestHandler):
def do_POST(self):
"""
处理 docker 授权请求
"""
content_length = int(self.headers['Content-Length'])
request_body = self.rfile.read(content_length).decode('utf-8')
print(request_body)
if self.path == '/Plugin.Activate':
res = {'Implements': ['authz']}
else:
# 可以增加权限判断
res = {'Allow': True, 'Msg': '', 'Err': ''} # 允许所有的请求
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(res).encode(encoding='utf-8'))
def run_server():
host = '0.0.0.0' # 监听所有网络接口
port = 8080
server_address = (host, port)
httpd = HTTPServer(server_address, DockerAuthHandler)
print(f'Starting HTTP server on {host}:{port}')
try:
httpd.serve_forever()
except KeyboardInterrupt:
print('Stopping HTTP server...')
finally:
httpd.server_close()
if __name__ == "__main__":
run_server()
python3 test.py
在 /etc/docker/plugins
目录下创建插件配置文件
{
"Name": "simple",
"Addr": "http://127.0.0.1:8080/"
}
修改 /lib/systemd/system/docker.service
,添加授权参数 --authorization-plugin=simple
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --authorization-plugin=simple
最后重启 docker
服务
systemctl restart docker
执行 docker
命令,可以看到 docker
daemon
会把请求发到上面的授权中间件进行处理
问题: 使用 docker
命令默认会列出系统所有运行的容器,通过授权查询暂时不能限制访问特定容器资源。
可以使用 label
打标签,然后执行 docker
命令的时候检查标记进行限制
docker run -it --rm --name test-1 --label cases="case" ubuntu
docker run -it --rm --name test-2 --label cases="case" ubuntu
通过标签进行限制
docker ps --filter "label=cases=case"
通过检查标签来进行限制
Comments