Shell remoto via Tailscale (beta)
Como vai funcionar o Shell remoto via Tailscale: um pod de shell no seu cluster, ligado ao seu tailnet, que você abre do celular (iOS e Android), do Linux, do Windows, do macOS ou do navegador. A função ainda não está disponível; os passos abaixo valem para o beta e podem mudar até a liberação.
Em breve: beta por lista de espera
Em breve: o Shell remoto via Tailscale está em desenvolvimento e vai abrir primeiro como beta fechado, por lista de espera. O que está aqui descreve como ele vai funcionar e pode mudar até a liberação. Hoje, para shell, use o Shell no pod e no nó e o Bastion.
Como funciona
- No cluster: o Deployment kubepier-shell (1 réplica) no namespace kubepier-shell, com o Tailscale em modo userspace e o Tailscale SSH ligado. Sem privilégio, sem hostNetwork, perfil PodSecurity restricted.
- No seu tailnet: o pod aparece como uma máquina tagueada (tag:kubepier-shell), com nome kp-<cliente>-<cluster> no MagicDNS.
- No seu dispositivo: o app do Tailscale conectado ao mesmo tailnet e um cliente SSH. Não há chave SSH: o Tailscale SSH autentica pela identidade do Tailscale e pela ACL.
- O Kubepier instala, mostra o estado (online, versão, perfil de RBAC), gera os comandos de conexão e revoga. Ele não fica no meio da sessão SSH.
Antes de começar
- Organização no Pro ou no Team, e você com papel de admin.
- Um tailnet Tailscale seu e acesso de admin ao admin console do Tailscale. No plano Personal (gratuito), o Tailscale SSH vale para até 5 hosts (5 clusters com o shell).
- O cluster precisa sair para a internet na porta 443 (servidores de coordenação e relays DERP do Tailscale). Se a saída passa por firewall, libere os domínios do Tailscale; UDP 41641 é opcional e melhora a latência.
- A credencial do cluster no Kubepier precisa criar namespace, Deployment, Secret, ServiceAccount, Role e RoleBinding (ou ClusterRoleBinding, conforme o perfil de RBAC). Sem essa permissão, o assistente oferece o YAML para você aplicar com o kubectl.
1. Prepare o seu tailnet
No admin console do Tailscale, em Access controls, acrescente a tag, o grupo de quem pode entrar e as regras de rede e de SSH. Exemplo:
{
"tagOwners": {
// Só os admins do seu tailnet podem criar máquinas com esta tag.
"tag:kubepier-shell": ["autogroup:admin"]
},
"groups": {
// Quem pode abrir o shell (e-mails do SEU tailnet).
"group:kubepier-shell": ["voce@suaempresa.com.br"]
},
"grants": [
// Só a porta 22 (Tailscale SSH) do pod, só para o grupo.
{ "src": ["group:kubepier-shell"], "dst": ["tag:kubepier-shell"], "ip": ["tcp:22"] }
],
"ssh": [
{
// "check" pede um novo login no Tailscale a cada 12 horas.
"action": "check",
"checkPeriod": "12h",
"src": ["group:kubepier-shell"],
"dst": ["tag:kubepier-shell"],
"users": ["kubepier"]
}
]
} Com "check", o Tailscale pede um novo login no navegador quando passa o checkPeriod. Use "accept" para não pedir. O usuário "kubepier" é o usuário sem root dentro do pod.
Depois, em Settings › Keys, gere uma auth key de uso único (não reutilizável), pré-aprovada e com a tag tag:kubepier-shell, com validade curta (1 dia basta). Na fase seguinte do beta, o Kubepier poderá gerar essa chave sozinho com um OAuth client do seu tailnet.
2. Instale no cluster pelo Kubepier
- Abra Shell, no menu lateral (web ou desktop), e escolha o cluster.
- Cole a auth key. Ela vai direto para um Secret no seu cluster e não é guardada no Kubepier.
- Escolha o perfil de RBAC: só leitura (view), operação em namespaces escolhidos, admin do cluster ou sem acesso à API (só rede). Admin do cluster pede que você digite o nome do cluster para confirmar.
- Confira o resumo (namespace, imagem, perfil, nome no tailnet) e clique em Instalar. A tela mostra cada etapa até a máquina aparecer online no tailnet.
- Sem permissão para aplicar pelo Kubepier, ou com o cluster fora do alcance da web: use Baixar YAML e aplique com kubectl apply -f.
3a. Conectar do iPhone ou iPad (iOS)
- Instale o app Tailscale da App Store e entre com a conta do seu tailnet. Ative a VPN do Tailscale quando o iOS pedir.
- Instale um cliente SSH: Termius, Blink Shell ou outro de sua preferência.
- Crie um host com o endereço kp-<cliente>-<cluster>.<seu-tailnet>.ts.net (ou o IP 100.x mostrado no app do Tailscale), porta 22, usuário kubepier, sem senha e sem chave.
- Conecte. Se a regra for "check" e o login tiver vencido, o terminal mostra um link: abra, entre no Tailscale e a sessão continua.
- Na tela Shell do Kubepier, Conectar pelo celular vai mostrar um QR code com esse endereço para não digitar.
- Alternativa sem cliente SSH: o SSH console do admin console do Tailscale (Machines › SSH to machine), em beta e só para admins do tailnet.
3b. Conectar do Android
- Instale o app Tailscale do Google Play e entre com a conta do seu tailnet. Aceite a VPN do Tailscale.
- Instale um cliente SSH: Termius, JuiceSSH ou ConnectBot.
- Crie a conexão para kubepier@kp-<cliente>-<cluster>.<seu-tailnet>.ts.net, porta 22, sem senha e sem chave.
- Conecte. Com regra "check", abra o link de login que aparece no terminal.
- Se o nome não resolver, ative o MagicDNS no admin console do Tailscale (DNS) ou use o IP 100.x da máquina.
3c. Conectar do Linux
# Instalar o Tailscale (Debian, Ubuntu, Fedora, RHEL, Arch...)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Ver o pod do Kubepier no seu tailnet
tailscale status | grep kubepier
# Abrir o shell (o nome aparece na tela Shell do Kubepier)
tailscale ssh kubepier@kp-<cliente>-<cluster>
# ou com o ssh do sistema, pelo nome do MagicDNS
ssh kubepier@kp-<cliente>-<cluster>.<seu-tailnet>.ts.net O tailscale ssh usa o ssh do sistema por baixo e não precisa de chave. A tela Shell do Kubepier Desktop tem o botão Abrir no terminal, que roda o mesmo comando.
3d. Conectar do macOS
# Com o app do Tailscale aberto e conectado (barra de menus):
ssh kubepier@kp-<cliente>-<cluster>.<seu-tailnet>.ts.net
# Só na versão standalone ou no CLI do Homebrew (não na App Store):
tailscale ssh kubepier@kp-<cliente>-<cluster> - Instale o Tailscale (App Store ou o pacote standalone do site do Tailscale) e conecte pela barra de menus.
- Abra o Terminal e use o ssh do sistema. O comando tailscale ssh só existe na versão standalone ou no CLI de código aberto (Homebrew); na versão da App Store, use ssh.
3e. Conectar do Windows
# PowerShell ou Windows Terminal, com o Tailscale conectado (ícone da bandeja)
ssh kubepier@kp-<cliente>-<cluster>.<seu-tailnet>.ts.net
# ou com o CLI do Tailscale
tailscale ssh kubepier@kp-<cliente>-<cluster>
# O cliente OpenSSH já vem no Windows 10 e 11. Se o comando ssh não existir:
# Configurações › Sistema › Recursos opcionais › Cliente OpenSSH - Instale o Tailscale para Windows, entre com a conta do seu tailnet e confira o ícone conectado na bandeja.
- Abra o PowerShell ou o Windows Terminal:
Também dá para usar PuTTY, Termius ou o terminal do Kubepier Desktop com o mesmo endereço, usuário kubepier e sem chave.
3f. Conectar pelo navegador (opcional)
- No Kubepier Web, na tela Shell, Abrir no navegador abre um terminal no mesmo pod pela API do Kubernetes, sem passar pelo Tailscale.
- Vale o mesmo que o shell no pod de hoje: só admin, conta no limite de 3 terminais por pessoa, até 2 horas por sessão e auditado.
4. Usar o shell
# Dentro do shell (perfil do RBAC escolhido na instalação)
kubectl get pods -A
kubectl -n <namespace> logs deploy/<app> --tail=100
kubectl -n <namespace> rollout restart deploy/<app>
k9s
# Rede do cluster, como no Bastion
nc -vz db.interno 5432
curl -v http://servico.interno:8080/health O que o kubectl consegue fazer depende do perfil de RBAC escolhido na instalação. Para trocar, use Trocar perfil na tela Shell.
5. Revogar e desinstalar
- Tirar o acesso de uma pessoa: remova-a do grupo na ACL do seu tailnet. Vale na hora para novas conexões.
- Tirar o acesso de todos a um cluster: na tela Shell, Revogar. O Kubepier apaga o Deployment e os Secrets; remova a máquina em Machines no admin console do Tailscale (na fase com OAuth client, o Kubepier remove sozinho).
- Desinstalar apaga o namespace kubepier-shell e os bindings de RBAC criados pelo assistente, depois de você digitar o nome do cluster.
- Emergência: kubectl delete namespace kubepier-shell desliga tudo, mesmo sem o Kubepier.
Segurança
- Sem portas públicas: o pod só abre conexões de saída para o Tailscale.
- A auth key é sua, de uso único e tagueada; depois do primeiro login, o pod guarda o estado num Secret do namespace e a chave não serve mais.
- A ACL do seu tailnet decide quem entra; o Kubepier não cria usuários no seu Tailscale.
- Gravação de sessões: o Kubepier não grava o que é digitado. A gravação de sessões pelo próprio Tailscale (tsrecorder) foi descontinuada para novos usuários; se a sua empresa exige gravação, fale com a gente na lista de espera.
- Auditoria do Kubepier: instalar, trocar perfil, revogar, desinstalar e abrir pelo navegador, com quem, quando, cluster e perfil.
Limites previstos
| Item | Previsto para o beta |
|---|---|
| Pods de shell por cluster | 1 |
| Recursos do pod | 50m/128 Mi pedidos, 500m/512 Mi de limite |
| Espera até ficar online no tailnet | até 3 minutos |
| Terminal pelo navegador | 2 horas por sessão, 3 terminais por pessoa |
| Planos | Pro e Team; Free vê o menu com cadeado |
Números do beta, sujeitos a mudança até a liberação.
Erros comuns (previstos)
- O pod não aparece no tailnet: a auth key venceu, já foi usada ou não tem a tag; gere outra e use Trocar chave.
- "tailnet policy does not permit you to SSH": falta o seu usuário no grupo da regra ssh ou o usuário kubepier em "users".
- O nome não resolve no celular: ative o MagicDNS ou use o IP 100.x.
- Conexão lenta: sem UDP de saída, o tráfego passa pelos relays DERP do Tailscale; libere UDP 41641 se puder.
- Forbidden no kubectl: o perfil de RBAC escolhido não dá esse verbo; troque o perfil.