kubernetes之service account

介绍

1.service account 也是一种账号, 但它不是给kubernetes集群的用户(系统管理员, 运维人员)用的, 而是给运行在pod里的进程用的, 它为pod里的进程提供了必须的身份证明
2.kubernetes在创建一个namespace, 会为每个namespace下都一个名为default的默认serviceaccount对象, 在这个service account里面有个token, 可以当做volume被挂载到pod里的secret, 当pod启动时, 这个secret会自动挂载到pod的指定目录下, 用来协助完成pod中的进程访问api server时的身份鉴权
3.查看系统默认的的serviceaccount

包含三个数据项, 分别是token,ca.cert, namespace 
kubectl describe serviceaccounts   # Mountable secrets表示它需要被挂载到pod上
kubectl describe secret default-token-fcv28  
注意: 如果pod定义时没有指定spec.serviceAccountName属性 , 系统自动为其赋值default, 既使用同一个namespace下的默认ServiceAccount

kubernetes之service account
kubernetes之service account

serviceaccount 与 user区别

1. user给人用的, service account是给pod里进程使用的
2. user账号是全局性, service account则属于某个具体namespace

为什么每个namespace下都有一个名为default的serviceaccount

这是因为service account controller一直监听service account和namespace事件,

给某个pod使用自定义service account

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myserviceaccount

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1  
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: nginx
        image: nginx:1.12
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
      serviceAccountName: myserviceaccount

指定ServiceAccount授权管理

1.为my-namespace的指定serviceaccount授予clusterole中的view权限
kubectl create rolebinding my-sa-view --clusterrole=view --serviceaccount=my-namespace:my-sa --namespace=my-namespace 

2. 为my-namespace命名空间的中的默认serviceaccount授权clusterrole的view权限
kubectl create rolebinding default-view --clusterrole=view --serviceaccount=my-namespace:default --namespace=my-namespace

3. 为my-namespace命名空间中的所有serviceaccount授权clusterrole的view权限
kubectl create rolebinding serviceaccounts-view --clusterrole=view --group=system:serviceaccounts:my-namespace --namespace=my-namespace      
${namespace}:${serviceaccount}  #指定namespace下的serviceaccount
${namespace}:default            #指定namespace下的默认default serviceaccount
system:serviceaccounts:${namespace} #指定namespace下的所有serviceaccount
system:serviceaccounts   #所有命名空间下的serviceaccount
上一篇:k8s、ServiceAccount权限详解、RBAC 详解(基于角色的访问控制),常用操作指令


下一篇:[C#复习向整合]里氏替换原则