在 kubectl 中使用 Service Account Token-阿里云开发者社区

开发者社区> 云原生> 正文

在 kubectl 中使用 Service Account Token

简介: 在运行基于 Kubernetes 的 CI/CD 过程中,经常有需求在容器中对 Kubernetes 的资源进行操作,其中隐藏的安全问题,目前推荐的最佳实践也就是使用 Service Account 了。

在运行基于 Kubernetes 的 CI/CD 过程中,经常有需求在容器中对 Kubernetes 的资源进行操作,其中隐藏的安全问题,目前推荐的最佳实践也就是使用 Service Account 了。而调试账号能力的最好方法,必须是 kubectl 了。下面就讲讲 如何利用 kubectl 引用 Servie Account 凭据进行 Kubernetes 操作的方法。

这里用 default Service Account 为例

假设

目前已经能对目标集群进行操作,文中需要的权限主要就是读取命名空间中的 Secret 和 Service Account。

准备配置文件

新建一个 Yaml 文件,命名请随意,例如 kubectl.yaml。内容:

apiVersion: v1
kind: Config
clusters: - cluster:
 certificate-authority-data: {ca data}
 server: https://{server}
 name: awesome-cluster
users: - user:
 token: {token}
 name: account
- context:
 cluster: awesome-cluster
 user: account
 name: sa
current-context: sa

其中的 {ca data} 可以从现有连接凭据中获取。

{server}:服务器地址

{token}:将在后面设置

获取数据

首先查看 Service Account 的 Token 在哪里:

kubectl get serviceaccount default -o yaml

返回内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
 creationTimestamp: 2017-05-07T10:41:50Z
 name: default namespace: default
 resourceVersion: "26"
 selfLink: /api/v1/namespaces/default/serviceaccounts/default
 uid: c715217d-3311-11e7-a4ae-42010a8c0095
secrets: - name: default-token-7h4bd

这里我们看到他包含了 secret: “default-token-7h4bd”,获取其中的内容:

kubectl get secret default-token-7h4bd -o yaml

apiVersion: v1
data:
 ca.crt: [ca data] namespace: ZGVmYXVsdA==
 token: [token data]
 kind: Secret
metadata:
 annotations:
 kubernetes.io/service-account.name: default
 kubernetes.io/service-account.uid: c715217d-3311-11e7-a4ae-42010a8c0095
 creationTimestamp: 2017-05-07T10:41:50Z
 name: default-token-7h4bd namespace: default
 resourceVersion: "24"
 selfLink: /api/v1/namespaces/default/secrets/default-token-7h4bd
 uid: c71cc72d-3311-11e7-a4ae-42010a8c0095
type: kubernetes.io/service-account-token

上面 Token Data 内容就是我们需要的认证 Token 了

export my_token="[tokendata]"
kubectl --kubeconfig=kubectl.yaml \
config set-credentials account \
--token=`echo ${tokendata} | base64 -D`

这样就把 Service Account 的 Token 取出来,并保存在 kubectl.yaml 中。利用这一配置文件就可以凭 Service Account 的身份来执行 kubectl 指令了。

本文转自中文社区-在 kubectl 中使用 Service Account Token

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章