Бывают ситуации, когда доступ к базе данных с локальной машины закрыт, но доступ из Kubernetes кластера к базе данных есть. В этом случае можно сделать проброс доступа по следующей схеме localhost <--> pod k8s <--> remote-db
.
Создаем сущность pod в кластере k8s командой kubectl apply -f pod.yaml
Файл pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: mongodb-socat
namespace: default
labels:
name: mongodb-socat
spec:
containers:
- name: mongodb-socat
image: alpine/socat
command: ["socat", "-dd", "tcp4-listen:27018,fork,reuseaddr", "remote-host-url-mongodb.com:27018/databaseName"]
resources:
limits:
memory: "64Mi"
cpu: "50m"
ports:
- containerPort: 27018
Здесь tcp4-listen:27018
- порт, который будет открыт приложением socat для прослушивания, в нашем случае 27018 порт MongoDB. Этот же порт необходимо указать в containerPort
. remote-host-url-mongodb.com:27018/databaseName
- хост, порт и имя базы данных mongodb для подключения приложения socat.
Далее выполняем команду проброса трафика из пода на localhost:
kubectl port-forward --namespace default pod/mongodb-socat 27018:27018
Далее подключаемся на машине где выполнена команда проброса на адрес localhost:27018
с нужными параметрами аутентификации.