Программистам часто требуется помощь в доступе к ресурсам в виртуальной частной сети. Например, у нас есть база данных, к которой мы хотим получить доступ с нашего ПК. Мы не должны выставлять порты базы данных в Интернет, потому что это потенциальная опасность. Но когда в нашей инфраструктуре есть Kubernetes, мы можем использовать его как прокси.
Обзор нашей проблемы
У нас нет прямого подключения к базе данных, но мы можем получить к ней доступ с помощью socat и kubectl.
Инструмент socat считается расширенной версией netcat. Они делают похожие вещи, но у socat есть дополнительные функции, такие как разрешение нескольким клиентам прослушивать порт или повторное использование соединений.
Возможное решение
Используя socat, мы можем сделать переадресацию портов. Вот пример для нескольких подключений:
socat tcp-listen:81,fork,reuseaddr tcp:192.168.1.10:80 # where: # 81 is port number on local machine # 192.168.1.10:80 is remote host
Все, что нам нужно сделать, это запустить указанную выше команду в Kubernetes. Для этого нам нужно создать простой Pod. См. приведенный ниже пример в файле `port-forward.yaml`.
apiVersion: v1 kind: Pod metadata: name: port-forward spec: containers: - name: port-forward image: alpine/socat:1.7.4.4 command: - "/bin/sh" - "-c" - | socat tcp-listen:$LOCAL_PORT,reuseaddr,fork tcp:$REMOTE_HOST:$REMOTE_PORT & pid=$! && trap "kill $pid" SIGINT && \ echo "Socat started listening on $LOCAL_PORT: Redirecting traffic to $REMOTE_HOST:$REMOTE_PORT ($pid)" && wait $pid env: - name: REMOTE_HOST value: postgresql.database.cloud.net - name: REMOTE_PORT value: "5432" - name: LOCAL_PORT value: "5432"
В этом примере мы создаем док-контейнер с переадресацией порта в базу данных postgresql.
Чтобы запустить следующий модуль в kubernetes, используйте kubeclt:
kubectl apply -f port-forward.yaml
Затем мы видим запущенный контейнер, работающий в нашем кластере k8s:
user@hostname:~/$ kubectl get pods NAME READY STATUS RESTARTS AGE port-forward 1/1 Running 0 20s
Последнее, что нам нужно сделать, это сделать переадресацию порта с пода на нашу локальную машину:
user@hostname:~/$ kubectl port-forward pod/port-forward 5432:5432 Forwarding from 127.0.0.1:5432 -> 5432 Forwarding from [::1]:5432 -> 5432 Handling connection for 5432 Handling connection for 5432 Handling connection for 5432
И теперь мы можем подключиться к базе данных в облаке, которая доступна на локальном хосте по порту 5432.
Сообщите нам, если хотите узнать больше
Эти практические примеры показывают вам, как получить доступ к ресурсам may с помощью kubernetes. Это практичное решение может внести свой вклад в ваши будущие проекты и продукты. Не стесняйтесь обращаться к нам, если вы хотите узнать больше о практическом использовании Kotlin или вам нужна помощь в разработке вашего текущего или следующего проекта.