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

LouisHe LouisHe     2022-12-24     501

关键词:

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

kubectl conifg命令常见操作:

  • 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)生成私钥文件。

cd /etc/kubernetes/pki/
umask 077;openssl genrsa -out jackhe.key 2048

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

openssl req -new -key jackhe.key -out jackhe.csr -subj "/CN=jackhe"

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

openssl x509 -req -in jackhe.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out jackhe.crt -days 3650

 4)验证证书信息。

openssl x509 -in jackhe.crt  -text -noout

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

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" 

  选项:

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

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

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 

 选项:

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

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

kubectl config set-context jackhe@mycluster --cluster=mycluster --user=jackhe --kubeconfig=/tmp/config

  注意: jackhe@mycluster要对应上你新建的集群名字!!!
五、指定上下文切换到jackhe访问集群,我们能看到现在是没有任何权限的。

kubectl config use-context jackhe@mycluster --kubeconfig=/tmp/config
kubectl config view --kubeconfig=/tmp/config 
kubectl get pod --kubeconfig=/tmp/config

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

 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
  - watch

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

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

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

kubectl get pod --kubeconfig=/tmp/config

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

mkdir -p /home/jackhe/.kube
cp /tmp/config /home/jackhe/.kube/
chown -R jackhe.jackhe /home/jackhe/.kube/

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

 

如何在一个 Kubernetes 集群中的命名空间之间隔离 Keycloak Infinispan,以防止 KC pod 相互发现和同步

】如何在一个Kubernetes集群中的命名空间之间隔离KeycloakInfinispan,以防止KCpod相互发现和同步【英文标题】:HowcanisolateKeycloakInfinispanbetweennamespacesinoneKubernetesclustertopreventKCpodfromdiscoveringandsynchronizingfromoneother【发布时间】:2022-01-150... 查看详情

如何防止误用 kubernetes 服务帐号

】如何防止误用kubernetes服务帐号【英文标题】:Howtopreventmisuseofkubernetesserviceaccount【发布时间】:2018-06-2709:56:34【问题描述】:我正在尝试使用PodSecurityPolicy来强化我的集群。我创建了2个Pod安全策略,一个是默认的,它允许最小... 查看详情

访问在 kubernetes 集群中创建的微服务 (Laravel/Lumen PHP)

】访问在kubernetes集群中创建的微服务(Laravel/LumenPHP)【英文标题】:Accessingamicroservicecreatedinsideakubernetescluster(Laravel/LumenPHP)【发布时间】:2021-08-0807:00:07【问题描述】:我在理解和让它发挥作用时遇到了一些麻烦。所以基本上我已... 查看详情

kubernetes初探[1]:部署你的第一个asp.netcore应用到k8s集群(代码片段)

...:https://www.cnblogs.com/RainingNight/p/first-aspnetcore-app-in-k8s.htmlKubernetes简介Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(CloudNativeComputingFoundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,... 查看详情

Kubernetes 中的集群 IP 是啥?

】Kubernetes中的集群IP是啥?【英文标题】:WhatistheclusterIPinKubernetes?Kubernetes中的集群IP是什么?【发布时间】:2016-01-2904:56:02【问题描述】:我创建了一个由三个节点组成的集群:一个主节点,两个小节点。如何在Kubernetes中查看... 查看详情

防止 Kubernetes 中的命名空间间通信

】防止Kubernetes中的命名空间间通信【英文标题】:Preventinter-namespacecommunicationinKubernetes【发布时间】:2018-07-3109:06:09【问题描述】:我是Kubernetes网络的新手。我们将Kubernetes集群分成一组命名空间(例如namespace-a、namespace-b)。每... 查看详情

k8s1.9.0安装--完整集群部署(代码片段)

三、完整集群部署-kubernetes-with-ca1.理解认证授权1.1为什么要认证想理解认证,我们得从认证解决什么问题、防止什么问题的发生入手。防止什么问题呢?是防止有人入侵你的集群,root你的机器后让我们集群依然安全吗?不是吧... 查看详情

Kubernetes 中 rethinkdb 集群的高可用性问题

】Kubernetes中rethinkdb集群的高可用性问题【英文标题】:Highavailabilityissuewithrethinkdbclusterinkubernetes【发布时间】:2015-10-2111:25:17【问题描述】:我正在kubernetes中设置rethinkdb集群,但它不能按预期工作以满足高可用性要求。因为当... 查看详情

当 vault 部署在专用集群上时,如何从另一个 kubernetes 集群访问 vault secret?

】当vault部署在专用集群上时,如何从另一个kubernetes集群访问vaultsecret?【英文标题】:Howtoaccessvaultsecretsfromanotherkubernetesclusterwhenvaultisdeployedonadedicatedcluster?【发布时间】:2019-10-0104:02:36【问题描述】:我在AWS的同一区域中的同... 查看详情

pod 没有在 kubernetes 中创建,但存在部署?

】pod没有在kubernetes中创建,但存在部署?【英文标题】:podarenotgettingcreatedinkubernetesbutdeploymentexists?【发布时间】:2019-10-2517:56:41【问题描述】:我有一个在Azure云上运行的集群。我在该集群上部署了对等服务。但是该部署的pod... 查看详情

如何保护 Google Kubernetes Engine (GKE) 中的只读端口 10255?

】如何保护GoogleKubernetesEngine(GKE)中的只读端口10255?【英文标题】:Howtosecuretheread-onlyport10255inGoogleKubernetesEngine(GKE)?【发布时间】:2019-11-1505:19:47【问题描述】:我使用以下命令创建了一个GKE私有集群(版本:1.13.6-gke.13):gcloudc... 查看详情

kubernetes之节点详解(代码片段)

一、节点概述Kubernetes通过将容器放入在节点(Node)上运行的Pod中来执行你的工作负载。节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。每个节点包含运行Pods所需的服务;这些节点由控制面负责管... 查看详情

Cassandra - 在另一个集群中创建一个表的“读取”版本

】Cassandra-在另一个集群中创建一个表的“读取”版本【英文标题】:Cassandra-Createa"read"versionofatableinanothercluster【发布时间】:2019-06-2419:01:46【问题描述】:我目前有两个具有不同拓扑的Cassandra集群(将其命名为集群A和集... 查看详情

如何防止在 Kubernetes 中由 HPA 创建的特定时间段内新扩展的 Pod 缩减?

】如何防止在Kubernetes中由HPA创建的特定时间段内新扩展的Pod缩减?【英文标题】:HowtopreventscaledownofnewlyscaleduppodforspecificperiodoftimewhichwascreatedbyHPAinKubernetes?【发布时间】:2020-10-0107:33:10【问题描述】:我在DigitalOcean中设置了一个... 查看详情

在 K3s Kubernetes 中创建 NFS 共享的链接

】在K3sKubernetes中创建NFS共享的链接【英文标题】:CreatingalinktoanNFSshareinK3sKubernetes【发布时间】:2020-10-0422:24:16【问题描述】:我对Kubernetes很陌生,并试图让node-red在一个小的树莓派集群上运行我很高兴地做到了这一点,但注意... 查看详情

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”

】无法在Kubernetes集群中执行GitLabRunner:无法在命名空间“gitlab”中的API组“”中创建资源“秘密”【英文标题】:NotabletoexecuteGitLabRunnerinKubernetescluster:cannotcreateresource"secrets"inAPIgroup""inthenamespace"gitlab"【发... 查看详情

Kubernetes 节点的跨账户 ECR 访问

】Kubernetes节点的跨账户ECR访问【英文标题】:CrossaccountECRaccessforkubernetesnodes【发布时间】:2020-05-2307:42:47【问题描述】:我需要一个涉及两个或多个AWS账户的拓扑:我的生产帐户,我在其中将应用程序映像发布到ECR,并将其他... 查看详情

你的薪资的高低取决你对容器集群管理系统kubernetes(k8s)的理解程度

Kubernetes(K8S)的基础概念一、Kubernetes介绍1.1什么是Kubernetes?1.2为什么需要K8S?二、K8S的特性三、Kubernetes集群架构与组件四、Kubernetes的核心组件4.1Master组件1)Kube-apiserver2)Kube-controller-manage 查看详情