容器化部署的鉴权问题

一、现有的鉴权方案(裸机)

通过获取MAC和ip来做鉴权

二、容器化部署的方案

  1. 在宿主机上跑一个鉴权程序,容器内程序rpc形式连接到宿主机程序做鉴权;
    在物理机上起一个license server,该server需要加自己本身的鉴权,只能在这台物理机上使用;所有需要获取起服务权限的服务(client)连接到这台server;server通过控制服务副本数(比如只部署了一台semansearch,那鉴权只给一台有权限)和来源(服务收集本机容器的ip)来鉴权;服务启动时和启动后每隔1小时的时间里会向RPC Server发送数据,获得当前是否可运行的回复
    风险点:k8s部署的集群只要cidr使用相同的范围,容器内ip范围就一致,这时候就只剩下控制服务副本数这个功能去做鉴权了
  2. k8s使用宿主机网络的解决方案;
    容器使用主机网络,可以获取主机MAC地址
    问题:采用宿主机的网络方案,如果换网络方案的话会有问题,无法充分利用容器化部署的优势;
  3. 挂载宿主机的/var/log/dmesg到容器内,容器内读取其内容(只有MAC地址没有网卡名)
  4. 设置环境变量进容器内,鉴权的时候读取环境变量 docker run -e HOST_MAC=$(ifconfig -a | grep -Po ‘ether \K.*$’) image
comments powered by Disqus