kubeconfig方式远程登录kubernetes并限制用户在特定的命名空间内

老段工作室8周年

kubeconfig方式远程登录kubernetes并限制用户在特定的命名空间内

描述

本章要实现的效果是,mary用户远程登录kubernetes,并只能在game项目里查看pod,没有其他任何权限。

实验拓扑

file
下面在master上操作

为mary用户颁发证书

随便创建一个目录存放证书,这里是/ca-mary

[root@vms61 ~]# mkdir /ca-mary
[root@vms61 ~]# cd /ca-mary
[root@vms61 ca-mary]# ls
[root@vms61 ca-mary]#

生成mary的私钥

[root@vms61 ca-mary]# openssl genrsa -out client.key 2048
Generating RSA private key, 2048 bit long modulus
.................................................................+++
.......................+++
e is 65537 (0x10001)
[root@vms61 ca-mary]#

生成mary的证书请求文件

[root@vms61 ca-mary]# openssl req -new -key client.key -subj "/CN=mary" -out client.csr
[root@vms61 ca-mary]# ls
client.csr  client.key

[root@vms61 ca-mary]#
为了方便使用,把kubernetes证书的路径定义为一个变量dir:

[root@vms61 ca-mary]# dir=/etc/kubernetes/pki/
[root@vms61 ca-mary]#

用kubernetes自带的ca私钥为mary颁发证书

[root@vms61 ca-mary]# openssl x509 -req -in client.csr -CA $dir/ca.crt -CAkey $dir/ca.key -CAcreateserial -out client.crt -days 3650
Signature ok
subject=/CN=mary
Getting CA Private Key
[root@vms61 ca-mary]# ls
client.crt  client.csr  client.key
[root@vms61 ca-mary]#

同时把kubernetes的ca的证书拷贝过来:

[root@vms61 ca-mary]# cp $dir/ca.crt .
[root@vms61 ca-mary]# ls
ca.crt  client.crt  client.csr  client.key
[root@vms61 ca-mary]#

创建测试用的命名空间

创建一个命名空间game,等会设置mary只能在game里对pod执行get操作

[root@vms61 ca-mary]# kubectl create ns game
namespace/game created
[root@vms61 ca-mary]#

并在game命名空间里创建一个pod

[root@vms61 ca-mary]# kubectl run pod1 --image=nginx --image-pull-policy=IfNotPresent
pod/pod1 created
[root@vms61 ca-mary]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          5s
[root@vms61 ca-mary]#

创建角色,并为mary授权

在game命名空间里创建role1角色,仅仅对pod具有get权限

[root@vms61 ca-mary]# kubectl create role role1 --verb=get,watch,list  --resource=pods -n game
role.rbac.authorization.k8s.io/role1 created
[root@vms61 ca-mary]#

在把role1绑定mary

[root@vms61 ca-mary]# kubectl create rolebinding role1bing --role=role1 --user mary -n game
rolebinding.rbac.authorization.k8s.io/role1bing created
[root@vms61 ca-mary]#

为mary用户配置kubeconfig文件

首先创建模板文件kubeconfig

[root@vms61 ca-mary]# cat kubeconfig
apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: cluster1

users:
- name: mary

contexts:
- context:
  name: context1
  namespace: game
[root@vms61 ca-mary]#

在此kubeconfig文件里指定master的地址及证书:

[root@vms61 ca-mary]# kubectl config --kubeconfig=kubeconfig set-cluster cluster1 --server=https://192.168.26.61:6443 --certificate-authority=ca.crt --embed-certs=true
Cluster "cluster1" set.
[root@vms61 ca-mary]#

设置mary的密钥

[root@vms61 ca-mary]# kubectl config --kubeconfig=kubeconfig set-credentials mary --client-certificate=client.crt --client-key=client.key --embed-certs=true
User "mary" set.
[root@vms61 ca-mary]#

设置mary的上下文信息

[root@vms61 ca-mary]# kubectl config --kubeconfig=kubeconfig set-context context1 --cluster=cluster1 --namespace=game --user=mary
Context "context1" modified.
[root@vms61 ca-mary]#

修改kubeconfig,找到current-context

current-context: "context1"

把kubeconfig文件拷贝到客户端vms31 root家目录里。

在客户端vms30上测试

以下操作在客户端上做。
先安装kubectl命令

[root@vms30 ~]#  yum install -y  kubectl-1.18.2-0  --disableexcludes=kubernetes
    ...输出...
[root@vms30 ~]#  

设置KUBECONFIG变量

[root@vms30 ~]# export KUBECONFIG=./kubeconfig
[root@vms30 ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0            5m
[root@vms30 ~]#

可以看到正常运行。

[root@vms30 ~]# kubectl get deploy
Error from server (Forbidden): deployments.apps is forbidden: User "mary" cannot list resource "deployments" in API group "apps" in the namespace "game"
[root@vms30 ~]#

这里是没有权限查看deployment的权限。

[root@vms30 ~]# kubectl get pods -n default
Error from server (Forbidden): pods is forbidden: User "mary" cannot list resource "pods" in API group "" in the namespace "default"
[root@vms30 ~]# 

也没有查看其他命名空间里pod的权限。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读