Commit Graph
11 Commits
Author SHA1 Message Date
hermes c2c9b273f2 fix(ai): mcp-k8s — containers/kubernetes-mcp-server вместо mkp
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 17s
У mkp нет ни одного безопасного режима, только RBAC. У containers/kubernetes-mcp-server есть
штатный --read-only, --toolsets и denied_resources, официальный гайд по read-only SA и чарт.
Образ quay.io/containers/kubernetes_mcp_server:v0.0.66 с дайджестом (тег проверен в API quay).
RBAC: вместо самодельного списка — встроенная view (secrets в неё не входят) + отдельный
ClusterRole на кластерные объекты и метрики. Аргументы: --port 8080 --read-only --toolsets core.
2026-09-17 23:17:35 +00:00
hermes c4cf3ba798 feat(ai): mcp-k8s через ToolHive (read-only RBAC)
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 18s
Flate / Flate - Success (pull_request) Canceled after 0s
MCP-сервер k8s из реестра ToolHive: ghcr.io/stackloklabs/mkp/server:0.4.3, transport streamable-http.
Отдельный SA mcp-k8s и ClusterRole mcp-k8s-readonly (только get/list/watch).
Core-группа перечислена поимённо, чтобы не открывать secrets; остальные группы явным списком,
потому что apiGroups: [*] включает и core-группу. Наружу не выводим: без oidcConfigRef прокси
ToolHive неаутентифицирован.
2026-09-17 23:10:17 +00:00
hermes 0243dbfb9c feat(database): dragonfly-operator в ns database
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 6s
Flate / Flate (pull_request) Successful in 17s
Официальный чарт oci://ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator v1.6.1.
CRD (dragonflydb.io) ставит сам чарт шаблоном templates/crds.yaml, crds.keep: true.
kube-rbac-proxy отключён (метрики на :8080), ServiceMonitor и дашборд Grafana не включаем
— Prometheus Operator в кластере нет. Образ взят из ghcr и зафиксирован дайджестом.
Dragonfly CR сюда не входит: экземпляр БД создаётся в ns того, кому он нужен.
2026-09-17 21:31:47 +00:00
hermesandgrachevko 5b33310a44 feat(ai): toolhive-operator и его CRD в ns ai 2026-09-17 21:18:29 +00:00
hermesandgrachevko 12ad1c040c chore(security): поправить комментарий про dependsOn в ESO (#12)
Одна задача = один MR: правка только комментария, поведение не меняется.

**Что было не так**

Комментарий утверждал, что `dependsOn` работает только внутри своего ns. Это неверно и вводит в заблуждение.

**Как на самом деле**

По CRD-схеме kustomize-controller (`api/v1/dependsOn[].namespace`):

```
namespace:
  description: |-
    Namespace of the referent, defaults to the namespace of the resource
    object that contains the reference.
```

То есть поле опционально и по умолчанию равно namespace **самого объекта Kustomization**, а не namespace, куда тот раскидывает ресурсы. Поэтому «зависимости из другого ns» бывают двух разных видов:

- в `ewatkins/talos-cluster` все app-Kustomization лежат в `flux-system` (`apps/default/netbox/ks.yaml`: `namespace: flux-system`, `targetNamespace: default`), поэтому `dependsOn` на `dragonfly` и `crunchy-postgres-operator-*` пишется без поля `namespace`, хотя рабочие нагрузки уезжают в другие ns;
- в `drag0n141/home-ops` Kustomization лежат в своём target-ns (`apps/ai/toolhive/ks.yaml`: `namespace: &namespace ai`), и там кросс-ns зависимости пишутся явно: `onepassword-connect` с `namespace: external-secrets`, `pocket-id-instance` с `namespace: security`.

**Что у нас**

Наш репозиторий следует второму варианту: `kubernetes/apps/<ns>/kustomization.yaml` задаёт `namespace: <ns>`, то есть app-Kustomization живут в своём ns. Значит зависимости между `ai` и `database` (Dragonfly CR → dragonfly-operator) будут писаться с явным `dependsOn[].namespace`. Комментарий теперь это и описывает.Reviewed-on: #12

Co-authored-by: Hermes Agent <hermes@grachevko.ru>
2026-09-17 21:18:22 +00:00
hermes df78e7ce51 fix(security): CR ESO в отдельный Kustomization после оператора
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 16s
2026-09-17 18:18:33 +00:00
hermesandgrachevko 07c32f9f79 feat(security): External Secrets Operator + ClusterSecretStore на Vault 2026-09-17 18:15:35 +00:00
hermes 869817c4db fix(vault): remediation rollback вместо uninstall — Vault критичен для ESO
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 18s
2026-09-17 17:27:14 +00:00
hermes f7471fb105 feat(security): Vault standalone+raft на proxmox-csi, чарт из git
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 16s
Flate / Flate - Success (pull_request) Canceled after 0s
2026-09-17 16:53:30 +00:00
grachevko eaad2a00f3 feat: proxmox-csi 2026-09-17 18:44:49 +03:00
grachevko 3d5f56f099 chore: initial commit 🚀
E2E / reject-invalid (bad-vlan-tag) (push) Skipped
E2E / reject-invalid (missing-schematic) (push) Skipped
E2E / reject-invalid (nested-cidr-overlap) (push) Skipped
E2E / reject-invalid (node-uses-gateway-addr) (push) Skipped
E2E / reject-invalid (overlapping-cidrs) (push) Skipped
E2E / reject-invalid (partial-bgp) (push) Skipped
E2E / reject-invalid (reserved-node-name) (push) Skipped
E2E / reject-invalid (bad-bgp-asn) (push) Skipped
E2E / reject-invalid (bad-mac-address) (push) Skipped
E2E / reject-invalid (bad-repo-url) (push) Skipped
E2E / reject-invalid (duplicate-gateway-addrs) (push) Skipped
E2E / reject-invalid (duplicate-node-names) (push) Skipped
E2E / reject-invalid (gateway-node-collision) (push) Skipped
E2E / reject-invalid (missing-dns-token) (push) Skipped
E2E / reject-invalid (missing-external-gateway) (push) Skipped
E2E / reject-invalid (missing-known-hosts) (push) Skipped
E2E / reject-invalid (node-addr-outside-cidr) (push) Skipped
E2E / reject-invalid (non-canonical-cidr) (push) Skipped
E2E / reject-invalid (tiny-svc-cidr) (push) Skipped
E2E / reject-invalid (tunnel-without-dns) (push) Skipped
E2E / accept-valid (internal) (push) Skipped
E2E / accept-valid (multi-controller) (push) Skipped
E2E / validator-tests (push) Skipped
E2E / accept-valid (no-webhook) (push) Skipped
E2E / accept-valid (private) (push) Skipped
E2E / accept-valid (public) (push) Skipped
E2E / accept-valid (single-node) (push) Skipped
E2E / accept-valid (direct) (push) Skipped
E2E / accept-valid (selfhosted) (push) Skipped
2026-09-16 22:21:59 +03:00