pgcli/cmd/pgpf/README.md

75 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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...
```