75 lines
5.0 KiB
Markdown
75 lines
5.0 KiB
Markdown
# 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...
|
||
```
|