k8s基于RBAC的权限控制,赋予pod访问k8s API的权限

部署在k8s集群中的应用,有些需要拥有访问k8s API服务器的权限,比如说获取当前命名空间下的pod,svc等资源。k8s通过RBAC规则来赋予用户、pod、组相应的权限。其中pod使用一种称为service accounts的机制,下面我们来实践如何为pod中的应用添加权限。

首先需要在命名空间中创建serviceaccount资在这里插入图片描述
yaml详细内容如下:
在这里插入图片描述
接着创建role(角色),role中包含角色所具有的功能,yaml内容如下:
在这里插入图片描述
yaml中定义了角色有获取default命名空间中pods的权限。
然后定义rolebinding(角色绑定),将角色绑定到上面创建的serviceaccount,
在这里插入图片描述
yaml文件内容如下:
在这里插入图片描述
创建一个pod进行测试,yaml文件如下
在这里插入图片描述
文件中serviceaccountname的值为上述绑定了角色的serviceaccount。

serviceaccount关联了一个configmap,绑定到pod之后,configmap被挂载到pod中,/var/run/secrets/kubernetes.io/serviceaccount/目录下包含三个文件,分别是
在这里插入图片描述
pod可以通过使用ca.crt和token来访问API服务器。
进入容器中,使用curl命令来获取default命名空间下pod,在get请求中带上ca.crt和token,如下
在这里插入图片描述
返回结果的部分如下:
在这里插入图片描述
API服务器返回了pod的详细信息。
除了pod,svc等属于某个命名空间的资源外,还可以获取非命名空间级别的k8s集群,包括pv等,需要使用到clusterrole(集群角色)资源,采用clusterrolebinding(集群角色绑定)将集群角色绑定到serviceaccount上。
serviceaccount,role和rolebinding必须属于某个命名空间下。假如A命名空间下的应用想要访问到B命名空间下的资源,可以将A命名空间下的serviceaccount绑定到B命名空间下的role。也可以将A命名空间下的serviceaccount绑定到clusterrole,让其可以获取所有命名空间下的资源。
clusterrole还可以允许访问非资源型的URL,如下图所示:
在这里插入图片描述
为了方便使用,k8s提供了一些clusterrole,部分如下图所示:
在这里插入图片描述用户可以直接使用k8s提供的集群角色,从命名中可以看出,这些集群角色包括pod,pv,pvc,job,namespace等k8s本身提供的资源,可以根据不同的需求选择不同的集群角色,还可以将多个角色绑定到一个serviceaccount上。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s学习 介绍 序⾔ 课程介绍 Docker 基础 Docker 简介 镜像和容器的基本操作 Dockerfile 定制镜像 私有镜像仓库 数据共享与持久化 Docker 的⽹络模式 Docker 三架⻢⻋ Docker Compose Docker Machine Docker Swarm Docker 实践 图形化管理和监控 Docker 的多阶段构建 Dockerfile 最佳实践 Kubernetes 基础 Kubernetes 初体验 基本概念与组件 kubeadm 搭建集群 使⽤ kubeadm 搭建集群环境 安装 Dashboard 插件 17.1 7.2 7.3 7.4 7.5 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 9.1 9.2 9.3 10.1 10.2 10.3 11.1 11.2 11.3 深⼊理解 Pod YAML ⽂件 静态 Pod Pod Hook Pod 的健康检查 初始化容器 常⽤对象操作: Replication Controller 与 Replica Set Deployment HPA Job/CronJob Service ConfigMap Secret RBAC 部署Wordpress示例 DaemonSet 和 StatefulSet 持久化存储: PV PVC StorageClass 服务发现 kubedns ingress 安装配置 ingress tls 和 path 的使⽤ 包管理⼯具 Helm Helm 的安装使⽤ Helm 的基本使⽤ Helm 模板之内置函数和Values 211.4 11.5 11.6 11.7 11.8 12.1 12.2 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 14.1 14.2 15.1 15.2 15.3 15.4 15.5 15.6 15.7 Helm 模板之模板函数与管道 Helm 模板之控制流程 Helm 模板之命名模板 Helm 模板之其他注意事项 Helm Hooks 调度器 Kubernetes 调度器介绍 Kubernetes 亲和性调度 集群监控 ⼿动安装 Prometheus 监控 Kubernetes 集群应⽤ 监控 Kubernetes 集群节点 监控 Kubernetes 常⽤资源对象 Grafana 的安装使⽤ AlertManager 的使⽤ Prometheus Operator 的安装 ⾃定义Prometheus Operator 监控项 Prometheus Operator⾼级配置 ⽇志收集 ⽇志收集架构 搭建 EFK ⽇志系统 CI/CD: 动态 Jenkins Slave Jenkins Pipeline 部署 Kubernetes 应⽤ Jenkins BlueOcean Harbor Gitlab Gitlab CI Devops
一、安装准备: 1.环境 主机名 IP k8s-master 192.168.250.111 k8s-node01 192.168.250.112 k8s-node02 192.168.250.116 2.设置主机名 hostnamectl --static set-hostname k8s-master hostnamectl --static set-hostname k8s-node01 hostnamectl --static set-hostname k8s-node02 3.关闭防火墙和selinux systemctl disable firewalld systemctl stop firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 执行完成后重启虚拟机。 4.在master机器上安装ansible 执行命令:sudo yum install ansible (离线处理补充) 5.配置 ansible ssh密钥登录,此操作需要在所有机器上执行 ssh-keygen -t rsa -b 2048 回车 回车 回车 ssh-copy-id $IP #$IP为所有虚拟机,按照提示输入yes 和root密码 (密钥补充) 二、安装kubernetes集群 进入ansible安装路径 : cd /etc/ansible 将路径下的roles文件夹和hosts文件删除。 解压压缩文件kubeasz.zip文件,将解压后的内容放入当前目录下(/etc/ansible) 根据搭建集群环境要求,进入/etc/ansible/example 目录下选取 hosts.allinone.example 单节点AllInOne hosts.m-masters.example 单主多节点 hosts.s-master.example 多主多节点 红色标记的是需要自行修改的地方 修改完成后将文件名改为hosts 放入/etc/ansible/目录下。 安装prepare ansible-playbook 01.prepare.yml 安装etcd ansible-playbook 02.etcd.yml 安装kubectl命令 ansible-playbook 03.kubectl.yml 安装docker ansible-playbook 04.docker.yml 如果执行时出现报错: 可忽略。 解决方法: 在master节点上执行:curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 所有机器上执行: wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum install jq -y 在重新执行: ansible-playbook 04.docker.yml 安装calico ansible-playbook 05.calico.yml 部署master节点 ansible-playbook 06.kube-master.yml 加入node节点 ansible-playbook 07.kube-node.yml 如果执行成功,k8s集群就安装好了。 三、验证安装 如果提示kubectl: command not found,退出重新ssh登陆一下,环境变量生效即可 kubectl version #查看kubernetes版本 kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等组件 Healthy kubectl cluster-info # 可以看到kubernetes master(apiserver)组件 running kubectl get node # 可以看到单 node Ready状态 kubectl get pod --all-namespaces # 可以查看所有集群pod状态 kubectl get svc --all-namespaces # 可以查看所有集群服务状态 calicoctl node status # 可以在master或者node节点上查看calico网络状态 四、安装主要组件 安装kubedns kubectl create -f manifests/kubedns 安装heapster kubectl create -f manifests/heapster 安装dashboard kubectl create -f manifests/dashboard 访问dashboard 先执行命令查看dashboard的NodePort 端口 kubectl get svc -n kube-system 访问web页面 https://masterIP: 7443 选择令牌按钮 ,用命令查询登录令牌 之前安装过 heapster 执行命令:kubectl get secret -n kube-system 查询 heapster-token-twpw4 的详细内容 执行命令:kubectl describe secret heapster-token-twpw4 -n kube-system Token就是登录令牌,复制登录就好了 安装ingress kubectl create -f manifests/ingress/ 安装EFK(elasticsearch+ fluentd + kibana) 首先进入 manifests/EFK 文件夹下 (cd /etc/ansible/manifests/EFK) 查看并修改 ceph-sercet.yaml 文件。 此key值是 ceph存储用户的token值 ,将此key值转换为base64 将文件中红色选选中部分修改为转换后的值。 修改完成后 部署 pv 和 pvc 执行命令:kubectl create -f es-pv-data.yaml kubectl create -f es-pvc-data.yaml 部署fluentd 执行命令:kubectl create -f fluentd-rbac.yml -f fluentd-configmap.yml -f fluentd-daemonset.yml 部署elasticsearch 先设置node节点中role ,指定master client data 部署位置 执行命令:kubectl get nodes kubectl label node 10.2.0.244 role=master (10.2.0.244 是我本机kubernetes 的master节点 ,所以我也将此master也部署在这里) 其余的两个节点分别是data 和 client 执行命令:kubectl create -f es-discovery-svc.yaml -f es-svc.yaml -f es-master.yaml -f es-client.yaml -f es-data.yaml 其中部署elasticsearch集群需要注意一些事项 : Master节点一般只有一个 并且提供9300 端口 客户端通讯使用 Client 节点一般提供9200端口 用于连接kibana 和 fluentd http访问使用 Data 节点是提供数据存储,持久化对data节点进行就可以。 其中 master , client , data 部署文件中 配置的 CLUSTER_NAME 指的是 elasticsearch集群名称 Java运行自行设置,最大值和最小值需要一致。 最小为-Xms256m 部署kibana 执行命令:kubectl create -f kibana-svc.yaml -f kibana.yaml 这里需要注意 kibana.yaml 文件中 参数的设置 这里的CLUSTER_NAME 也是elasticsearch部署文件中设置的集群名称。 #安装 flannel 执行命令: cd /etc/ansible/roles/flannel 先修改kube-flannel.yml文件 --iface 对应的是本机的网卡名称 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ] 修改完成后 执行: kubectl create -f kube-flannel-rbac.yml kubectl apply -f kube-flannel.yml
RBAC(Role-Based Access Control)、ServiceAccount、ClusterRoleBinding和ClusterRole是Kubernetes的几个重要概念,它们之间有以下区别: 1. RBAC(Role-Based Access Control):RBAC是Kubernetes中的一种访问控制机制,用于定义和管理用户、ServiceAccount或其他身份对Kubernetes资源的访问权限RBAC通过角色(Role)和绑定(Binding)的方式实现权限控制。 2. ServiceAccount:ServiceAccount是Kubernetes中用于身份验证和授权的一种特殊类型的账户。每个Pod都会自动关联一个ServiceAccount,它用于标识Pod内运行的应用程序或容器。ServiceAccount可以用于与Kubernetes API进行交互,并通过ClusterRoleBinding与ClusterRole进行绑定来获取特定的权限。 3. ClusterRoleBinding:ClusterRoleBinding用于将ClusterRole与用户、ServiceAccount或其他身份进行绑定,从而赋予它们集群级别的权限。ClusterRoleBinding在整个集群范围内生效,可以授予身份对集群级别资源的访问权限。 4. ClusterRole:ClusterRole是Kubernetes中定义权限规则的一种资源对象,用于授予对集群级别资源的操作权限。ClusterRole定义了一组权限规则,可以被绑定到用户、ServiceAccount或其他身份上,通过ClusterRoleBinding赋予它们相应的权限。 总结来说,RBAC是Kubernetes中的访问控制机制,ServiceAccount是用于身份验证和授权的账户,ClusterRoleBinding用于将ClusterRole与身份进行绑定,赋予集群级别的权限,而ClusterRole是定义权限规则的资源对象。它们共同工作,用于实现对Kubernetes资源的访问控制权限管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值