前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快给你的Kubernetes集群建一个只读账户(防止高管。。。后)

快给你的Kubernetes集群建一个只读账户(防止高管。。。后)

作者头像
院长技术
发布2021-02-19 14:34:20
1.2K0
发布2021-02-19 14:34:20
举报
文章被收录于专栏:院长运维开发

需求:

我们知道搭完k8s集群会创建一个默认的管理员kubernetes-admin用户该用户拥有所以权限,有一天开发或测试的同学需要登录到k8s集群了解业务pod的状态等,我们不可能提供管理员的账户给他不安全如果他因为某个高管。。。删库跑路啥办??,所以建一个只读账户迫在眉睫。

kubectl conifg命令常见操作:

代码语言:javascript
复制
kubectl config view:打印kubeconfig⽂件内容。
kubectl config set-cluster:设置kubeconfig的clusters配置段。
kubectl config set-credentials:设置kubeconfig的users配置段。
kubectl config set-context:设置kubeconfig的contexts配置段。
kubectl config use-context:设置kubeconfig的current-context配置段。

kubectl config view

一、我是用kubeadm部署的集群,给只读账户jackhe创建私钥及证书文件,并保存在/etc/kubernetes/pki目录下。

1)生成私钥文件。

代码语言:javascript
复制
cd /etc/kubernetes/pki/
umask 077;openssl genrsa -out jackhe.key 2048

2)创建证书部署请求,关键点其中-subj选项中的CN的值将被kubeconfig最为用户名使用。

代码语言:javascript
复制
openssl req -new -key jackhe.key -out jackhe.csr -subj "/CN=jackhe"

3)用kubernetes集群生成的CA签署证书,设置有限时间3650天。

代码语言:javascript
复制
openssl x509 -req -in jackhe.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out jackhe.crt -days 3650

4)验证证书信息。

代码语言:javascript
复制
openssl x509 -in jackhe.crt  -text -noout

二、创建一个新的集群信息,因为最终我们是提供config给使用者,默认的config文件有管理员信息当我们执行:kubectl config use-context kubernetes-admin@kubernetes就拥有了管理权限,这是不被允许的。

代码语言:javascript
复制
kubectl config set-cluster mycluster --kubeconfig=/tmp/config --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server="https://192.168.10.129:6443"

选项:

代码语言:javascript
复制
--kubeconfig="":配置文件存放路径
--certificate-authority="": 设置kuebconfig配置文件中集群选项中的certificate-authority路径。
--embed-certs=false: 设置kuebconfig配置文件中集群选项中的embed-certs开关。
--server="": 设置kuebconfig配置文件中集群选项中的server。

三、配置客户端证书及密钥,⽤户名信息会通过命令从证书Subject的CN值中⾃动提取,例如前⾯创建csr时使⽤的“CN=jackhe”.

代码语言:javascript
复制
kubectl config set-credentials jackhe --embed-certs=true --client-certificate=/etc/kubernetes/pki/jackhe.crt --client-key=/etc/kubernetes/pki/jackhe.key --kubeconfig=/tmp/config

选项:

代码语言:javascript
复制
--client-certificate="": 设置kuebconfig配置文件中用户选项中的证书文件路径。
--client-key="": 设置kuebconfig配置文件中用户选项中的证书密钥路径。
--embed-certs=false: 设置kuebconfig配置文件中用户选项中的embed-certs开关。

四、配置context,⽤来组合cluster和credentials,即访问的集群的上下⽂。

代码语言:javascript
复制
kubectl config set-context jackhe@mycluster --cluster=mycluster --user=jackhe --kubeconfig=/tmp/config

注意:

代码语言:javascript
复制
jackhe@mycluster要对应上你新建的集群名字!!!

五、指定上下文切换到jackhe访问集群,我们能看到现在是没有任何权限的。

代码语言:javascript
复制
kubectl config use-context jackhe@mycluster --kubeconfig=/tmp/config
kubectl config view --kubeconfig=/tmp/config
kubectl get pod --kubeconfig=/tmp/config

六、接下来我们基于RBAC建立只读ClusterRole文件(权限可配置)。

代码语言:javascript
复制
kubectl apply -f  readonly.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: cluster-readonly
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/attach
  - pods/exec
  - pods/portforward
  - pods/proxy
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - endpoints
  - persistentvolumeclaims
  - replicationcontrollers
  - replicationcontrollers/scale
  - secrets
  - serviceaccounts
  - services
  - services/proxy
  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

七、创建基于用户jackhe的ClusterRoleBinding文件。

代码语言:javascript
复制
kubectl apply -f readonly.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: cluster-readonly
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-readonly
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: jackhe

八、我们这时再测试已经有了只读权限。

代码语言:javascript
复制
kubectl get pod --kubeconfig=/tmp/config

九、大功告成,接下来我们只要把/tmp/config文件放到用户的家目录.kube下就可以使用了。

代码语言:javascript
复制
mkdir -p /home/jackhe/.kube
cp /tmp/config /home/jackhe/.kube/
chown -R jackhe.jackhe /home/jackhe/.kube/

OS切换到jackhe用户,我们能看到只有只读权限,也无法 上下文切换到kubernetes-admin@kubernetes ,因为配置文件里并没有相关信息。哈哈,还想删库跑路!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求:
  • kubectl conifg命令常见操作:
  • kubectl config view
  • 一、我是用kubeadm部署的集群,给只读账户jackhe创建私钥及证书文件,并保存在/etc/kubernetes/pki目录下。
    • 1)生成私钥文件。
      • 2)创建证书部署请求,关键点其中-subj选项中的CN的值将被kubeconfig最为用户名使用。
        • 3)用kubernetes集群生成的CA签署证书,设置有限时间3650天。
          • 4)验证证书信息。
          • 二、创建一个新的集群信息,因为最终我们是提供config给使用者,默认的config文件有管理员信息当我们执行:kubectl config use-context kubernetes-admin@kubernetes就拥有了管理权限,这是不被允许的。
            • 选项:
            • 三、配置客户端证书及密钥,⽤户名信息会通过命令从证书Subject的CN值中⾃动提取,例如前⾯创建csr时使⽤的“CN=jackhe”.
              • 选项:
              • 四、配置context,⽤来组合cluster和credentials,即访问的集群的上下⽂。
                • 注意:
                • 五、指定上下文切换到jackhe访问集群,我们能看到现在是没有任何权限的。
                • 六、接下来我们基于RBAC建立只读ClusterRole文件(权限可配置)。
                • 七、创建基于用户jackhe的ClusterRoleBinding文件。
                • 八、我们这时再测试已经有了只读权限。
                • 九、大功告成,接下来我们只要把/tmp/config文件放到用户的家目录.kube下就可以使用了。
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档