直接可用的认证插件:

  • 客户端证书
  • HTTP 头中的 token
  • 基础 HTTP 认证
  • 其他

12.1.1 用户和组

了解用户

  • 真实的人
    • SSO 单点登录
  • pod 中的应用
    • service accounts

Kubernetes 中没有账户资源, 所以不能通过 API 服务来创建用户等.

了解组

可以一次给多个用户赋予权限.

系统内置的组有特殊含义:

image.png
image.png

完全没看明白啥用.

12.1.2 ServiceAccount 介绍

  1. /var/run/secrets/kubernetes.io/serviceaccount/token

了解 ServiceAccount 资源

查看 ServiceAccount 列表:

$ kubectl get sa
  • 每个 pod 都与一个 ServiceAccount 相关联.
  • 多个 pod 可以使用同一个 ServiceAccount
  • 不能跨命名空间

image.png

ServiceAccount 如何和授权进行绑定

在 pod 的 manifest 文件中配置 ServiceAccount.

12.1.3 创建 ServiceAccount

创建 ServiceAccount

$ kubectl create sa foo

查看 ServiceAccount:

$ kubectl describe sa foo

image.png

查看 ServiceAccount 密钥:

$ kubectl describe secret foo-token-hmqsm
Name:         foo-token-hmqsm
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: foo
              kubernetes.io/service-account.uid: 98f82703-9e4d-4fb4-8cbe-9e797593ddab

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkhVYUFMazc0by1aeXNadkFMTjY0aWVuQ2Jzb1dFNWZ2NzVrVjh5dHpXc2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImZvby10b2tlbi1obXFzbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJmb28iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5OGY4MjcwMy05ZTRkLTRmYjQtOGNiZS05ZTc5NzU5M2RkYWIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpmb28ifQ.i6rIHzeaQUThtjs26T82FNpQR2GOO20efnI0vzKiWbqO1MZ8NQtP2mo16SS2fgA2gMZbey6gCh6_jcjvUc02R1ZkWSIpkShDqQisvyr9XZnV2GlLHVAVhBqttGaebPTi3oTtzwksotayQubDg683GFmumfVCHxW-IhU1aQ-F5d_y66q9FRpAsX_NgQ8mwVzHaeol-JndJ-dw2W3SQDmJXgwLuUiqBW7rWzhsEs0Akwk4yB8Jdy4aVN_z0w4f7BsIHfeAIWiGL1_7sc2kD-3a1c2MeVhDLQkXnF5zl7ueWQH5HUJAgcJyJFzghTZUgPPonilNfRkad6CDoV3Is20qbg

token 使用的是 JWT.

了解 ServiceAccount 上的可挂载密钥

允许被挂载所使用的注解:

kubernetes.io/enforce-mountable-secrets="true"

了解 ServiceAccount 的镜像拉取密钥

image.png

image.png

12.1.4 将 ServiceAccount 分配给 pod

在 pod 定义/模板中的 spec.serviceAccountName 上设置名称.

  • 后续不能修改

创建使用自定义 ServiceAccount 的 pod

image.png

进入容器中查看 token:

image.png

使用自定义的 ServiceAccount token 和 API 服务器进行通信