Jupyterhub On K8s使用mysql進行身份認證

JupyterHub Authentication

Jupyerhub初始的auth type是dummy, 就是個僞認證,輸任意密碼就能登錄(可以通過修改config.yaml的auth:dummy:password改掉),此外還支持OAuth2、LDAP的方式,可以通過GitHub、google、CILogon等賬號認證,這些配置方式在官方文檔介紹的還蠻詳細的。基於常見數據庫進行身份驗證的官方資料沒找到,網上找了一些博客,寫了個mysql賬號密碼認證的模塊加到鏡像裏去。

mysqauthenticator包

寫一個mysqlauthenticator的py包,大致功能就是連接數據庫驗證賬號密碼的常規操作。具體代碼

class MysqlAuthenticator(Authenticator):

	"""JupyterHub Authenticator Based on Mysql"""

	def __init__(self, **kwargs):
		super(MysqlAuthenticator, self).__init__(**kwargs)

	@gen.coroutine
	def authenticate(self, handler, data):

		db_url = "mysql+mysqlconnector://root:[email protected]:3306/jupyter"
		session = init(db_url)

		username = data['username']
		passwd = data['password']

		try:
			user = session.query(User).filter(User.username == username).filter(User.password == passwd).one()
			if user is not None:
				return user.username
			else:
				return None
		except:
			return None

還要建一個mysql的服務,我直接開了個docker,建jupyter數據庫,建user表,id username password三個字段。插入一些測試數據。

製作新的鏡像

原來的Dockerfile我還沒研究,就直接在原有的容器里加入新的內容,然後再commit成新的鏡像。

# 首先啓動jupyterhub服務
# 在k8s-hub容器運行的節點,進入容器先安裝一些依賴的模塊
docker exec -it 6db8b54b25b8 bash
# 安裝wheel、sqlalchemy、mysql-connector
pip3 install wheel
pip3 install sqlalchemy
pip3 install mysql-connector

# 退出容器,把mysqlauthenticator包拷貝到pip3的下載目錄
# 注意路徑,要不然import不進去。在容器裏是/home/jovyan/.local/lib/python3.6/site-packages/
docker cp /root/myspace/workspace/jupyter/jupter_auth_mysql/mysqlauthenticator 6db8b54b25b8:/home/jovyan/.local/lib/python3.6/site-packages/

# 打tag 這裏我傳到自己搭建的docker倉庫裏去,方便其他機子pull
docker tag 6db8b54b25b8 192.168.199.182:5000/jupyterhub/k8s-hub:v0.1.0
# push
docker push 192.168.199.182:5000/jupyterhub/k8s-hub:v0.1.0

修改config.yaml

首先把hub的鏡像改掉

hub:
  image:
    name: 192.168.199.182:5000/jupyterhub/k8s-hub
    tag: v0.1.0

然後改掉auth, 一處是改auth:type爲custom,然後配置custom的class,這樣源碼裏就會import上面的mysqlauthenticator.MysqlAuthenticator這個類。我還配了一個admin權限的user,這個admin user的控制面板會有一個簡單的管理頁面。

auth:
  type: custom
  custom: 
    className: mysqlauthenticator.MysqlAuthenticator
  whitelist:
    users:
  admin:
    access: true
    users:
      - wenxinax

然後重啓一下jupyterhub服務就行了。輸入的賬號密碼沒有通過數據庫驗證的話提示 Invalid username or password 就算成功了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章