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 неаутентифицирован.
85 lines
2.6 KiB
YAML
85 lines
2.6 KiB
YAML
---
|
||
# Права 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
|