# pgpf ## Назначение Программа предназначена для проброса портов (port-forwarding) для пода на котором развернут инстанс БД Postgres. Опционально: запуск терминальных клиентов `psql` или `pgcli`. Расшифровывается pgpf как PostGres Port Forward ## Аргументы - `--config` - файл с конфигурацией в формате yaml (поля конфига описаны ниже. По дефолту `$HOME/.pgpf/config.yaml`) - `--kubeconfig` - файл с кубконфигом (по дефолту `$HOME/.kube/config`) - `--ns` - неймспейс пода - обязательное поле, может использоваться часть ### Конфиг приложения ```yaml 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 # имя поля, в котором лежит порт на которм слешает инстанс БД ``` Примечания: 1. Если используется только проброс портов `app.port-forward-only.enabled = true`, то использование терминальных приложений игнорируется. В выводе будет указан хост и порт которые можно будет использовать для подключения. При этом в файл `$HOME/.pgpass` добавляется временная запись с кредами подключения. При завершении работы эта запись удаляется. 2. При использовании терминальных приложений, всегда используется локальный хост и любой свободный порт. Креды нигде не сохраняются, а передаются в терминальное приложение напрямую. Соответственно, терминальное приложение должно находиться в $PATH. 3. Приложение ищет под в неймспейсе или если это часть неймспейса, то делается запрос на получение подов из всех неймспейсов, Из общего списка отфильтровывается список содержащий часть неймспейса. И в последнем уже ищется под с именем, содержащим в названии значение `kube.db.pod-substring` Если найдено более одного пода, то приложение завершается с ошибкой (в будущем добавлю интерактив) 4. Данные для подключения берутся из секрета. Секрет берется из неймспейса найденного пода и отфильровывается по имени, содержащем `kube.secret.pod-substring`. Если секрет не найден, приложение завершается с ошибкой. ### Пример использования Терминальное приложение pgcli ```bash $ 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> ``` Только проброс портов ```bash $ 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... ```