创建k8s User Account

使用openssl方法创建普通用户

准备工作

1
2
3
4
mkdir /root/pki/
将k8s ca.pem  ca-key.pem 证书拷贝到此目录
cp /opt/kubernetes/ssl/ca-key.pem  /root/pki/
cp /opt/kubernetes/ssl/ca.pem  /root/pki/

  

一、创建证书

1.创建user私钥

1
(umask077;openssl genrsa -out dev.key2048)

2.创建证书签署请求

 O=组织信息,CN=用户名

1
openssl req -new -key dev.key -out dev.csr -subj"/O=k8s/CN=dev"

3.签署证书

1
2
3
openssl  x509 -req -in dev.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out dev.crt -days365
Signature ok
subject=/O=k8s/CN=dev

二、创建配置文件

1
2
3
4
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE      #集群配置
kubectl config set-credentials NAME --kubeconfig=/PATH/TO/SOMEFILE #用户配置
kubectl config set-context    #context配置
kubectl config use-context    #切换context
1
2
3
* --embed-certs=true的作用是不在配置文件中显示证书信息。
* --kubeconfig=/root/dev.conf用于创建新的配置文件,如果不加此选项,则内容会添加到家目录下.kube/config文件中,可以使用use-context来切换不同的用户管理k8s集群。
* context简单的理解就是用什么用户来管理哪个集群,即用户和集群的结合。

  

创建集群配置

1
2
3
4
kubectl config set-cluster k8s --server=https://192.168.124.61:6443 \
--certificate-authority=ca.pem \
--embed-certs=true  \
--kubeconfig=/root/dev.conf

  

创建用户配置

1
2
3
4
5
kubectl config set-credentials dev \
--client-certificate=dev.crt \
--client-key=dev.key \
--embed-certs=true \
--kubeconfig=/root/dev.conf

创建context配置

1
2
3
4
kubectl config set-context dev@k8s \
--cluster=k8s \
--user=dev \
--kubeconfig=/root/dev.conf

  

切换context

1
2
kubectl config use-context dev@k8s --kubeconfig=/root/dev.conf
kubectl config view --kubeconfig=/root/dev.conf

  

创建系统用户

1
2
3
4
5
useradd dev
mkdir -p /home/dev/.kube
cp /root/dev.conf /home/dev/.kube/config
chown dev.dev -R /home/dev/
su - dev

  

k8s验证文件

kubectl get pod

这个时候不成功是因为没有进行权限绑定

创建Role

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@k8s-master:~# cat > pods-reader.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pods-reader
rules:
- apiGroups:
  -""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
 EOF

  

创建Rolebinding

用户dev和role pods-reader的绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@k8s-master:~# cat >test-pods-reader.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cbmljs-pods-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: dev
EOF

   

到这一步就可以进行验证了

kubectl get pod

我们是可以查看查看default命名空间的pod,但是其他空间的pod是无法查看的。

创建ClusterRole

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@k8s-master:~# cat cluster-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-reader
rules:
- apiGroups:
  -""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

创建ClusterRoleBinding

1
2
3
4
5
6
7
8
9
10
11
12
13
root@k8s-master:~# cat cbmljs-read-all-pod.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: billy-read-all-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: dev

验证结果

kubectl get pod --all-namespaces

就可以看到所有命名空间的pod了.

权限绑定指定的namespace

也可以使用下面方法进行绑定

kubectl get clusterrole  查看系统自带角色

1
kubectl create rolebinding devuser-admin-rolebinding(rolebinding的名字) --clusterrole=admin(clusterrole的名字,admin在k8s所有namespace下都有最高权限) --user=devuser(将admin的权限赋予devuser用户) --namespace=dev(范围是dev这个namespace下) 即dev

扩展:

kubectl api-resources 可以查看apiGroups

示例:
创建集群角色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cat  clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: test-clusterrole
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get","list","watch","create","update","patch","delete"]
  - apiGroups: ["extensions","apps"]
    resources: ["deployments"]
    verbs: ["get","watch","list"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["get","list","watch","create","update","patch","delete"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch","create","update","patch","delete"]
  - apiGroups: [""]
    resources: ["namespaces","namespaces/status"]
    verbs: ["*"]   # 也可以使用['*']
  - apiGroups: ["","apps","extensions","apiextensions.k8s.io"]
    resources: ["role","replicasets","deployments","customresourcedefinitions","configmaps"]
    verbs: ["*"]

  

  

  

 集群绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master role]#  cat  test-classbind.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: test-all-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: test-clusterrole
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: test

  

 

参考:

https://blog.csdn.net/cbmljs/article/details/102953428

  

kubernetes创建用户的更多相关文章

  1. kubernetes 创建用户配置文件来访问集群API

    创建一个账号 kubectl create serviceaccount def-ns-admin 绑定集群权限 kubectl create rolebinding def-ns-admin --c ...

  2. mysql 创建用户、授权等操作

    一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...

  3. Oracle创建表空间、创建用户以及授权

    Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 为了避免麻烦,可以用’Database Configuration Assistant’向导来创建数 ...

  4. oracle创建用户

    --首先用管理员的帐户登录(要有修改用户的权限)system,默认数据库orcl. CREATE USER lcs IDENTIFIED BY lcs default tablespace lics_ ...

  5. ubuntu 创建用户

    http://www.jb51.net/article/45848.htm  创建用户

  6. Mysql创建用户并授权

    运行命令行 mysql -uroot -p 登录mysql use mysql; 创建用户:create user 'test123'@'localhost' identified by '12345 ...

  7. oracle数据库如何创建用户并授予角色

    目标:1.  创建角色test1_role,  授予 CREATE PROCEDURE, CREATE SEQUENCE, CREATE SYNONYM, CREATE TABLE, CREATE T ...

  8. oracle 创建用户

    /*分为四步 *//*第1步:创建临时表空间  */create temporary tablespace ycjy tempfile 'D:\oracledata\ycjy.dbf' size 50 ...

  9. Oracle创建表空间、创建用户以及授权、查看权限

    常用的,留着备用 1.创建临时表空间 CREATE TEMPORARY TABLESPACE test_tempTEMPFILE 'C:\oracle\product\10.1.0\oradata\o ...

随机推荐

  1. Java基础系列(11)- 变量、常量、作用域以及变量的命名规范

    变量 变量是什么:就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=valu ...

  2. jmeter 录制排除模式

    jmeter录制时,静态的资源不需要,可以在录制的时候直接排除. .*\.(bmp|css|js|gif|icov|jpeg|png|swf|woff|woff2|htm|html).* .*\.(j ...

  3. LR11可打开网页,但录制为空

    环境:WIN7+LR11+360安全浏览器9.0 LR11可打开网页,但录制为空解决方案:(3步) 1. tools-Recording Options -->Network-->Port ...

  4. Hbuilder 生成移动App资源升级包

    建立文件夹www,将需要更新的文件放置在里面. 将manifest.json文件中version字段的版本修改为新编号. 在文件夹www外建立文件update.xml,内容如下: <?xml v ...

  5. 👊 Spring技术原理系列-从零开始教你SpringEL表达式使用和功能分析讲解指南(上篇)

    Spring EL表达式语言,这种语言jsp中学到的el,但是在整个spring之中其表达式语言要更加的复杂,而且支持度更加的广泛,最重要的是他可以进行方法的调用,对象的实例化,集合操作等等,但是唯一 ...

  6. aizhan查询旁IP网站脚本

    <?php print_r("-------------------------\r\n"); print_r("-------爱站旁站查询------\r\n&q ...

  7. HCNP Routing&Switching之BGP基础

    前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...

  8. logback日志入门超级详细讲解

    基本信息 日志:就是能够准确无误地把系统在运行状态中所发生的情况描述出来(连接超时.用户操作.异常抛出等等): 日志框架:就是集成能够将日志信息统一规范后输出的工具包. Logback优势 Logba ...

  9. ajax 中文参数乱码问题不一定是编码格式问题。

    代码要修改用户的信息,写了三个ajax,第一个写完测试没有问题,后面俩逻辑一样的就直接复制粘贴了.到第二个ajax测试的时候发现中文会乱码 如下 $.ajax({//中文参数乱码 url: '/edi ...

  10. 利用Jackson序列化实现数据脱敏

    几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...