Service Account概念的引入是基于这样的使用场景:

  运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。这样pod里的容器就可以访问api了。

kubectl get sa --all-namespaces

NAMESPACE     NAME          SECRETS   AGE
default build-robot 1d
default default 32d
default kube-dns 31d
kube-public default 32d
kube-system dashboard 31d
kube-system default 32d
kube-system heapster 30d
kube-system kube-dns 31d

如果kubernetes开启了ServiceAccount(–admission_control=…,ServiceAccount,… )那么会在每个namespace下面都会创建一个默认的default的ServiceAccount。
如下:每个sa都关联着一个secrets。

kubectl get sa  default  -o yaml

apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: --02T06::12Z
name: default
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/serviceaccounts/default
uid: 0de23575-2f02-11e7-98d0-5254c4628ad9
secrets:
- name: default-token-rsf8r

当用户在该namespace下创建pod的时候都会默认使用这个sa,下面是get pod 截取的部分,可以看到kubernetes会把默认的sa挂载到容器内。

volumes:
- name: default-token-rsf8r
secret:
defaultMode:
secretName: default-token-rsf8r

具体看一下secret

kubectl get secret default-token-rsf8r -o yaml
apiVersion: v1
data:
ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVZlpvZDJtSzNsa3JiMzR3NDhhUmtOc0pVVDJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUN
namespace: ZGVmYXVsdA==
token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV0
metadata:
annotations:
kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: 0de23575-2f02-11e7-98d0-5254c4628ad9
creationTimestamp: --02T06::07Z
name: default-token-rsf8r
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/secrets/default-token-rsf8r
uid: 75c0a236-2f02-11e7-98d0-5254c4628ad9
type: kubernetes.io/service-account-token

上面的内容是经过base64加密过后的,我们直接进入容器内:

~ # ls -l  /var/run/secrets/kubernetes.io/serviceaccount/
total
lrwxrwxrwx root root May : ca.crt -> ..data/ca.crt
lrwxrwxrwx root root May : namespace -> ..data/namespace
lrwxrwxrwx root root May : token -> ..data/token

可以看到已将ca.crt 、namespace和token放到容器内了,那么这个容器就可以通过https的请求访问apiserver了。

Secret
Kubernetes提供了Secret来处理敏感信息,目前Secret的类型有3种:
Opaque(default): 任意字符串
kubernetes.io/service-account-token: 作用于ServiceAccount,就是上面说的。
kubernetes.io/dockerconfigjson: 作用于Docker registry,用户下载docker镜像认证使用。

imagePullSecrets

当在需要安全验证的环境中拉取镜像的时候,需要通过用户名和密码

apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

接下来拉取镜像的时候,就可以使用了

apiVersion: v1
kind: Pod
metadata:
name: foo
namespace: awesomeapps
spec:
containers:
- name: foo
image: janedoe/awesomeapp:v1
imagePullSecrets:
- name: myregistrykey

其实本质上还是kubelet把这个认证放到了docker的目录下面,如下:

cat ~/.docker/config.json
{
"auths": {
"10.39.0.118": {
"auth": "Y2hlbm1vOmNtMTM4MTE2NjY3ODY="
},
"10.39.0.12:5000": {
"auth": "dXNlcjAxOjEyMzQ1YQ=="
},
"http://10.39.0.12:5000": {
"auth": "dXNlcjAxOjEyMzQ1YQ=="
}
}
}

Service Account和其secrets 作用和场景,看了不亏。。的更多相关文章

  1. Service Account和RBAC授权

    一.介绍 Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Accou ...

  2. [置顶] kubernetes资源类型--secret和Service Account

    secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...

  3. kubernetes的Service Account和secret

    系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...

  4. SSRS2:Reporting Service 配置Service Account

    1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...

  5. Kubernetes Service Account如何生成Token

    Service Account是运行pods用到的帐号,默认是default.如果apiserver启动配置--admission-control=ServiceAccount,Service Acc ...

  6. k8s学习笔记之九: Service Account

    第一章.前言 每一个用户对API资源进行操作都需要通经过以下三个步骤: 第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限 token(共享秘钥) SSL(双向SSL认证) ....通过任何 ...

  7. SQL Server 2012 Managed Service Account

    原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...

  8. JavaScript是如何工作的:Service Worker的生命周期及使用场景

    摘要: 理解Service Worker. 原文:JavaScript 是如何工作的:Service Worker 的生命周期及使用场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...

  9. 错误: No API token found for service account "default",

    [root@kubernetes-master pods]# kubectl create -f mysql.yaml Error from server (ServerTimeout): error ...

随机推荐

  1. php ci 报错 Object not found! The requested URL was not found on this server. If you entered the URL manually please check

    Object not found! The requested URL was not found on this server. The link on the referring page see ...

  2. Linux 虚拟机安装vmware tools

    Linux Vmware tools安装步骤 1 在 vSphere Client 清单中,右键单击虚拟机,然后选择电源 > 开启.   2 单击控制台选项卡以确定客户机操作系统启动成功,并在需 ...

  3. htm5之视频音频(shit IE10都不支持)

    <p style="color: red; background-color: black;"> 视频<br /> autoplay autoplay 如果 ...

  4. 20145306 张文锦 网络攻防 web基础

    20145306 网络攻防 web基础 实验内容 WebServer:掌握Apache启停配置修改(如监听端口)前端编程:熟悉HTML+JavaScript.了解表单的概念编写不同的HTML网页,放入 ...

  5. Android 实践项目开发 总结

      Android 实践项目开发 总结 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________       指导老师:娄嘉鹏       ...

  6. mpvue小程序开发入门级指南

    报错指南 "Error: ERR_GET_SESSION_KEY {"code":5100,"message":"(-1)服务内部错误,请稍 ...

  7. React 回忆录(二)为什么使用 React?

    Hi 各位,欢迎来到 React 回忆录!

  8. 在CentOS Linux系统上,添加新的端口,启用ssh服务

    SSH作为Linux远程连接重要的方式,如何配置安装linux系统的SSH服务,如何开启SSH? SSH是什么? SSH 为 Secure Shell 由 IETF 的网络工作小组(Network W ...

  9. ubuntu下转换flv格式为mp4格式

    一.环境 ubuntu 16.04 二.安装工具 sudo apt install libav-tools 三.开始转换 avconv -i input.flv -codec copy output. ...

  10. Linux rhel7 下MySQL5.7.18详细安装文档

    Linux rhel7 下MySQL5.7.18详细安装文档 本文安装MySQL5.7使用的是vm虚拟机rhel7操作系统 ,ftp文件传输是FileZilla3.27,远程连接xssh5.0 1 登 ...