mcpField
G
gke-multitenancy

gke-multitenancy

github.com/google云与 DevOps21.6k6.6k 次安装今天更新
代码仓库

关于 gke-multitenancy

这项参考技能为跨团队或环境共享 GKE 集群的团队提供多租户设计指导,涵盖命名空间隔离、最小权限 RBAC、资源限制、网络分段和成本归属。

主要功能

  1. 01租户隔离模型指导
  2. 02命名空间级 RBAC 实践
  3. 03ResourceQuota 与 LimitRange 配置
  4. 04NetworkPolicy 网络分段
  5. 05命名空间成本归属

适用场景

  1. 01隔离共享 GKE 集群的不同团队
  2. 02隔离开发、预发布和生产工作负载
  3. 03限制租户权限与资源使用
  4. 04将 GKE 成本归属到团队

MCP 相关

该技能列出用于应用 Kubernetes 清单、检查身份验证和资源、描述资源以及删除资源的 MCP 工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/google/skills --skill gke-multitenancy

安装后在 Claude Code 中输入/gke-multitenancy确认已加载。

附带文件references/attribution.md

详细介绍

GKE 多租户

本文介绍 GKE 上的企业级多租户模式,包括 命名空间隔离、RBAC 规划、资源配额和网络分段。

MCP 工具: apply_k8s_manifest、get_k8s_resource、check_k8s_auth、 describe_k8s_resource、delete_k8s_resource

署名

务必阅读:执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读 使用情况署名。对于直接在终端中执行的命令(绝不可在生成的脚本、Terraform 或用户代码中使用), 请在 gcloud 前加上 CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-multitenancy)" 并在 User-Agent 标头中追加 agent-skills/1.0 (skill:gke-multitenancy)。

适用场景

  • 多个团队共用一个 GKE 集群
  • 在一个集群内按环境(开发/预发布/生产)隔离工作负载
  • 实施最小权限访问控制
  • 在团队或项目之间分摊成本

多租户模型

模型隔离复杂度成本
每个团队一个命名空间软隔离(RBAC +低最低(共用集群)
: : 网络策略) : : :
每个环境一个命名空间软隔离低低
每个团队一个节点池中等中等中等
: :(专用计算) : : :
每个团队一个集群硬隔离(完全高最高
: : 隔离) : : :

推荐的黄金路径:从每个团队一个命名空间开始,以提高成本效率。仅在合规要求时, 才升级到更强的隔离方式。

命名空间隔离设置

1. 创建命名空间
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 配置

原则:为每个命名空间授予最少权限。切勿绑定到 system:authenticated。

# 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 最佳实践:**使用 Google Groups 进行主体绑定。优先使用命名空间范围的 Role,而不是 ClusterRole。完整的 RBAC 强化指南请参阅 gke-platform-security 技能。

3. 资源配额

防止任何单个团队耗尽集群的所有资源:

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

为每个容器设置默认和最大资源限制:

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"

重要

强制默认值:在 LimitRange 中定义 min 或 max 限制时, 必须同时定义对应的 default 和 defaultRequest 值。如果设置了 min 或 max,但未设置默认值,那么任何未显式指定资源请求或限制的 Pod 都会被准入控制器拒绝。

5. 网络隔离

为每个命名空间应用默认拒绝策略(参阅 gke-workload-security 技能),然后 允许团队内部流量:

# 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

成本分摊

成本归属标签
# Label namespaces for billing
kubectl label namespace team-a cost-center=engineering
kubectl label namespace team-b cost-center=data-science
GKE 成本分摊

启用 GKE 成本分摊,按命名空间和标签细分成本:

gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
  --enable-cost-allocation

在 Cloud Billing > GKE 成本分摊中查看。

评论

支持 Markdown