在 kubectl 中使用 Service Account Token_Kubernetes中文社群
阿新 • • 發佈:2018-12-27
在執行基於 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 指令了。