为Pod配置服务账号

配置服务账号

服务账号(ServiceAccount)为Pod中运行的进程提供身份标识,并映射到Service Account对象。

默认服务账号

如果不手动设置服务账号,默认会分配default

k8s的api服务器将通过服务账号校验策略分配Pod可执行的权限

使用多个服务账号

列举所有sa资源

kubectl get serviceaccounts

image-20230506112745753

创建一个SA对象

apiVersion: v1
kind: ServiceAccount
metadata:
  name: build-robot

对象命名规则

  • 不能超过 253 个字符
  • 只能包含小写字母、数字,以及 '-' 和 '.'
  • 必须以字母数字开头
  • 必须以字母数字结尾

查询SA的完整信息

Kubectl get serviceaccounts/sa-name -o yaml

image-20230506113107529

这里的操作只是创建服务账号,并没有涉及到权限

注意:只能在创建Pod或者新Pod指定模板时才可以设置sa,不能更新

清理:

kubectl delete serviceaccount/build-robot

为SA创建令牌

创建临时令牌

kubectl create token build-robot

image-20230506143957093

可以用这个token登陆dashboard(skooner是第三方的dashboard,单独部署过的)

image-20230506144055362

最新版本K8s默认token有效时间为1个小时

创建一个长期token

创建一个long-time-token.yaml文件用来定义这个token

image-20230506144836938 image-20230506144939622

查看token内容

image-20230506145018661

对比一下两种tokenimage-20230506145044375

image-20230506145102123

短期

{
    "aud": [
        "https://kubernetes.default.svc.cluster.local"
    ],
    "exp": 1683358831,
    "iat": 1683355231,
    "iss": "https://kubernetes.default.svc.cluster.local",
    "kubernetes.io": {
        "namespace": "kube-system",
        "serviceaccount": {
            "name": "admin",
            "uid": "52b8298f-f9ed-4fef-94ab-00407e5ef92d"
        }
    },
    "nbf": 1683355231,
    "sub": "system:serviceaccount:kube-system:admin"
}

长期:

{
    "iss": "kubernetes/serviceaccount",
    "kubernetes.io/serviceaccount/namespace": "kube-system",
    "kubernetes.io/serviceaccount/secret.name": "long-time-secret",
    "kubernetes.io/serviceaccount/service-account.name": "admin",
    "kubernetes.io/serviceaccount/service-account.uid": "52b8298f-f9ed-4fef-94ab-00407e5ef92d",
    "sub": "system:serviceaccount:kube-system:admin"
}

短期token中的"exp"为token过期时间,"iat"表示token创建时间

注意:Secret和SA是绑定的,也就是如果删除SA,Secret也会被删除

posted @ 2023-07-24 17:22  pr1s0n  阅读(61)  评论(0编辑  收藏  举报