Segurança — JupyterLab
O chart tdp-jupyter usa por omissão autenticação DummyAuthenticator (utilizador e palavra-passe definidos nos valores) e permite LDAP opcional via ldapauthenticator.LDAPAuthenticator.
Autenticação por omissão
tdp-jupyter:
hub:
config:
JupyterHub:
authenticator_class: dummy
DummyAuthenticator:
username: admin
password: tdp-password
Adequado apenas para desenvolvimento. Altere a palavra-passe ou o método de autenticação em produção.
LDAP
A autenticação LDAP é opcional. Para a activar, crie o Secret com a palavra-passe de bind e aplique a configuração de overlay.
Credenciais e Secrets
kubectl create secret generic tdp-jupyter-ldap-bind \
--from-literal=LDAP_BIND_PASSWORD='<LDAP_BIND_PASSWORD>' \
-n <NAMESPACE>
Configuração LDAP
tdp-jupyter:
hub:
config:
JupyterHub:
authenticator_class: ldapauthenticator.LDAPAuthenticator
LDAPAuthenticator:
server_address: "<LDAP_HOST>"
server_port: 389
tls_strategy: "insecure"
user_attribute: "uid"
bind_dn_template:
- "uid={username},cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=<TLD>"
extraConfig:
ldap-config: |
c.Authenticator.allow_all = True
O bloco allow_all é opcional e serve para facilitar testes. Em produção, restrinja o acesso com allowed_groups ou listas de utilizadores suportados pelo LDAPAuthenticator da sua versão do JupyterHub (consulte a documentação oficial).
Parâmetros
| Parâmetro | Descrição |
|---|---|
LDAPAuthenticator.server_address | Endereço do servidor LDAP |
LDAPAuthenticator.server_port | Porta do servidor LDAP |
tls_strategy | Modo TLS (ex.: insecure para desenvolvimento) |
bind_dn_template | Template do DN do utilizador |
user_attribute | Atributo de login (ex.: uid) |
Ingress (Workers Spark → driver)
Em modo de cluster distribuído, o driver Spark corre dentro do pod do notebook — são os Workers que precisam abrir ligação de volta para ele, não o contrário.
Por isso é necessário permitir ingress dos pods Worker nas portas do driver (2222) e do block manager (7777) do notebook, para que os Workers consigam entregar os resultados ao driver:
tdp-jupyter:
singleuser:
networkPolicy:
enabled: true
# Permite que os Workers Spark se liguem de volta ao driver do notebook
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/component: worker
app.kubernetes.io/instance: tdp-spark
app.kubernetes.io/name: spark
ports:
- protocol: TCP
port: 2222 # spark.driver.port
- protocol: TCP
port: 7777 # spark.blockManager.port
Sem esta regra de ingress, os Workers entram em timeout ao tentar alcançar o driver e a aplicação Spark falha com Connecting to /<pod-ip>:2222 timed out.
Solução de problemas
| Problema | Solução |
|---|---|
| Falha de autenticação LDAP | Verifique bind_dn_template, conectividade e atributos do servidor LDAP |
| Hub não inicia | Valide a sintaxe de extraConfig e o YAML |
| Falha de conexão Spark/S3/Trino a partir do notebook | Verifique singleuser.networkPolicy.egress — o tráfego pode estar a ser bloqueado |
Workers não conseguem alcançar o driver (Connecting to /<ip>:2222 timed out) | A NetworkPolicy do pod single-user está a bloquear o ingress dos pods Worker do Spark. Adicione a regra de ingress da secção Ingress (Workers Spark → driver) e actualize o release |