gke-multitenancy — Claude Code skill: install and use
Plans GKE multi-tenancy with team isolation, RBAC, resource limits and cost allocation. Use it when teams or environments share one cluster.
npx skills add google/skills --skill gke-multitenancy -a claude-codeWhat gke-multitenancy does
This skill plans GKE multi-tenancy through team or environment namespaces, dedicated node pools, or separate clusters. It covers namespace setup, least-privilege Roles and RoleBindings, ResourceQuota, LimitRange, and NetworkPolicy rules for workload isolation.
It includes Kubernetes manifest examples plus kubectl commands for namespaces, labels, and quotas. It also covers GKE cost allocation by namespace and label. Before using gcloud, REST API, or MCP tools, read references/attribution.md; direct terminal commands need the required attribution prefix.
Install it for a shared GKE cluster used by several teams. For a single-tenant cluster or general deployment work, use gke-basics or gke-app-onboarding instead.
What it helps with
- separate teams into GKE namespaces
- plan namespace-scoped RBAC permissions
- cap team resource use with ResourceQuota
- set container defaults with LimitRange
- apply network isolation between workloads
Example prompts for the agent
- “Plan a namespace-per-team model for our GKE cluster.”
- “Create a Role and RoleBinding for team-a in the team-a namespace.”
- “Add ResourceQuota, LimitRange, and NetworkPolicy for team-a.”
How to install gke-multitenancy
1Skills CLI (Vercel)
npx skills add google/skills --skill gke-multitenancy -a claude-code2Manually: put the files in place
~/.claude/skills/gke-multitenancy/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/gke-multitenancy/
1Skills CLI (Vercel)
npx skills add google/skills --skill gke-multitenancy -a codex2Manually: put the files in place
.agents/skills/gke-multitenancy/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/gke-multitenancy/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install google/skills gke-multitenancy2Manually: put the files in place
.github/skills/gke-multitenancy/SKILL.md1Skills CLI (Vercel)
npx skills add google/skills --skill gke-multitenancy -a gemini-cli2Platform CLI
gemini skills install https://github.com/google/skills --path skills/cloud/gke-multitenancyManually: put the files in place
.devin/skills/gke-multitenancy/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set172
The whole set →Similar
Questions about gke-multitenancy
How do I install gke-multitenancy in Claude Code?
Run npx skills add google/skills --skill gke-multitenancy -a claude-code. The skill file is placed at ~/.claude/skills/gke-multitenancy/SKILL.md.
What does gke-multitenancy do?
It plans and configures GKE multi-tenancy with namespaces, RBAC, resource quotas, LimitRanges, network isolation, and cost allocation.
Which multi-tenancy model should I start with?
The skill recommends namespace-per-team as a cost-conscious starting point. Move to stronger isolation when compliance requires it.
Source text
SKILL.md · Apache-2.0
--- name: gke-multitenancy description: >- Plans and configures multi-tenancy on GKE. Covers namespace isolation, RBAC planning for teams, resource quotas, LimitRanges, network isolation, and cost allocation. Use when designing GKE multi-tenancy, configuring GKE namespaces, setting up resource quotas, or isolating GKE teams. Don't use for single-tenant cluster configuration or general deployment instructions (use gke-basics or gke-app-onboarding instead). metadata: version: "1.0.1" category: Containers --- # GKE Multi-Tenancy This reference covers enterprise multi-tenancy patterns on GKE, including namespace isolation, RBAC planning, resource quotas, and network segmentation. > **MCP Tools:** `apply_k8s_manifest`, `get_k8s_resource`, `check_k8s_auth`, > `describe_k8s_resource`, `delete_k8s_resource` ## Attribution **MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you MUST read [Usage Attribution](references/attribution.md). For commands executed directly in the terminal (never in generated scripts, Terraform, or user code), prefix `gcloud` with `CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-multitenancy)"` and append `agent-skills/1.0 (skill:gke-multitenancy)` to `User-Agent` headers. ## When to Use - Multiple teams sharing a single GKE cluster - Isolating workloads by environment (dev/staging/prod) within one cluster - Implementing least-privilege access control - Cost allocation across teams or projects ## Multi-Tenancy Models | Model | Isolation | Complexity | Cost | | ----------------------------- | ------------ | ---------- | -------------- | | **Namespace-per-team** | Soft (RBAC + | Low | Lowest (shared | : : Network : : cluster) : : : Policy) : : : | **Namespace-per-environment** | Soft | Low | Low | | **Node pool-per-team** | Medium | Medium | Medium | : : (dedicated : : : : : compute) : : : | **Cluster-per-team** | Hard (full | High | Highest | : : isolation) : : : > **Golden path recommendation**: Start with namespace-per-team for cost > efficiency. Escalate to stronger isolation only when compliance requires it. ## Namespace Isolation Setup ### 1. Create Namespaces ```bash kubectl create namespace team-a kubectl create namespace team-b kubectl label namespace team-a team=a kubectl label namespace team-b team=b ``` ### 2. RBAC Configuration **Principle**: Grant minimal permissions per namespace. Never bind to `system:authenticated`. ```yaml # Namespace-scoped role for a team apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: team-a-developer namespace: team-a rules: - apiGroups: ["", "apps", "batch"] resources: ["pods", "deployments", "services", "configmaps", "jobs"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: team-a-developers namespace: team-a subjects: - kind: Group name: "[email protected]" # Google Group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: team-a-developer apiGroup: rbac.authorization.k8s.io ``` **RBAC best practices:** Use Google Groups for subject bindings. Prefer namespace-scoped Roles over ClusterRoles. See the `gke-platform-security` skill for full RBAC hardening guidance. ### 3. Resource Quotas Prevent any single team from consuming all cluster resources: ```yaml apiVersion: v1 kind: ResourceQuota metadata: name: team-a-quota namespace: team-a spec: hard: requests.cpu: "10" requests.memory: "20Gi" limits.cpu: "20" limits.memory: "40Gi" pods: "50" services: "10" persistentvolumeclaims: "10" ``` ### 4. LimitRanges Set default and maximum resource constraints per container: ```yaml apiVersion: v1 kind: LimitRange metadata: name: team-a-limits namespace: team-a spec: limits: - type: Container default: cpu: "500m" memory: "512Mi" defaultRequest: cpu: "100m" memory: "128Mi" max: cpu: "4" memory: "8Gi" ``` > [!IMPORTANT] **Mandatory Defaults**: When defining `min` or `max` limits in a > `LimitRange`, you **must** also define corresponding `default` and > `defaultRequest` values. If you set a `min` or `max` without defaults, any pod > deployed without explicit resource requests/limits will be rejected by the > admission controller. ### 5. Network Isolation Apply default-deny per namespace (see the `gke-workload-security` skill), then allow intra-team traffic: ```yaml # Allow same-namespace pods to talk + DNS apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-same-namespace namespace: team-a spec: podSelector: {} ingress: - from: - podSelector: {} egress: - to: - podSelector: {} - to: # Allow DNS - namespaceSelector: {} podSelector: matchLabels: k8s-app: kube-dns ports: - protocol: UDP port: 53 ``` ## Cost Allocation ### Labels for Cost Attribution ```bash # Label namespaces for billing kubectl label namespace team-a cost-center=engineering kubectl label namespace team-b cost-center=data-science ``` ### GKE Cost Allocation Enable GKE cost allocation to break down costs by namespace and label: ```bash gcloud container clusters update <CLUSTER_NAME> --region <REGION> \ --enable-cost-allocation ``` View in Cloud Billing > GKE Cost Allocation.
© google · Apache-2.0 · google/skills