本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

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 成功创建时仅在 .status.value 字段 一次 生成并返回,因为它包含创建的令牌的秘密值。因此,必须使用适当的输出选项捕获,例如 -o jsonpath='{.status.value}'-o yaml

可以通过在 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.namemetadata.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