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

kubernetes认证和serviceaccount的更多相关文章

  1. 15.kubernetes认证及serviceaccount

    kubernetes认证及serviceaccount 认证 授权:RBAC(目前的主流授权方式) 准入控制:了解即可 --> 认证 授权 准入控制 客户端 -->api-server: ...

  2. Kubernetes 学习15 kubernetes 认证及serviceaccount

    一.概述 1.通过此前描述可以知道k8s是以后运行我们生产环境中重要应用程序的尤其是无状态程序的一个非常重要的平台.这里面能托管一些核心应用以及核心数据,很显然对于k8s对应接口的访问不是任何人都可以 ...

  3. 013.Kubernetes认证授权

    一 Kubernetes认证系统介绍 1.1 访问控制 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证.授权以及准入控制(Admission Control) ...

  4. (十二)Kubernetes 认证、授权与准入控制

    访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...

  5. k8s认证及serviceAccount、userAccount

    1.概述 用kubectl向apiserver发起的命令,采用的是http方式,K8s支持多版本并存. kubectl的认证信息存储在~/.kube/config,所以用curl无法直接获取apis中 ...

  6. k8s系列---k8s认证及serviceaccount、RBAC

    http://blog.itpub.net/28916011/viewspace-2215100/ 对作者文章有点改动 注意kubeadm创建的k8s集群里面的认证key是有有效期的,这是一个大坑!! ...

  7. Kubernetes认证入门指南

    Kubernetes用来执行安全访问和权限的步骤有3个--认证(Authentication).授权(Authorization)和准入(Admission).在本文中,我们先开始了解认证(Authe ...

  8. kubernetes之基于ServiceAccount拉取私有镜像

    前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的S ...

  9. kubernetes中使用ServiceAccount创建kubectl config 文件

    在kubernetes 为不同的项目创建了不同的SerivceAccount,那么如何通过ServiceAccount创建 kubectl config文件呢?使用下面脚本即可 # your serv ...

随机推荐

  1. Python中变量的基本使用

    变量的基本使用 程序就是用来处理数据的,而变量就是用来存储数据的 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 ...

  2. PHP之ThinkPHP框架(数据库)

    PHP是网站后台开发语言,其重要的操作对象莫过于数据库,之前有了解过mysqli和pdo,但ThinkPHP的数据库交互必须使用其特定的封装方法,或者可以认为其是对PHP数据库操作的进一步封装,以达到 ...

  3. 面试题:两种方法计算n!

    直接上代码package com.face.test; public class Test { /** * 面试题:递归方法计算n! */ @org.junit.Test public void di ...

  4. equalsIgnoreCase()和equals()的区别

    String a="ABC";a.equals("abc")为false,a.equalsIgnoreCase("abc")为true;eq ...

  5. IdentityServer Resource Owner Password

    Resource Owner Password 模式需要自己实现用户名密码的校验 新增ResourceOwnerPasswordValidator实现IResourceOwnerPasswordVal ...

  6. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  7. 项目中使用sass,如何实现自动编译

    本次React项目中用到了Sass,在一个主文件main.scss中引入了其余的scss文件,然后把main.scss文件编译为main.css文件,最后在项目的主文件入口index.html中引入m ...

  8. Java 容器 & 泛型:一、认识容器

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分.泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就“顺 ...

  9. EntityFramework中对象的状态管理(笔记)

    刚开始接触EF框架的时候总是不明白: 为什么查询出来的对象 Remove().再 SaveChanges()就会把数据删除.而自己 new 一个Person()对象,然后 Remove()不行? 为什 ...

  10. MySQL 通讯协议

    Client/Server 通讯协议用于客户端链接.代理.主备复制等,支持 SSL.压缩,在链接阶段进行认证,在执行命令时可以支持 Prepared Statements 以及 Stored Proc ...