# Saiba como Acessar Aplicações Remotas em Kubernetes de Maneira Fácil e Prática

Imagine que você tenha sua aplicação fazendo uso de uma arquitetura baseada em microsserviços hospedados em um *cluster* Kubernetes, como mostra a Figura 1, contendo um *deployments* de Mongo DB e APIs utilizadas internamente, isto é, não disponibilizadas na Internet através de IP público. Certo dia, você necessita acessar diretamente aos registros do banco de dados, seja para inspeção, seja para teste de uma aplicação que você está desenvolvendo. Como você deve proceder?

![](https://douglasdantas.com/wp-content/uploads/2021/08/port-forward.png align="left")

**Figura 1:** Visão geral da arquitetura de exemplo.

Aprimeira coisa que muitos fariam seria modificar o *service* do mongodb para atribuir-lhe um IP público e, então, realizar o acesso. No entanto, esta manobra exporia o banco de dados a riscos de segurança e, se não houver um método seguro de autenticação, podemos ter dados roubados ou sequestrados por ataques *ransomware*. Mas para quê expor o serviço a riscos desnecessários se temos uma alternativa mais segura e cômoda para isso? Esta alternativa é o ***port forwarding***.

## Port forwarding

O *port forwarding* permite redirecionar uma porta local (localhost) para uma porta remota na aplicação através de um túnel seguro. Veja a seguir como poderíamos fazer o redirecionamento de portas da nosso *pod* do mongo-db:

```bash
kubectl port-forward mongodb-wr6mkb 28015:27017
```

A porta de entrada remota é a 27017. A 28015, por sua vez, é a porta do localhost que foi mapeada para a porta remota. Assim poderíamos nos conectar normalmente ao banco através do endereço `localhost:27017`. Assim que o processo de *port fowarding* fosse finalizado, a conexão estaria encerrada.

Também é possível realizar um *port foward* através do *service* e do *deployment* ou outros tipos de recursos, isto é, não apenas do *pod*. A seguir, uma amostra de como faríamos a mesma conexão acima mas através destes recursos:

```bash
# via deployment
kubectl port-forward deployment/mongodb 28015:27017

# via service
kubectl port-forward service/mongodb 28015:27017
```

Tenha em mente que realizando o *port forwarding* desta maneira o *load balancer* redirecionaria a conexão para uma instância aleatória em caso de réplicas, o que não é o caso aqui, pois o *deployment* tem somente um *pod*.

## Quer saber mais?

O que foi explanado neste artigo é um uso bem simples, fácil e que supre a maior parte das necessidades do dia a dia. O *port forwarding* é muito mais poderoso do que isso! Se você quer saber mais, as páginas a seguir serão de grande valia:

* [Use Port Forwarding to Access Applications in a Cluster](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
    
* [port-forward reference](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#port-forward)
