AliYun kubernetes 按应用人员设置权限

简介: 1.  前言:         aliyun 上采用容器服务 kubernetes 部署某业务的所有应用,每个应用有不同的Owner, 开发人员, 运维,需要根据应用分配不同的人访问权限。 需求: 运维人员(集群管理人员)---> 所有应用配置读写; 应用owner与运维 --> 所属应用的配置读写; 应用开发测试等人员

1.  前言:

        aliyun 上采用容器服务 kubernetes 部署某业务的所有应用,每个应用有不同的Owner, 开发人员, 运维,需要根据应用分配不同的人访问权限。

需求:

  • 运维人员(集群管理人员)---> 所有应用配置读写;
  • 应用owner与运维 --> 所属应用的配置读写;
  • 应用开发测试等人员 --> 只读访问应用的配置,并可以进入 POD 维护;

所有人员通过堡垒机运维线上系统,堡垒机审计功能记录运维人员的操作过程。

使用 Kubernetes RBAC 实现应用授权。

堡垒机运维 k8s 容器服务应用

2. 实现流程:

2.1  前置规约:

  • aliyun 购买堡垒机;
  • aliyun 上购买一台低配 ECS 作为堡垒机的跳板机;
  • 堡垒机跳板机获取需要分配权限的 k8s 集群的Master 证书,用以制作子证书;
  • 应用在 k8s 集群中按照namespace 分区部署。

2.2 k8s 集群授权:

2.2.1 用户证书生成:

堡垒机上建立应用操作用户,例如:{app_name}-dev, 命令如下:

## 堡垒机的跳板机上建立用户
useradd {USER_NAME}
## 为用户设置密码,该密码将用户堡垒机设置凭证登录
echo '{passwork}' | passwd --stdin {USER_NAME}
## 使用 Master 根证书 生成 用户证书
openssl genrsa -out ${USER_NAME}.key 2048
## generate user.csr
openssl req -new -key ${USER_NAME}.key -out ${USER_NAME}.csr -subj "/CN=${USER_NAME}/O=ProjectY"
## generate user.crt
openssl x509 -req -in ${USER_NAME}.csr -CA /root/cert/ca.crt -CAkey /root/cert/ca.key -CAcreateserial -out ${USER_NAME}.crt -days 356
## 建立用户证书存放目录
mkdir /home/${USER_NAME}/.cert
mv ${USER_NAME}.* /home/${USER_NAME}/.cert
chown ${USER_NAME}:${USER_NAME} /home/${USER_NAME}/.cert/${USER_NAME}.*
mkdir /home/${USER_NAME}/.kube
## 生成用户证书
kubectl config set-cluster kubernetes --certificate-authority=/home/admin/cert/${AREA}/ca.crt --embed-certs=true --server=${SERVER} --kubeconfig=/home/${USER_NAME}/.kube/config
kubectl config set-credentials ${USER_NAME} --client-certificate=/home/${USER_NAME}/.cert/${USER_NAME}.crt  --client-key=/home/${USER_NAME}/.cert/${USER_NAME}.key --kubeconfig=/home/${USER_NAME}/.kube/config
chown -R ${USER_NAME}:${USER_NAME} /home/${USER_NAME}/
## 设置证书context 切换到指定命名空间
kubectl config set-context ${USER_NAME}-context --cluster=kubernetes --namespace=${NAME_SPACE} --user=${USER_NAME} --kubeconfig=/home/${USER_NAME}/.kube/config

 

2.2.2  设置 k8s role与 rolebinding:

针对应用不同角色用户,设置 namespace 的不同操作权限,比如应用开发人员只读权限,生成 role 与 rolebinding 的 yaml 如下:

## role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: '${ROLE_NAME}' 
  namespace: '${NAME_SPACE}' 
rules:
- apiGroups: 
  - ""
  resources: ## 只能访问 pod 和 pod 的日志
  - pods
  - pods/log
  verbs:  ## 只读权限
  - get
  - list
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create

## rolebing.yaml, 指定该 role 只能访问指定 namespaces
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: '${USER_NAME}'
  namespace: '${NAME_SPACE}'
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: '${ROLE_NAME}'
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: '${USER_NAME}'

同理,你还可以设置其它角色的用户,授予相应权限;

生成 k8s 集群的 role 和 rolebinding:

# 生成 role与 rolebinding
kubectl create -f role-${ROLE_NAME}.yaml
kubectl create -f rolebind-${USER_NAME}.yaml

# 查看当前用户的 config
kubectl config view --cluster=kubernetes --namespace=${NAME_SPACE} --user=${USER_NAME} --kubeconfig=/home/${USER_NAME}/.kube/config
# 设置当前用户默认到该 namespace
kubectl config use-context ${USER_NAME}-context --cluster=kubernetes --namespace=${NAME_SPACE} --user=${USER_NAME} --kubeconfig=/home/${USER_NAME}/.kube/config
# 查看用户 config
kubectl config view --cluster=kubernetes --namespace=${NAME_SPACE} --user=${USER_NAME} --kubeconfig=/home/${USER_NAME}/.kube/config

 

至此,堡垒机访问 k8s 集群的跳板机上不同应用的设置完成,下面需要设置堡垒机访问。

2.3 堡垒机配置:

  • 设置堡垒机资源的服务器,指向 k8s 访问的跳板机;
  • 使用前文添加的证书和用户,设置每个应用在跳板机上用户的凭证;
  • 建立授权组,授权相关用户指向授权组和服务器。

 

 

 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
29天前
|
Prometheus Kubernetes 监控
容器服务ACK常见问题之pod设置securityContext调整参数失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
41 4
|
3月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
34 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
92 0
|
6天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
17 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
30天前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
61 0