pgcli/cmd/pgpf/README.md

5.0 KiB
Raw Blame History

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 # имя поля, в котором лежит порт на которм слешает инстанс БД

Примечания:

  1. Если используется только проброс портов app.port-forward-only.enabled = true, то использование терминальных приложений игнорируется. В выводе будет указан хост и порт которые можно будет использовать для подключения.

    При этом в файл $HOME/.pgpass добавляется временная запись с кредами подключения. При завершении работы эта запись удаляется.

  2. При использовании терминальных приложений, всегда используется локальный хост и любой свободный порт. Креды нигде не сохраняются, а передаются в терминальное приложение напрямую. Соответственно, терминальное приложение должно находиться в $PATH.

  3. Приложение ищет под в неймспейсе или если это часть неймспейса, то делается запрос на получение подов из всех неймспейсов, Из общего списка отфильтровывается список содержащий часть неймспейса. И в последнем уже ищется под с именем, содержащим в названии значение kube.db.pod-substring Если найдено более одного пода, то приложение завершается с ошибкой (в будущем добавлю интерактив)

  4. Данные для подключения берутся из секрета. Секрет берется из неймспейса найденного пода и отфильровывается по имени, содержащем 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...