Service Account 为 Pod 提供必要的身份认证。所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。

kubectl 如果需要访问 apiserver 需要经过 认证,授权,准入控制 三关。

kubectl 客户端请求的时候首先需要进行认证,认证通过后再进行授权检查,因有些增删等某些操作需要级联到其他资源或者环境,这时候就需要准入控制来检查级联环境是否有授权权限了。

获取所有的 api version

[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

使用 curl 访问 apiservice

从上面可知,所有客户端访问 apiserver都需要经过验证,因而我们在服务器上面也配置了验证信息:

# 使用 kubectl 命令的用户家目录下有 .kube/config 文件,上面有 client-certificate-data 和  client-key-data 认证信息。
cat .kube/config

启用本地转发端口,代理访问 apiserver

# 因为访问 apiserver 需要认证,但是在命令行中很难进行验证,我们可以通过代理的方式,对 apiserver 进行访问
kubectl proxy --port=8080 # 另起一个窗口
# 获取所有的 namespace
curl http://localhost:8080/api/v1/namespaces # 获取 kube-system 下所有的 deployments
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/

创建服务账户

mkdir ~/sa
cd sa/
kubectl create serviceaccount admin # 查看,新增了一个 secrets
kubectl get sa 或 kubectl get secret [klvchen@master ~]$ kubectl describe sa admin
Name: admin
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none> # 可以在这里配置私有 registry 需要的验证信息
Mountable secrets: admin-token-h2nhw
Tokens: admin-token-h2nhw
Events: <none> # 创建一个 pod 使用 admin 的 serviceaccount
vi pod-sa-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-sa-demo
namespace: default
labels:
app: myapp
tier: frontend
annotations:
klvchen.com/created-by: "cluster admin"
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
serviceAccountName: admin kubectl apply -f pod-sa-demo.yaml # 查看
kubectl describe pods pod-sa-demo
# 查看当前的用户认证
kubectl config view # 以 root 用户执行
cd /etc/kubernetes/pki # 配置 root 使用 kubectl 权限
mkdir ~/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config # 创建新的密钥
(umask 077; openssl genrsa -out klvchen.key 2048) # 创建证书请求,/CN 指定的是用户名
openssl req -new -key klvchen.key -out klvchen.csr -subj "/CN=klvchen" # 创建证书
openssl x509 -req -in klvchen.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out klvchen.crt -days 365 # 查看证书
openssl x509 -in klvchen.crt -text -noout # 在kubeconfig配置文件中设置一个用户项
kubectl config set-credentials klvchen --client-certificate=./klvchen.crt --client-key=./klvchen.key --embed-certs=true kubectl config set-context klvchen@kubernetes --cluster=kubernetes --user=klvchen kubectl config view # 切换用户
kubectl config use-context klvchen@kubernetes # 此用户没有权限查看资源
kubectl get pods # 切换回管理员账号
kubectl config use-context kubernetes-admin@kubernetes # 创建一个新的 kubectl 配置文件
kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.0.205:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true kubectl config view --kubeconfig=/tmp/test.conf

最新文章

  1. python文件读写的学习
  2. oracle给字段添加描述
  3. Good Bye 2013
  4. &quot;由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断&quot;的解决方案
  5. commons-io源码阅读心得
  6. proxy.ini文件调用
  7. JS/CSS/IMG加载顺序关系之DOMContentLoaded事件
  8. POJ 2350 Above Average
  9. github学习(二)
  10. DuKBitmapImages 图片压缩处理技术
  11. 安卓中不同APP之间的消息通信
  12. 多线程深入:synchronized(转,有删减)
  13. Angular MVC
  14. python绝对路径和相对路径
  15. python之类
  16. Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载
  17. numpy.loadtxt用法
  18. apiCloud 浏览图片
  19. 深度优先搜索DFS和广度优先搜索BFS
  20. InstallShield Build错误:Internal build error 6041

热门文章

  1. HTML学习一_网页的基本结构及HTML简介
  2. Docker学习笔记-磁盘挂载运行.netcore
  3. CentOS随笔——关机命令
  4. HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!
  5. app测试之专项测试
  6. 【ABP框架系列学习】模块系统(4)
  7. linux取IP的几个方法
  8. C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
  9. 【Flask-RESTPlus系列】Part1:快速入门
  10. .Net Core 中间件之主机地址过滤(HostFiltering)源码解析