kubernetes的Service Account
kubernetes的Service Account
- Service account作用
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务。 - Service account使用场景
运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。 - 与User account区别
(1)User account是为人设计的,而service account则是为了Pod中的进程;
(2)User account是跨namespace的,而service account则是仅局限它所在的namespace; - 实战
#定义namespace:test cat >> test.yaml << EOF apiVersion: v1 kind: Namespace metadata:name: testlabels:name: test
#创建namespace:test kubectl create -f ./test.yaml
#查看命名空间test的sa kubectl get sa -n test NAME SECRETS AGE default 1 3h ##说明: (1)如果kubernetes开启了ServiceAccount(–admission_control=…, ServiceAccount,… )那么会在每个namespace下面都会创建一个默认的default 的sa。如上命令查看的default ! (2)ServiceAccount默认是开启的。
#查看命名空间test生成的default kubectl get sa default -o yaml -n test apiVersion: v1 kind: ServiceAccount metadata:creationTimestamp: 2018-05-31T06:21:10Zname: defaultnamespace: testresourceVersion: "45560"selfLink: /api/v1/namespaces/test/serviceaccounts/defaultuid: cf57c735-649a-11e8-adc5-000c290a7d06 secrets: - name: default-token-ccf9m ##说明: (1)当用户再该namespace下创建pod的时候都会默认使用这个sa; (2)每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定 了其他ServiceAccout); (3)每个container启动后都会挂载对应的token和ca.crt到/var/run/secrets/ kubernetes.io/serviceaccount/。
#创建deploy cat >> nginx_deploy.yaml << EOF apiVersion: extensions/v1beta1 kind: Deployment metadata:name: nginx-testnamespace: test spec:replicas: 2template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80
#查看生成的Pods kubectl get po -n test NAME READY STATUS RESTARTS AGE nginx-test-75675f5897-7l5bc 1/1 Running 0 1h nginx-test-75675f5897-b7pcn 1/1 Running 0 1h
#查看其中一个Pod的详细信息,如:nginx-test-75675f5897-7l5bc kubectl describe po nginx-test-75675f5897-7l5bc -n test ##其中default-token-ccf9m,请留意! Environment: <none> Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-ccf9m (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-ccf9m: Type: Secret (a volume populated by a Secret) SecretName: default-token-ccf9m ##说明: (1)每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定 了其他ServiceAccout); (2)每个container启动后都会挂载对应的token和ca.crt到/var/run/secrets/ kubernetes.io/serviceaccount/。
#进入其中一个Pod的容器内,如:nginx-test-75675f5897-7l5bc kubectl exec -it nginx-test-75675f5897-7l5bc /bin/bash --namespace=test ##在容器内执行: ls -l /var/run/secrets/kubernetes.io/serviceaccount/ lrwxrwxrwx 1 root root 13 May 31 08:15 ca.crt -> ..data/ca.crt lrwxrwxrwx 1 root root 16 May 31 08:15 namespace -> ..data/namespace lrwxrwxrwx 1 root root 12 May 31 08:15 token -> ..data/token ##说明: 可以看到已将ca.crt 、namespace和token放到容器内了,那么这个容器就 可以通过https的请求访问apiserver了。
- 手动创建Service Account
#编辑heapster_test.yaml文件 cat >> heapster_test.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata:name: heapsternamespace: test
#创建Service Account:heapster kubectl create -f heapster_test.yaml serviceaccount "heapster" created
#查看Service Account:heapster kubectl get sa -o yaml -n test ##主要内容如下:secrets:- name: heapster-token-7xrlg
Service Account鉴权
Service Account为服务提供了一种方便的认知机制,但它不关心授权的问题。可以配合RBAC来为Service Account鉴权:(1)配置--authorization-mode=RBAC和--runtime-config=rbac.authorization.k 8s.io/v1alpha1 (2)配置--authorization-rbac-super-user=admin (3)定义Role、ClusterRole、RoleBinding或ClusterRoleBinding
#实战
我们在Kubernetes Dashboard1.8.3部署中,碰到首次登入出现访问权限报错的问题,原因就是ServiceAccount的创建问题。cat >> kube-dashboard-access.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata:name: kubernetes-dashboardlabels:k8s-app: kubernetes-dashboard roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin subjects:- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system
- 参考文章
https://www.ctolib.com/docs/sfile/kubernetes-handbook/architecture/serviceaccount.html
https://blog.csdn.net/u010278923/article/details/72857928
转载于:https://blog.51cto.com/wutengfei/2122570
kubernetes的Service Account相关推荐
- kubernetes的Service Account和secret关系
https://blog.csdn.net/ccy19910925/article/details/80610336 Service Account Service Account概念的引入是基于这样 ...
- kubernetes的Service Account和secret
Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Se ...
- 在Kubernetes Pod中使用Service Account访问API Server
2019独角兽企业重金招聘Python工程师标准>>> 在Kubernetes Pod中使用Service Account访问API Server 博客分类: Kubernetes ...
- [置顶]kubernetes资源类型--secret和Service Account
secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...
- kubernetes资源类型--secret和Service Account
secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...
- 运维实操——kubernetes(九)存储之Secret配置管理Service Account、Opaque、dockerconfigjson
存储之Secret配置管理Service Account.Opaque.dockerconfigjson 1.什么是Secret? 2.Service Account 3.Opaque (1)从文件中 ...
- k8s的认证和service account简述
k8s的认证: 与API server通信的客户端大致有两类: 1.集群客户端工具(kubectl.kubeadm.kubelet等) 2.集群内pod. 任何客户端访问k8s时的过程: ...
- 服务账户service account在kubernetes1.24中的变化
当创建pod时需要在pod里的.spec.serviceAccount指定pod以哪个service account运行,如果没有指定的话则默认使用default这个sa. 然后通过投射卷,在pod的 ...
- k8s之 service account token
在前一篇笔记中我们验证了使用sa的token作为一种认证,向apiserver发送请求,这里简述下它的认证原理和流程. 首先得知道这种token称为JWT(json web token),可以参考官网 ...
最新文章
- curl 使用 ~/.netrc
- ITK:创建拉普拉斯内核
- 写给深圳首期Python自动化开发周未班的信
- php和web服务器,php与web服务器关系
- mysql数据库表的类型介绍,mysql数据库表的类型介绍
- NOIP2015DAY2T2子串
- TextView图文混排
- 云计算-大数据-云安全高等教育改革示范教材
- SparkSQL架构
- winxp netbeui install
- 会计教学APP软件,实现教学的快速运转
- react native 更改app名称和图标
- android电视 怎么调电视机的信号源,电视怎么调信号源
- 1/1917钓鱼思维导图
- 1024,来一套程序员续命操!
- 图片像素大小怎么调整,批量调整图片像素
- 基于Android的医院预约挂号系统,基于Android的医院预约挂号系统设计与实现
- 懂GPU服务器的工作原理
- 机器学习笔记 (第一周)
- 【Python】浮点数精度问题(包含解决方案)