|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
Kubeconfigs
Kubeconfig 资源
Kubeconfig 是一个 Rancher 资源 kubeconfigs.ext.cattle.io,允许生成 v1.Config kubeconfig 文件,以便与 Rancher 及其管理的集群进行交互。
kubectl api-resources --api-group=ext.cattle.io
要获取 Kubeconfig 资源的字段和结构描述,请运行:
kubectl explain kubeconfigs.ext.cattle.io
创建 Kubeconfig
自 Rancher v2.13 起,status.bearerToken 包含一个完整且可用的 Bearer 令牌,可用于对 Rancher API 进行身份验证。
只有 有效且活跃 的 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 成功创建时仅在 |
可以通过在 spec.clusters 字段中指定集群名称列表,为多个集群同时创建 kubeconfig。您可以通过列出 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,则将其用作 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 的令牌将使用 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
列出 Kubeconfigs
列出之前生成的 Kubeconfigs 可以帮助清理备份令牌,如果 Kubeconfig 不再需要(例如,它是临时发放的)。管理员可以列出所有 Kubeconfigs,而普通用户只能查看自己的。
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
使用 -o wide 获取更多详细信息:
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
使用 -o wide 获取更多详细信息:
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 令牌也会被删除。
kubectl delete kubeconfig kubeconfig-zp786
kubeconfig.ext.cattle.io "kubeconfig-zp786" deleted
要使用前提条件删除Kubeconfig:
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
删除一组Kubeconfigs
管理员可以删除任何Kubeconfig,而普通用户只能删除自己的。
要删除所有Kubeconfigs:
kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs
通过标签删除一组Kubeconfigs:
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