kubernetes的安全机制,不仅仅再客户端和apisever之间的交互,各pod之间后者跨namespace之间也要以此为基准配合 RBAC来进行。提到另一个账户关系serviceaccount简称sa。

  • User accounts are for humans. Service accounts are for processes, which run in pods.

创建一个属于自己的sa

[root@master song]# kubectl create sa lele
serviceaccount/lele created
[root@master song]# kubectl describe sa lele
Name: lele
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: lele-token-7mpr5
Tokens: lele-token-7mpr5
Events: <none>
[root@master song]# kubectl get secrets
NAME TYPE DATA AGE
default-token-tlx48 kubernetes.io/service-account-token 3 30d
lele-token-7mpr5 kubernetes.io/service-account-token 3 39d

创建一个pod使用这个sa

[root@master song]# cat pod-sa.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-sa
namespace: default
labels:
app: myapp
tier: frontend
2sdlfj: dashazi
spec:
containers:
- name: myapp-
image: hub.c..com/library/nginx:1.13
volumeMounts:
- name: song
serviceAccountName: lele
[root@master song]# kubectl create -f pod-sa.yml
[root@master song]# kubectl describe pods pod-sa
Name: pod-sa
Namespace: default
Priority:
PriorityClassName: <none>
Node: k8s-node1/172.20.0.76
Start Time: Thu, Mar :: +
Labels: 2sdlfj=dashazi
app=myapp
tier=frontend
Annotations: <none>
Status: Running
IP: 10.244.2.218
Containers:
myapp-:
Container ID: docker://17df9be1c9e987f2c44ec9aed90e8c499a414da82142c8494a4d8ce640883326
Image: hub.c..com/library/nginx:1.13
Image ID: docker-pullable://hub.c.163.com/library/nginx@sha256:ff094de32a0d3b5efc29cec60daa709c5378cf4e53e4c9fd1d3433b87ac8ec8b
Port: <none>
Host Port: <none>
State: Running
Started: Thu, Mar :: +
Ready: True
Restart Count:
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from lele-token-7mpr5 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
lele-token-7mpr5:
Type: Secret (a volume populated by a Secret)
SecretName: lele-token-7mpr5
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulled 7h24m kubelet, k8s-node1 Container image "hub.c.163.com/library/nginx:1.13" already present on machine
Normal Created 7h24m kubelet, k8s-node1 Created container
Normal Started 7h24m kubelet, k8s-node1 Started container
Normal Scheduled 15m default-scheduler Successfully assigned default/pod-sa to k8s-node

kubectl config 是客户端连接的配置命令

kubectl 可以定义诸多集群和与之对应的账号密码信息

[root@master song]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://172.20.0.91:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes 当前使用的用户和集群信息
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED

按照这个思路,我们创建有个自己的证书 和私钥来连接我们的集群

root@master song]# cd /etc/kubernetes/pki/
[root@master pki]# ls
apiserver.crt apiserver-etcd-client.key apiserver-kubelet-client.crt ca.crt etcd front-proxy-ca.key front-proxy-client.key sa.pub
apiserver-etcd-client.crt apiserver.key apiserver-kubelet-client.key ca.key front-proxy-ca.crt front-proxy-client.crt sa.key
[root@master pki]# (umask ;openssl genrsa -out song.key )
Generating RSA private key, bit long modulus
........................+++
.........+++
e is (0x10001)
[root@master pki]# openssl req -new -key song.key -out song.csr -subj "/CN=song"
[root@master pki]# ls
apiserver.crt apiserver-kubelet-client.key front-proxy-ca.key song.csr
apiserver-etcd-client.crt ca.crt front-proxy-client.crt song.key
apiserver-etcd-client.key ca.key front-proxy-client.key
apiserver.key etcd sa.key
apiserver-kubelet-client.crt front-proxy-ca.crt sa.pub

[root@master pki]# openssl x509 -req -in song.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out song.crt -days 3650
  Signature ok
  subject=/CN=song
  Getting CA Private Key

[root@master pki]# kubectl config set-credentials  song --client-certificate=./song.crt --client-key=./song.key
User "song" set.
[root@master pki]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://172.20.0.91:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: song
user:
client-certificate: /etc/kubernetes/pki/song.crt
client-key: /etc/kubernetes/pki/song.key
[root@master pki]# kubectl config set-context song@kubernetes --cluster=kubernetes --user=song
Context "song@kubernetes" created.
[root@master pki]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://172.20.0.91:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
- context:
cluster: kubernetes
user: song
name: song@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: song
user:
client-certificate: /etc/kubernetes/pki/song.crt
client-key: /etc/kubernetes/pki/song.key

由于此用户没有经过rbac 授权

[root@master pki]# kubectl config use-context song@kubernetes
Switched to context "song@kubernetes".
[root@master pki]# kubectl get pods
Error from server (Forbidden): pods is forbidden: User "song" cannot list resource "pods" in API group "" in the namespace "default"
[root@master pki]#

总结 user 和 serviceaccountname 是两种不同的认证suject

15.service认证机制的更多相关文章

  1. Kubernetes的认证机制

    1.了解认证机制 API服务器可以配置一到多个认证的插件(授权插件同样也可以).API服务器接收到的请求会经过一个认证插件的列表,列表中的每个插件都可以检查这个请求和尝试确定谁在发送这个请求.列表中的 ...

  2. PAM认证机制详情

    PAM(Pluggable Authentication Modules)认证机制详情 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.      一.介绍PAM PAM(Plugga ...

  3. 深入详解windows安全认证机制ntlm&Kerberos

    0x01 为什么要理解windows 安全认证机制: 加深对后续各种漏洞利用的理解深度,还是那句话,要知其然,更要知其所以然,不废话,咱们直接开始 0x02 windows认证协议主要有以下两种: 基 ...

  4. cinder服务端的keystone认证机制

    keystone在openstack中的地位 Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证.基于角色的授权管理.其他OpenStack服务的地址发现和安全策 ...

  5. CentOS-pam认证机制简介

    前言 linux下PAM模块全称是Pluggable Authentication Module for linux(可插入式授权管理模块),该由Sun公司提供,在Linux中,PAM是可动态配置的, ...

  6. PAM认证机制

    PAM:Pluggable Authentication Modules 认证库:文本文件,MySQL,NIS,LDAP等 Sun公司于1995 年开发的一种与认证相关的通用框架机制 PAM 是关注如 ...

  7. [ipsec][crypto] ike/ipsec与tls的认证机制比较

    前言 接上篇:[ipsec][crypto] 有点不同的数字证书到底是什么 本篇内容主要是上一篇内容的延伸.抽象的从概念上理解了证书是什么之后,我们接下来 从实践的角度出发,以IKEv2和TLS两个协 ...

  8. InfluxDB权限认证机制

    一.介绍 权限认证机制,顾名思义,就是对 InfluxDB 数据库添加权限访问控制,在默认情况下,InfluxDB 的权限认证机制是关闭的,也就是说所有用户都有所有权限. 老规矩,直接实践上手,下图是 ...

  9. k8认证机制

    参考下面博文 http://www.mamicode.com/info-detail-2270627.html 需要补充: k8s的的认证机制场景使用 客户端证书认证         采用双向证书进行 ...

随机推荐

  1. js之正则的坑

    首先给一个神奇的图: 我的反应,精分吧!一会儿true一会儿false的... 后来发现,把g去掉后就正常了,那这是为什么呢??lastIndex惹得鬼! 正文: lastIndex 全局正则表达是, ...

  2. vue遍历数组和对象的方法以及他们之间的区别

    前言:vue不能直接通过下标的形式来添加数据,vue也不能直接向对象中插值,因为那样即使能插入值,页面也不会重新渲染数据 一,vue遍历数组   1,使用vue数组变异方法 pop() 删除数组最后一 ...

  3. 前端入门12-JavaScript语法之函数

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  4. 腾讯云服务器 ubuntu 设置允许root用户登录

    背景:最近购买了腾讯云服务器,使用了Ubuntu Server 14.04.1 LTS 64位操作系统,腾讯云主机ubuntu系统默认用户名为ubuntu,登录服务器时每一次都是以默认账号ubuntu ...

  5. C++析构函数可虚性探究

    C++虚析构函数 析构函数是用来释放对象所申请的资源的函数. 当类内没有自定义的析构函数时,系统会自动调用默认的析构函数. 那么析构函数能否为虚函数呢? 虚函数的意义在于实现“多态性”.即:不同的个体 ...

  6. 设计模式系列之单例模式(Singleton Pattern)

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该类负责创建自己的对象 ...

  7. lcd参数解释及刷新率计算,LCD时序

    一.LCD显示图像的过程如下: 其中,VSYNC和HSYNC是有宽度的,加上后如下: 参数解释: HBP(Horizontal Back Porch)水平后沿:在每行或每列的象素数据开始输出时要插入的 ...

  8. Linux内存描述之内存页面page--Linux内存管理(四)

    1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一 ...

  9. Golang 学习权威网站

    Golang 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Golang 是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发 ...

  10. crontab 详细用法 定时任务

    转自:http://blog.chinaunix.net/uid-25785357-id-3434344.html   使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命 ...