关键词:
需求:我们知道搭完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 查看详情