Kubernetes如何限制不同团队只能访问各自namespace实现

目录
  • 场景说明
  • 1 | 实现思路
  • 2 | 实现的脚本
  • 3 | 使用方式

场景说明

假设有这么一个场景:一个 Kubernetes 集群,有多个 namespace,然后每个 namespace 由一个工程团队去使用,不同的工程团队之间无法访问和操作其他团队的 namespace 下的资源,实现资源和权限隔离的目的。

1 | 实现思路

可以利用 Kubernetes 的 RBAC 来实现:

  • 在各自的 namespace 下创建一个 ServiceAccount
  • 在这个 namespace 下创建一个 Role,定义这个 Role 的权限规则(rules)
  • 将这个 Role 和 ServiceAccount 进行绑定
  • 最后生成一个kubeconfig,给到各个团队通过 kubectl 命令行调用

2 | 实现的脚本

需要的配置文件已经写好,如下:

  • create_kubeconfig.sh
#!/bin/bash
# Created by lanbitou 03.29.2023
ns=$1
name=$ns
user=$name
kubeconfig=$ns"-config"
# kubernetes master api server 地址, 需要替换掉
apiserver="https://123.456.789.ABC:6443"
cluster="cluster_name_"$ns
context=$cluster
name=$name ns=$ns envsubst < create-role-rolebinding.yaml | kubectl apply -f -
if [ $? != 0 ]
then
    echo "error, exit=1"
    exit 1
fi
token=$(kubectl -n $ns get secret $(kubectl -n $ns get secret | grep $user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
echo $token
kubectl config set-credentials $user --token=$token --kubeconfig=$kubeconfig
kubectl config set-cluster $cluster --insecure-skip-tls-verify=true --server=$apiserver  --kubeconfig=$kubeconfig
kubectl config set-context $context --cluster=$cluster --user=$user --kubeconfig=$kubeconfig
kubectl config use-context $context --kubeconfig=$kubeconfig
echo $kubeconfig' is created in the current path.'

NOTE

这个脚本要在 Kubernetes admin 权限的 kubeconfig 下运行。

  • create-role-rolebinding.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: $name
  namespace: $ns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: $ns
  name: $name
rules:
- apiGroups: ["", "extensions", "apps"]
  #resources: ["pods", "services", "configmaps", "secrets","deployments","replicasets","statefulsets","daemonsets","pods/log","pods/exec","namespaces"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["batch"]
  resources: ["jobs","cronjobs"]
  verbs: ["*"]
- apiGroups: ["apiextensions.k8s.io"]
  resources: ["customresourcedefinitions"]
  verbs: ["*"]
# 如果发现生成的kubeconfig权限不足,可以根据提示,在这里添加对应的rule
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: $name
  namespace: $ns
subjects:
- kind: ServiceAccount
  name: $name
  namespace: $ns
roleRef:
  kind: Role
  name: $name
  apiGroup: rbac.authorization.k8s.io

3 | 使用方式

假设,有 zhangsan,lisi,wangwu 三个团队,namespace 也是 zhangsan,lisi,wangwu。

那么执行脚本如下:

$ bash create_kubeconfig.sh zhangsan
$ bash create_kubeconfig.sh lisi
$ bash create_kubeconfig.sh wangwu

即可在脚本所在目录,生成对应的kubeconfig:zhangsan-config, lisi-config 和 wangwu-config。 那么,不同团队对k8s集群的访问就可以这样进行:

$ kubectl -n zhangsan --kube-config=zhangsan-config get all

以上就是Kubernetes如何限制不同团队只能访问各自namespace实现的详细内容,更多关于Kubernetes限制namespace的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Kubernetes 中容器跨主机网络

    目录 前言 什么是 Flannel Flannel 的后端实现有哪些 UDP VXLAN Host-gw 基于 Flannel UDP 模式的实现跨主通信 UDP 模式案例实现 基于 Flannel VXLAN 模式的跨主通信 VXLAN 模式案例实现 总结 前言 在云原生领域,Kubernetes 已经成为了最主流的容器管理工具.Kubernetes 支持将容器部署到多个节点(即主机)上,因此必须解决容器间跨主机通信的问题. 本文将详细介绍 Kubernetes 中容器跨主机网络的实现原理和方

  • Kubernetes关键组件与结构组成介绍

    架构组成 我们可以看一下这两张图,所表示的都是关于 Kubernetes 集群的架构. 一个 kubernetes 集群是由一组被称为节点(Node)的机器或虚拟机组成,集群由 master.worker 节点组成,每个机器至少具有一个 worker 节点. Master 在前面两个图中,可以看到 Master 是由一组称为控制平面组件组成的,我们可以打开 /etc/kubernetes/manifests/ 目录,里面是 k8s 默认的控制平面组件. . ├── etcd.yaml ├── k

  • Kubernetes Ingress实现细粒度IP访问控制

    目录 业务场景 业务场景 有这么一个业务场景:业务平台还是通过Kubernetes进行编排对外提供服务.然后其后台管理部分,出于安全的考虑,只允许特定的IP才能访问.如何实现? 目前,我们的网络架构是 SLB + Nginx Ingress + Ingress + Service + Pod的模式.其中,SLB使用的是阿里云的负载均衡SaaS服务,使用的是7层负载,支持一个SLB实例+多个域名的转发模式,如下图所示. 阿里云SLB可以通过设定黑/白名单的方式进行访问控制,但是该访问控制会进行”一

  • Kubernetes 权限管理认证鉴权详解

    目录 正文 认证 认证用户 Normal Users Service Accounts 认证策略 客户端证书 不记名令牌 Static Token File Service Account Tokens OpenID Connect Tokens 鉴权 鉴权流程 鉴权模块 RBAC Role 和 ClusterRole RoleBinding 和 ClusterRoleBinding Service Account 最后 正文 Kubernetes 主要通过 API Server 对外提供服务,

  • asp实现限制一个ip只能访问一次的方法

    限制一个ip只能访问一次,现在将asp代码分享给大家: <% '///////////////////////////////////////////////////// '// // '//作用:一个IP地址只允许访问本页一次 // '//引用:<!-- #include file="Check_Ip.asp" --> // '// // '///////////////////////////////////////////////////// 'Response

  • SQL Server如何设置用户只能访问特定数据库和访问特定表或视图

    目录 前言 1.设置用户只能查看数据库中特定的视图或表 2.设置用户只能看到特定的数据库 总结 前言 在实际业务场景我们可能需要开放单独用户给第三方使用,并且不想让第三方看到与业务不相关的表或视图,我们需要在数据库中设置一切权限来实现此功能: 1.设置用户只能查看数据库中特定的视图或表 1.创建用户名 选择默认数据库 服务器角色默认为public 用户映射选择指定数据库 打开需要开放权限的数据库,这里我们选择test库 新建查询: 对用户qqq分配 View_1视图 只有 只读select权限

  • Minikube搭建Kubernetes集群

    Minikube 打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb.rpm包),再使用 apt 或 yum 安装. 或者直接下载 minikube 最新版本二进制文件(推荐). curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linu

  • Kubernetes控制节点的部署

    标签和nodeSelector 标签(Label)是附加到 Kubernetes 对象上的键值对,如果用 json 表示附加到 metadata 的 label: "metadata": { "labels": { "key1" : "value1", "key2" : "value2" } } yaml: metadata: labels: key1: "value1&quo

  • JSONP跨域GET请求解决Ajax跨域访问问题

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaScript或jQuery是在Web前端开发中经常使用的动态脚本技术.在JavaScript中,有一个很重要

  • asp.net Forms身份验证和基于角色的权限访问

    主要思想:Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面. 具体步骤:     1.创建一个网站,结构如下:         网站根目录             Admin目录            ---->    管理员目录                 Manager.aspx        ---->    管理员可以访问的页面             Users目录            ---->    注册用户目录         

  • 解析C++中派生的概念以及派生类成员的访问属性

    C++继承与派生的概念.什么是继承和派生 在C++中可重用性是通过继承(inheritance)这一机制来实现的.因此,继承是C++的一个重要组成部分. 前面介绍了类,一个类中包含了若干数据成员和成员函数.在不同的类中,数据成员和成员函数是不相同的.但有时两个类的内容基本相同或有一部分相同,例如巳声明了学生基本数据的类Student: class Student { public: void display( ) //对成员函数display的定义 { cout<<"num: &qu

  • C++中静态成员函数访问非静态成员的实例

    C++中静态成员函数访问非静态成员的实例 实现代码: #include <iostream> /* 静态成员函数只能访问静态数据成员.静态成员函数和类以外的函数和数据,不能访问非静态数据成员,但静态成员函数或静态数据成员可由任意访问许可的函数访问.原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的.但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数. */ class a { public: static void FunctionA()//静态成员函数没有隐含的

  • 浅析JSONP解决Ajax跨域访问问题的思路详解

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaScript或jQuery是在Web前端开发中经常使用的动态脚本技术.在JavaScript中,有一个很重要

  • 解决AJAX中跨域访问出现'没有权限'的错误

    禁止访问非同域的网站,下面一个例子来访问http://www.google.cn, <script type="text/javascript"> function createobj() { if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { return new XMLHttpReq

随机推荐