ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Service Accounts 使用 API 证书自动创建并且绑定 Secret。 kubernetes 系统可以自动创建用于访问 API 证书的 Secret,并且可以自动绑定到 Pod 中使用这种类型的 Secret。可以根据需要禁用或覆盖重写这类 Secret,但是通常情况下如果考虑到安全性,更加推荐使用系统默认创建的 Secret。 在终端执行如下命令可以查看系统默认创建的 Secret: ~~~bash $ kubectl get secrets NAME TYPE DATA AGE default-token-sz72t kubernetes.io/service-account-token 3 38d ~~~ 如果想要查看 Secrets 详细信息,可以执行命令`kubectl describe secrets`,可以看到这个 Secret 包含 3 项配置信息,分别为:namespace、ca.crt、token,这是从 pod 内部安全访问 kubernetes API 服务器的全部配置信息了。 在`/home/shiyanlou`目录下新建`nginx-manual.yaml`文件,并向该文件中写入如下内容: ~~~yaml apiVersion: v1 kind: Pod metadata: name: nginx-manual spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx:1.9.1 name: nginx ports: - containerPort: 80 protocol: TCP ~~~ 执行创建: ~~~bash $ kubectl create -f nginx-manual.yaml pod/nginx-manual created ~~~ 执行命令`kubectl describe pod nginx-manual`查看详细信息,可以发现: ~~~text # 这里显示了 default-token-sz72t Secret 被挂载到了容器中的 /var/run/secrets/kubernetes.io/serviceaccount 目录下 Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-sz72t (ro) ~~~ 查看容器该目录下的文件名是否符合: ~~~bash $ kubectl exec nginx-manual ls /var/run/secrets/kubernetes.io/serviceaccount ca.crt namespace token ~~~ 需要注意的是:当 Pod 被 API Server 创建时,API Server 不会校验该 Pod 引用的 Secret 是否存在。一旦这个 Pod 被调度,则 kubelet 将试着获取 Secret 的值。如果 Secret 不存在或暂时无法连接到 API Secret,则 kubelet 会按照一定的时间间隔定期重试获取该 Secret,并发送一个 Event 来解释 Pod 没有启动的原因,一旦 Secret 被 Pod 获取,则 kubelet 将创建并挂载包含 Secret 的 Volume,只有所有 Volume 都挂载成功,Pod 中的 Container 才会被启动。