ProHoster > Blog > administração > Como abrir um túnel em um pod ou contêiner do Kubernetes com tcpserver e netcat
Como abrir um túnel em um pod ou contêiner do Kubernetes com tcpserver e netcat
Observação. trad.: Esta nota prática do criador do LayerCI é uma excelente ilustração das chamadas dicas e truques para Kubernetes (e muito mais). A solução aqui proposta é apenas uma das poucas e, talvez, não a mais óbvia (para alguns casos, a “nativa” para K8s já mencionada nos comentários pode ser adequada kubectl port-forward). No entanto, permite pelo menos olhar para o problema da perspectiva do uso de utilitários clássicos e combiná-los ainda mais - ao mesmo tempo simples, flexíveis e poderosos (veja “outras ideias” no final para inspiração).
Imagine uma situação típica: você deseja que uma porta em sua máquina local encaminhe magicamente o tráfego para um pod/contêiner (ou vice-versa).
Possíveis casos de uso
Verifique o que o endpoint HTTP retorna /healthz pod no cluster de produção.
Conecte um depurador TCP ao pod na máquina local.
Obtenha acesso ao banco de dados de produção a partir de ferramentas de banco de dados locais sem precisar se preocupar com autenticação (geralmente localhost tem direitos de root).
Execute um script de migração único para dados em um cluster de preparo sem precisar criar um contêiner para ele.
Conecte uma sessão VNC a um pod executando um desktop virtual (consulte XVFB).
Algumas palavras sobre as ferramentas necessárias
Servidor TCP — Um utilitário de código aberto disponível na maioria dos repositórios de pacotes Linux. Ele permite que você abra uma porta local e redirecione o tráfego recebido via stdin/stdout de qualquer comando especificado para ela:
Este comando permite que o pod acesse a porta 8000 na máquina local.
Script bash
Eu escrevi um script especial para Bash que permite gerenciar um cluster de produção Kubernetes CamadaCIusando o método descrito acima:
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Usage: kubetunnel [pod name] [destination port]"
return 1
fi
pkill -f 'tcpserver 127.0.0.1 6666'
tcpserver 127.0.0.1 6666 kubectl exec -i "$POD" nc 127.0.0.1 "$DESTPORT"&
echo "Connect to 127.0.0.1:6666 to access $POD:$DESTPORT"
}
Se você adicionar esta função a ~/.bashrc, você pode abrir facilmente um túnel em um pod com o comando kubetunnel web-pod 8080 e fazer curl localhost:6666.
Para o túnel em Estivador você pode substituir a linha principal por: