Files
home-ops/kubernetes/apps/ai/mcp-k8s/app/rbac.yaml
T
hermes c4cf3ba798
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 18s
Flate / Flate - Success (pull_request) Canceled after 0s
feat(ai): mcp-k8s через ToolHive (read-only RBAC)
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

85 lines
2.6 KiB
YAML
Raw 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.
---
# Права MCP-сервера на API. Только чтение: mkp умеет и apply_resource, и
# delete_resource, и exec в поды — ограничение живёт исключительно здесь,
# поэтому список verbs закрыт чтением.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: mcp-k8s-readonly
rules:
# Core-группа перечислена поимённо: resources: ["*"] открыл бы и secrets,
# а cluster-secrets, токен Proxmox CSI и прочие креды агенту читать незачем.
- apiGroups: [""]
resources:
- configmaps
- endpoints
- events
- limitranges
- namespaces
- nodes
- persistentvolumeclaims
- persistentvolumes
- pods
- pods/log
- pods/status
- replicationcontrollers
- resourcequotas
- serviceaccounts
- services
verbs: ["get", "list", "watch"]
# Остальные группы перечислены явно, потому что apiGroups: ["*"] включает и
# core-группу — то есть снова открыл бы secrets. Список закрытый: не хватает
# группы — сервер просто не увидит её ресурсы, ничего не сломается.
- apiGroups:
- admissionregistration.k8s.io
- apiextensions.k8s.io
- apiregistration.k8s.io
- apps
- authentication.k8s.io
- authorization.k8s.io
- autoscaling
- batch
- certificates.k8s.io
- coordination.k8s.io
- discovery.k8s.io
- events.k8s.io
- flowcontrol.apiserver.k8s.io
- metrics.k8s.io
- networking.k8s.io
- node.k8s.io
- policy
- rbac.authorization.k8s.io
- scheduling.k8s.io
- storage.k8s.io
- acme.cert-manager.io
- cert-manager.io
- cilium.io
- dragonflydb.io
- external-secrets.io
- gateway.envoyproxy.io
- gateway.networking.k8s.io
- generators.external-secrets.io
- helm.toolkit.fluxcd.io
- image.toolkit.fluxcd.io
- kustomize.toolkit.fluxcd.io
- monitoring.coreos.com
- notification.toolkit.fluxcd.io
- snapshot.storage.k8s.io
- source.toolkit.fluxcd.io
- toolhive.stacklok.dev
resources: ["*"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: mcp-k8s-readonly
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: mcp-k8s-readonly
subjects:
- kind: ServiceAccount
name: mcp-k8s
namespace: ai