Em breve · Beta · Pro e Team

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.

Onde
Web e Desktop (em breve)
Planos
Pro e Team (previsto)
Papel
Só admin instala e revoga (previsto)

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

ItemPrevisto para o beta
Pods de shell por cluster1
Recursos do pod50m/128 Mi pedidos, 500m/512 Mi de limite
Espera até ficar online no tailnetaté 3 minutos
Terminal pelo navegador2 horas por sessão, 3 terminais por pessoa
PlanosPro 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.

Entrar na lista de espera