zoukankan      html  css  js  c++  java
  • K8S权限控制,限制用户在多个namespace上的访问权限

    前言


    kubernetes应用越来越广泛,我们kubernetes集群中也会根据业务来划分不同的命名空间,随之而来的就是安全权限问题,我们不可能把集群管理员账号分配给每一个人,有时候可能需要限制某用户对某些特定命名空间的权限,比如开发和测试人员也可能需要登录集群,了解应用的运行情况,查看pod的日志,甚至是修改某些配置。这时候,我们可以通过创建受限的kubeconfig文件,将该config分发给有需要的人员,让他们能通过kubectl命令实现一些允许的操作。

    创建集群级别的角色 ClusterRole

    clusterrole.dev-log.yaml 用于提供对pod的完全权限和其它资源的查看权限.

    # 提供基本权限
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
      name: dev-log
    rules:
    - apiGroups:
      - ""
      resources:
      - pods
      - pods/exec
      verbs:
      - create
      - get
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - pods
      verbs:
      - delete
    - apiGroups:
      - ""
      resources:
      - endpoints
      - services
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - bindings
      - events
      - limitranges
      - namespaces/status
      - pods/log
      - pods/status
      - replicationcontrollers/status
      - resourcequotas
      - resourcequotas/status
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - namespaces
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - apps
      resources:
      - deployments
      - deployments/rollback
      - deployments/scale
      - statefulsets
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - autoscaling
      resources:
      - horizontalpodautoscalers
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - batch
      resources:
      - cronjobs
      - jobs
      - scheduledjobs
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - extensions
      resources:
      - daemonsets
      - deployments
      - ingresses
      - replicasets
      verbs:
      - get
      - list
      - watch
    

    在default命名空间应用配置文件:

    $ kubectl apply -f clusterrole.dev-log.yaml -n default
    $ kubectl get ClusterRole -n default
    

    在default命名空间创建 ServiceAccount

    创建ServiceAccount后,会自动创建一个绑定的 secret ,后面在kubeconfig文件中,会用到该secret中的token.

    $ kubectl create serviceaccount dev -n default
    $ kubectl get serviceaccount -n default
    

    对ServiceAccount和集群角色建立绑定关系

    对需要的namespace进行授权,以下示例为对app命名空间授权。

    $ kubectl create rolebinding rbd-dev --clusterrole=dev-log --serviceaccount=default:dev --namespace=app
    

    获取ServiceAccount的secret中的token

    $ kubectl get serviceaccounts dev -o yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: "2020-06-03T06:36:29Z"
      name: dev
      namespace: app
      resourceVersion: "2633621"
      selfLink:xxx
      uid: xx
    secrets:
    - name: dev-token-v97rh
    

    对应的secret名称为:dev-token-v97rh。

    $ kubectl get secrets dev-token-v97rh -o yaml
    apiVersion: v1
    data:
      ca.crt: xxx
    namespace: aGFkb29w
    token:  xxx
    kind: Secret
    metadata:
      annotations:
        kubernetes.io/service-account.name: dev
        kubernetes.io/service-account.uid: xxx
      creationTimestamp: "2020-06-03T06:36:29Z"
      name: dev-token-v97rh
      namespace: app
      resourceVersion: "2633620"
      selfLink: xxx
      uid:xxx
    type: kubernetes.io/service-account-token
    

    该secret的token为:
    token=xxx
    该token是经过base64处理的,需要进行解码处理

    $ echo $token | base64 -d
    xxx
    

    组装config文件

    将token填充到以下的config配置中:

    # config
    apiVersion: v1
    kind: Config
    clusters:
    - cluster:
        server: K8S集群地址
        certificate-authority-data: "ca.crt后的内容"
      name: k8s-dev
    users:
    - name: "devlog"
      user:
        token: "解码后的token字符串"
    contexts:
    - context:
        cluster: dev
        user: "dev"
      name: dev
    preferences: {}
    current-context: dev
    

    将该文件保存为config 并放入 $HOME/.kube/ 目录下即可。
    至此,k8s限制用户在多个namespace上的访问权限操作完成。

    后记

    K8S权限控制是很复杂的,本文只是最简单的一种,因为工作需要,做个记录。后面有其他的需求再做补充。

  • 相关阅读:
    使用 WebSphere Adapter for SAP Software V7.5 配置 SAP 系统和客户端之间的安全网络通信 (SNC)
    在 ubuntu 12.04 上安装 redmine
    配置nat稳定网络防病毒
    利用 Replication Handler 备份索引
    .NET 4.5对Base Class Library做出改善
    redmine 和 gitolite 的整合
    IBM Power7 服务器 Hypervisor 内存使用情况研究
    Word域代码的显示
    转载:深入分析MFC文档视图
    VIM常用指令
  • 原文地址:https://www.cnblogs.com/aresxin/p/k8s-sc.html
Copyright © 2011-2022 走看看