Kubeconfig
Kubeconfig 資源
Kubeconfig 是一個 Rancher 資源 kubeconfigs.ext.cattle.io,允許產生 v1.Config kubeconfig 檔案,用於與 Rancher 和由 Rancher 管理的叢集互動。
kubectl api-resources --api-group=ext.cattle.io
要取得 Kubeconfig 資源的欄位和結構的描述,請執行:
kubectl explain kubeconfigs.ext.cattle.io
建立 Kubeconfig
只有有效且啟用的 Rancher 使用者才能建立 Kubeconfig。例如,嘗試使用 system:admin 服務帳戶建立 Kubeconfig 將導致錯誤:
kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
EOF
Error from server (Forbidden): error when creating "STDIN": kubeconfigs.ext.cattle.io is forbidden: user system:admin is not a Rancher user
kubeconfig 內容在 Kubeconfig 成功建立時會產生並僅一次在 .status.value 欄位中回傳,因為它包含所建立 token 的機密值。因此,必須使用適當的輸出選項來擷取它,例如 -o jsonpath='{.status.value}' 或 -o yaml。
可以一次為多個叢集建立 kubeconfig,方法是在 spec.clusters 欄位中指定叢集名稱列表。您可以透過列出 clusters.management.cattle.io 資源來查詢叢集名稱。
kubectl get clusters.management.cattle.io -o=jsonpath="{.items[*]['metadata.name', 'spec.displayName']}{'\n'}"
local local
c-m-p66cdvlj downstream1
metadata.name 和 metadata.generateName 欄位會被忽略,新 Kubeconfig 的名稱會使用前綴 kubeconfig- 自動產生。
您可以使用 spec.currentContext 欄位來設定叢集名稱,它用於設定 kubeconfig 中的當前上下文。如果您未設定 spec.currentContext 欄位,則 spec.clusters 列表中的第一個叢集將用作當前上下文。對於未設定 FQDN 的啟用 ACE 的叢集,第一個控制平面節點將用作當前上下文。
對於啟用 ACE 的叢集,如果設定了 FQDN,則該 FQDN 將用作 kubeconfig 中的叢集項目;否則,將為所有控制平面節點建立項目。
kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
clusters: [c-m-p66cdvlj, c-m-fcd3g5h]
description: My Kubeconfig
currentContext: c-m-p66cdvlj
EOF
如果在 spec.clusters 欄位中將 "*" 指定為第一個項目,則將為使用者有權存取的所有叢集建立 kubeconfig (如果有的話)。
kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
clusters: ["*"]
description: My Kubeconfig
EOF
如果未指定 spec.ttl,則 Kubeconfig 的 token 將使用 kubeconfig-default-token-ttl-minutes 設定中定義的過期時間建立,預設為 30 天。如果指定了 spec.ttl,則應大於 0 且小於或等於以秒為單位表示的 kubeconfig-default-token-ttl-minutes 設定值。
kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
clusters: [c-m-p66cdvlj] # Downstream cluster
ttl: 7200 # 2 hours
EOF
列出 Kubeconfig
列出先前產生的 Kubeconfig 對於清理後端 token 非常有用,如果不再需要 Kubeconfig (例如,它是暫時發行的)。管理員可以列出所有 Kubeconfig,而一般使用者只能檢視自己的。
kubectl get kubeconfig
NAME TTL TOKENS STATUS AGE
kubeconfig-zp786 30d 2/2 Complete 18d
kubeconfig-7zvzp 30d 1/1 Complete 12d
kubeconfig-jznml 30d 1/1 Complete 12d
Use -o wide to get more details:
kubectl get kubeconfig -o wide
NAME TTL TOKENS STATUS AGE USER CLUSTERS DESCRIPTION
kubeconfig-zp786 30d 2/2 Complete 18d user-w5gcf * all clusters
kubeconfig-7zvzp 30d 1/1 Complete 12d u-w7drc *
kubeconfig-jznml 30d 1/1 Complete 12d u-w7drc *
檢視 Kubeconfig
管理員可以取得任何 Kubeconfig,而一般使用者只能取得自己的。
kubectl get kubeconfig kubeconfig-zp786
NAME TTL TOKENS STATUS AGE
kubeconfig-zp786 30d 2/2 Complete 18d
Use -o wide to get more details:
kubectl get kubeconfig kubeconfig-zp786 -o wide
NAME TTL TOKENS STATUS AGE USER CLUSTERS DESCRIPTION
kubeconfig-zp786 30d 2/2 Complete 18d user-w5gcf * all clusters
刪除 Kubeconfig
管理員可以刪除任何 Kubeconfig,而一般使用者只能刪除自己的。當刪除 Kubeconfig 時,kubeconfig token 也會被刪除。
kubectl delete kubeconfig kubeconfig-zp786
kubeconfig.ext.cattle.io "kubeconfig-zp786" deleted
To delete a Kubeconfig using preconditions:
cat <<EOF | k delete --raw /apis/ext.cattle.io/v1/kubeconfigs/kubeconfig-zp786 -f -
{
"apiVersion": "v1",
"kind": "DeleteOptions",
"preconditions": {
"uid": "52183e05-d382-47d2-b4b9-d0735823ce90",
"resourceVersion": "31331505"
}
}
EOF
刪除 Kubeconfig 集合
管理員可以刪除任何 Kubeconfig,而一般使用者只能刪除自己的。
要刪除所有 Kubeconfig:
kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs
要依標籤刪除 Kubeconfig 集合:
kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs?labelSelector=foo%3Dbar
更新 Kubeconfig
只有 metadata (例如新增標籤或註解) 和 spec.description 欄位可以更新。所有其他 spec 欄位都是不可變的。
要編輯 Kubeconfig:
kubectl edit kubeconfig kubeconfig-zp786
要修補 Kubeconfig 並更新其描述:
kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"spec":{"description":"Updated description"}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched
kubectl get kubeconfig kubeconfig-fdcpl -o jsonpath='{.spec.description}'
Updated description
要修補 Kubeconfig 並新增標籤:
kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"metadata":{"labels":{"foo":"bar"}}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched
kubectl get kubeconfig kubeconfig-zp786 -o jsonpath='{.metadata.labels.foo}'
bar