Kubernetes新节点验收与多租户隔离:如何安全开放调度

来自AI助手的总结
通过节点隔离、命名空间、网络策略和RBAC实现多租户安全隔离
Kubernetes新节点验收与多租户隔离:如何安全开放调度

一、问题四:新增节点如何确保可用性?

Day018-K8s污点和容忍:集群资源精细化隔离-新增节点如何确保可用性

确保新增节点可用性

1、组件健康检查

  • 检查新节点的 kubelet 服务运行状态:systemctl status kubelet,确保无报错。

  • 验证容器运行时状态,如 containerd 或 Docker 服务正常。

2、节点维护与调度控制

  • 维护节点时,标记为不可调度:kubectl cordon <节点名>,避免 Pod 调度至该节点。

  • 完成维护后,恢复调度:kubectl uncordon <节点名>

3、资源监控与验证

  • 通过 kubectl describe node <节点名> 查看节点资源(CPU、内存)分配情况,确保资源充足。

  • 部署测试 Pod,验证节点调度能力:kubectl run test-pod --image=nginx --node=<新节点名>,检查 Pod 运行状态。

4、集群网络与通信验证

  • 确保新节点与集群其他节点网络互通,Flannel、Calico 等网络插件在新节点正常运行。

  • 验证 Pod 间、Service 与 Pod 的通信功能,确保网络策略无阻塞。

二、问题五:多租户如何进行隔离?

Day018-K8s污点和容忍:集群资源精细化隔离-多租户如何进行隔离

在 Kubernetes 集群中,通过以下策略实现多租户的资源隔离,确保不同租户的 Pod 运行在指定节点,避免资源争用和安全风险:

1、节点标签与污点隔离

  • 标记节点:为不同租户分配专属节点,添加标签和污点:

“`yaml

# 租户A的节点

kubectl label node node01 tenant=a

kubectl taint node node01 tenant=a:NoSchedule

# 租户B的节点

kubectl label node node02 tenant=b

kubectl taint node node02 tenant=b:NoSchedule

“`

  • 效果:只有声明对应容忍的 Pod 才能调度到指定节点

2、Pod 配置容忍与节点亲和性

  • 租户A的 Pod 配置

yaml
spec:
tolerations:
- key: "tenant"
operator: "Equal"
value: "a"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: tenant
operator: In
values: ["a"]

  • 租户B的 Pod 配置:类似,将 value 改为 b

yaml
spec:
tolerations:
- key: "tenant"
operator: "Equal"
value: "b"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: tenant
operator: In
values: ["b"]

3、命名空间(Namespace)隔离

  • 创建租户专属命名空间

“`yaml

kubectl create namespace tenant-a

kubectl create namespace tenant-b

“`

  • 资源配额(Resource Quota):限制每个租户的资源使用:

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: tenant-a-quota
namespace: tenant-a
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi

4、网络策略(Network Policy)

  • 禁止跨租户通信

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tenant-isolation
namespace: tenant-a
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {}
egress:
- to:
- podSelector: {}

  • 效果:租户A的 Pod 只能与同一命名空间的 Pod 通信。

5、RBAC 权限控制

  • 限制租户访问范围

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: tenant-a-admin
namespace: tenant-a
subjects:
- kind: User
name: user-a
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: admin
apiGroup: rbac.authorization.k8s.io

  • 效果:租户A的用户仅能管理 tenant-a 命名空间内的资源。
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容