Shell no pod e no nó (node shell)
Shell num container e shell no nó (node shell) para acessar o nó do Kubernetes, do navegador ou do desktop. Os dois são dos planos Pro e Team e só admin abre (no desktop, a partir da 2.7.0); o shell no nó pede que você digite o nome do nó.
O que faz
- Web, pod: abra o pod e escolha o container; o terminal abre no painel inferior, ligado ao exec do Kubernetes.
- Web, nó: no nó, Shell abre um terminal no próprio nó depois que você digita o nome do node para confirmar. Só admin de organização Pro ou Team.
- Desktop, pod: os menus Shell e Attach do pod, do Freelens.
- Desktop, nó: no menu do nó, Shell abre um terminal no próprio nó. No mesmo menu ficam Cordon, Uncordon e Drain, que continuam só no desktop.
Limites e tempos
| Limite | Valor |
|---|---|
| Web: duração de uma sessão (pod ou nó) | 2 horas |
| Web: sessões por pessoa | 3 terminais ao mesmo tempo, somando shell no pod, shell no nó e bastion |
| Web, nó: sessões por pessoa e cluster | 1 |
| Web, nó: espera o pod do shell subir | até 120 s; depois, o pod é apagado |
| Web, nó: confirmação | digitar o nome do node |
| Web: tamanho de cada mensagem do terminal | 64 KB |
| Desktop, nó: espera o pod do shell ficar Running | até 2 minutos |
O que não é aceito
- Web: membro, plano Free, ou conexão vinda de outro site (a origem é conferida).
- Web, nó: nome digitado diferente do nome do node; um segundo shell seu no mesmo cluster; nodes Windows (use o desktop), Fargate e virtual-kubelet.
- Desktop: plano Free (a partir da 2.4.0, os menus aparecem com cadeado e um aviso para assinar; até a 2.3.0, ficam escondidos) e, a partir da 2.7.0, membro de organização Team.
- Shell no nó, na web e no desktop, quando o cluster bloqueia pod privilegiado no kube-system: Pod Security Admission, Azure Policy, Gatekeeper ou Kyverno. Na web, a mensagem de erro explica como liberar no AKS e no EKS.
Como o shell no nó funciona (acessar o nó do Kubernetes)
- Web: o servidor do Kubepier cria, com a credencial do cluster, um pod efêmero kubepier-shell-no-* no kube-system, fixo no node escolhido, com a imagem alpine fixada por digest, privilegiado e sem token de service account. O terminal entra no node com nsenter (no Bottlerocket, pelo apiclient).
- Web: o pod é apagado ao fechar o terminal, em erro, se a conexão cai, se não sobe em 120 s ou ao fim de 2 horas.
- Desktop: o app cria um pod no namespace kube-system, fixo no nó escolhido, com privileged, hostPID, hostIPC e hostNetwork, prioridade system-node-critical e tolerância a qualquer taint.
- Desktop: até a 2.6.0, a imagem padrão é docker.io/library/alpine, sem prazo para o pod; a partir da 2.7.0, alpine:3.24.2 fixada por digest, o pod dura no máximo 2 horas e não recebe token de ServiceAccount, e abrir pede o nome do nó digitado (só admin). Em nós Windows, mcr.microsoft.com/powershell. Dá para trocar a imagem e informar um imagePullSecret nas configurações do cluster.
- Desktop: o terminal entra no pod com kubectl attach. Ao fechar, o pod é apagado.
Auditoria
- Web, pod: cada sessão aberta vai para a auditoria da organização, com quem, quando, cluster, pod, container e se abriu.
- Web, nó: "Abriu shell no node" e "Fechou shell no node", com quem, quando, cluster, node, pod e duração.
- Desktop: cada sessão de shell no pod e no nó vai para o arquivo kubepier-audit.log, na pasta de dados do app, na abertura e no fechamento, com quem, quando, cluster, alvo e a duração. Até a 2.6.0, terminais locais (da sua máquina) não são registrados; a partir da 2.7.0, a abertura e o fechamento do terminal local também vão para o kubepier-audit.log.
- O que é digitado e o que aparece no terminal nunca é gravado.
Permissões necessárias do seu lado
| Função | Permissão do Kubernetes (RBAC) |
|---|---|
| Shell no pod (web e desktop) | create em pods/exec (e get no pod) |
| Attach (desktop) | create em pods/attach |
| Shell no nó (web) | create e delete em pods e create em pods/exec no kube-system; get em nodes; admissão que aceite pod privilegiado no kube-system |
| Shell no nó (desktop) | create, get, list, watch e delete em pods no kube-system; create em pods/attach no kube-system; admissão que aceite pod privilegiado com hostPID, hostIPC e hostNetwork no kube-system |
| Cordon e Uncordon (desktop) | patch em nodes |
| Drain (desktop) | patch em nodes, list em pods e create em pods/eviction |
Erros comuns
- "Too Many Requests" ao abrir o shell na web: você já tem 3 terminais abertos, ou já tem um shell no nó nesse cluster.
- Shell no nó recusado pela admissão (PodSecurity, Azure Policy, Gatekeeper, Kyverno): o cluster bloqueia pod privilegiado no kube-system. Siga a mensagem para liberar no AKS ou no EKS, ou use outro acesso ao nó.
- Shell no nó num node Windows, Fargate ou virtual-kubelet: não é aceito na web; para Windows, use o desktop.
- "Pod creation timed out" no shell do nó (desktop): o pod não ficou Running em 2 minutos: confira se a imagem é baixável no nó e se a admissão aceita pod privilegiado.
- 403: falta o verbo da tabela acima na credencial.