| .. | ||
| main.go | ||
| README.md | ||
pgpf
Назначение
Программа предназначена для проброса портов (port-forwarding) для пода на котором развернут инстанс БД Postgres.
Опционально: запуск терминальных клиентов psql или pgcli.
Расшифровывается pgpf как PostGres Port Forward
Аргументы
--config- файл с конфигурацией в формате yaml (поля конфига описаны ниже. По дефолту$HOME/.pgpf/config.yaml)--kubeconfig- файл с кубконфигом (по дефолту$HOME/.kube/config)--ns- неймспейс пода - обязательное поле, может использоваться часть
Конфиг приложения
app:
port-forward-only:
enabled: false # использовать только проброс портов
local-host: IP.AD.DR.ES # IPv4 адрес куда пробрасывать трафик (если не указано, то по умолчанию 127.0.0.1)
local-port: 0 # локальный TCP порт куда пробрасывать трафик (если не указано, то выбирается любой свободный)
use-app:
pgcli: false # использовать терминальное приложение pgcli
psql: true # использовать терминальное приложение psql
kube:
db:
pod-substring: db-cluster-pooler # подстрока в имени пода с БД для фильтрации
secret:
pod-substring: db-cluster-app # подстрока в имени секрета для фильтрации
data-fields:
password: password # имя поля, в котором лежит пароль
username: user # имя поля, в которм лежит имя пользователя
dbname: dbname # имя поля, в котором лежит название базы данных
port: port # имя поля, в котором лежит порт на которм слешает инстанс БД
Примечания:
-
Если используется только проброс портов
app.port-forward-only.enabled = true, то использование терминальных приложений игнорируется. В выводе будет указан хост и порт которые можно будет использовать для подключения.При этом в файл
$HOME/.pgpassдобавляется временная запись с кредами подключения. При завершении работы эта запись удаляется. -
При использовании терминальных приложений, всегда используется локальный хост и любой свободный порт. Креды нигде не сохраняются, а передаются в терминальное приложение напрямую. Соответственно, терминальное приложение должно находиться в $PATH.
-
Приложение ищет под в неймспейсе или если это часть неймспейса, то делается запрос на получение подов из всех неймспейсов, Из общего списка отфильтровывается список содержащий часть неймспейса. И в последнем уже ищется под с именем, содержащим в названии значение
kube.db.pod-substringЕсли найдено более одного пода, то приложение завершается с ошибкой (в будущем добавлю интерактив) -
Данные для подключения берутся из секрета. Секрет берется из неймспейса найденного пода и отфильровывается по имени, содержащем
kube.secret.pod-substring. Если секрет не найден, приложение завершается с ошибкой.
Пример использования
Терминальное приложение pgcli
$ pgpf --kubeconfig /Users/dsbalabanov/.kube/kubeconfig_dev2_sso.config --ns backbone
Forwarding from 127.0.0.1:50159 -> 5432
Forwarding from [::1]:50159 -> 5432
Handling connection for 50159
Handling connection for 50159
Server: PostgreSQL 16.3 (Debian 16.3-1.pgdg110+1)
Version: 4.2.0
Home: http://pgcli.com
backbone-api>
Только проброс портов
$ pgpf --kubeconfig /Users/dsbalabanov/.kube/kubeconfig_dev2_sso.config --ns backbone
Forwarding from 127.0.0.1:50222 -> 5432
Forwarding from [::1]:50222 -> 5432
Connection to database backbone-api is ready, temporary data added to .pgpass. Use 127.0.0.1:50222 for connection...