在 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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
监控
什么是 Service Ticket 的 Service Level Agreement
什么是 Service Ticket 的 Service Level Agreement
68 0
|
9月前
|
负载均衡 Kubernetes 应用服务中间件
Deployment、Service资源
Deployment、Service资源
70 0
|
10月前
|
Kubernetes 监控 算法
20-Kubernetes-Service详解-Service介绍
20-Kubernetes-Service详解-Service介绍
|
10月前
|
存储 Kubernetes 负载均衡
21-Kubernetes-Service详解-Service使用
21-Kubernetes-Service详解-Service使用
|
10月前
|
云安全 安全 Java
STS (Security Token Service)
阿里云STS(Security Token Service)是一种云安全服务,用于为阿里云RAM用户(或其他云账号)颁发临时的安全令牌,以便在一定时间内访问阿里云资源,从而实现安全授权和身份验证的目的。
2684 0
|
存储 域名解析 Kubernetes
Service、EmptyDir、HostPath | 学习笔记
快速学习 Service、EmptyDir、HostPath
126 0
openstack报错——MainPID=0 Id=neutron-server.service ActiveState=failed
openstack报错——MainPID=0 Id=neutron-server.service ActiveState=failed
340 0
openstack报错——MainPID=0 Id=neutron-server.service ActiveState=failed
|
Kubernetes 负载均衡 网络协议
k8s service
Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略——通常称为微服务。这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector 实现的。
7046 0