Skip to main content

通过 Kubectl 和 kubeconfig 访问集群

本节描述如何从 Rancher UI 或您的虚拟机使用 kubectl 操作下游 Kubernetes 集群。

有关如何使用 kubectl 的更多信息,请参阅Kubernetes 文档:kubectl 概述.

在 Rancher UI 中使用 kubectl Shell 访问集群#

您可以通过登录 Rancher 并在 UI 中打开 kubectl Shell 来访问和管理集群。无需进一步配置。

  1. 全局 视图中,打开您希望使用 kubectl 访问的集群。

  2. 单击 启动 kubectl,使用打开的窗口与 Kubernetes 集群进行交互。

从您的虚拟机上使用 kubectl 访问集群#

本节介绍如何下载集群的 kubeconfig 文件,从您的虚拟机上启动 kubectl,并访问下游集群。

这种访问集群的替代方法允许您使用 Rancher 进行身份验证,并在不使用 Rancher UI 的情况下管理集群。

先决条件: 这些说明假定您已经创建了一个 Kubernetes 集群,并且 kubectl 已经安装在您的虚拟机上。有关安装 kubectl 的帮助,请参阅官方Kubernetes 文档

  1. 登录 Rancher. 从 全局 视图中,打开您希望使用 kubectl 访问的集群。

  2. 单击 Kubeconfig 文件.

  3. 将显示的内容复制到剪贴板。

  4. 将内容粘贴到本地计算机上的新文件中。将文件移动到 ~/.kube/config。注意:kubectl 用于 kubeconfig 文件存放的默认位置是 ~/.kube/config, 但是您可以使用任何目录,并使用 --kubeconfig 标记来指定它,如以下命令所示:

    kubectl --kubeconfig /custom/path/kube.config get pods
  5. 登录虚拟机,启动 kubectl,用它与 kubernetes 集群进行交互。

使用 kubectl 创建的资源注意事项#

Rancher 将发现和显示由 kubectl 创建的资源。但是,这些资源可能没有关于发现的所有必要注释。如果使用 Rancher UI 或 API 对资源执行操作(例如,扩展工作负载),这可能会由于缺少注释而触发对资源的重新创建。只有在对发现的资源执行操作时才会发生这种情况。

直接使用下游集群进行身份验证#

本节的目的是帮助您设置另一种方法来访问RKE 集群

此方法仅对启用了已授权的集群端点 的 RKE 集群可用,当 Rancher 创建这个 RKE 集群时,它会生成一个 kubeconfig 文件,其中包含用于访问您的集群的其他 kubectl 上下文。这个额外的上下文允许您使用 kubectl 与下游集群进行身份验证,而无需通过 Rancher 进行身份验证。有关授权的集群端点如何工作的详细说明,请参阅此页

我们建议,作为一种最佳实践,您应该设置此方法来访问您的 RKE 集群,以便万一无法连接到 Rancher 时,您仍然可以访问集群。

先决条件: 下面的步骤假设您已经创建了一个 Kubernetes 集群,并按照以下步骤从您的虚拟机上用 kubectl 连接到您的集群

要在下载的 kubeconfig 文件中找到上下文的名称,请运行:

kubectl config get-contexts --kubeconfig /custom/path/kube.config
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* my-cluster my-cluster user-46tmn
my-cluster-controlplane-1 my-cluster-controlplane-1 user-46tmn

在本例中,当您将 kubectl 与第一个上下文 my-cluster 一起使用时,将通过 Rancher Server 对您进行身份验证。

对于第二个上下文 my-cluster-controlplane-1,您将使用授权的集群端点进行身份验证,直接与下游 RKE 集群通信。

我们建议使用具有经过授权的集群端点的负载均衡器。有关详细信息,请参阅推荐的架构部分

现在您已经有了直接使用集群进行身份验证所需的上下文的名称,您可以在运行 kubectl 命令时将上下文的名称作为一个选项传递进来。这些命令将根据您的集群是否定义了 FQDN 而有所不同。下面几节提供了示例。

kubectl 正常工作时,它确认您可以绕过 Rancher 的身份验证代理访问您的集群。

直接连接到有 FQDN 的集群#

如果为集群定义了 FQDN,则将创建引用 FQDN 的单个上下文。上下文将被命名为 <CLUSTER_NAME>-fqdn。当您想使用 kubectl 来访问这个集群而不需要 Rancher 时,您将需要使用这个上下文。

假设 kubeconfig 文件位于 ~/.kube/config

kubectl --context <CLUSTER_NAME>-fqdn get nodes

直接引用 kubeconfig 文件的位置:

kubectl --kubeconfig /custom/path/kube.config --context <CLUSTER_NAME>-fqdn get pods

直接连接到没有 FQDN 的集群#

如果没有为集群定义 FQDN,则会创建引用 control-plane 中每个节点的 IP 地址的额外上下文。每个上下文将被命名为 <CLUSTER_NAME>-<NODE_NAME>。当您想使用 kubectl 来访问这个集群而不需要 Rancher 时,您将需要使用这个上下文。

假设 kubeconfig 文件位于 ~/.kube/config

kubectl --context <CLUSTER_NAME>-<NODE_NAME> get nodes

直接引用 kubeconfig 文件的位置:

kubectl --kubeconfig /custom/path/kube.config --context <CLUSTER_NAME>-<NODE_NAME> get pods
Last updated on by yzeng25