你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

访问 Azure Kubernetes 服务 (AKS) API 服务器

Azure Bastion
Azure ExpressRoute
Azure Kubernetes 服务 (AKS)
Azure 专用链接
Azure VPN 网关

本指南介绍了连接到 Azure Kubernetes 服务 (AKS) 群集 API 服务器的各种选项。 使用标准 AKS 群集,API 服务器通过 Internet 公开。 如果创建专用 AKS 群集,则只能从与专用群集建立网络连接的设备连接到 API 服务器。

规划对 API 服务器的访问是一项零日活动。 选择访问 API 服务器的方式取决于部署场景。

AKS API 服务器访问权限

若要管理 AKS 群集,请与其 API 服务器进行交互。 锁定对 API 服务器的访问并仅向需要该服务器的用户授予访问权限至关重要。 可以通过将 AKS 群集与 Microsoft Entra ID 集成来提供精细访问。 然后,管理员可以使用基于角色的访问控制 (RBAC) 来限制访问。 通过 RBAC,管理员可以将用户和标识放置在 Microsoft Entra 组中,并为这些组分配适当的角色和权限。 使用 OpenID Connect 向 AKS 群集提供 Microsoft Entra 身份验证。 有关详细信息,请参阅以下资源:

注意

通过仅允许授权的 IP 地址范围与 API 服务器通信,可以进一步锁定 AKS 群集。 有关详细信息,请参阅使用 Azure Kubernetes 服务 (AKS) 中的已授权 IP 地址范围保护对 API 服务器的访问

Azure DDoS 防护与应用程序设计最佳做法相结合,提供增强的 DDoS 缓解功能来更全面地防御 DDoS 攻击。 应在任何外围虚拟网络上启用 Azure DDOS 防护

通过 Internet 访问 AKS 群集

创建解析为 API 服务器完全限定域名 (FQDN) 的非专用群集时,默认为 API 服务器分配一个公共 IP 地址。 然后,可以使用 Azure 门户连接到群集,也可以使用 shell(如 Azure CLI、PowerShell 或命令提示符)。

备注

有关使用 Kubernetes 命令行客户端 kubectl 通过 Internet 连接到群集的详细信息,请参阅连接到群集

Azure Cloud Shell

Cloud Shell 是内置于 Azure 门户中的 shell。 可以用通过 PowerShell 或 Azure CLI 的相同方式通过 Cloud Shell 管理和连接到 Azure 资源。 有关详细信息,请参阅 Azure Cloud Shell 概述

访问 AKS 专用群集

有多种方法可以连接到 AKS 专用群集。 规划如何访问 AKS 专用群集是一项零日活动,具体取决于场景的需求和限制。 可以使用以下组件和服务连接到专用群集:

注意

SSH、远程桌面协议 (RDP) 和远程桌面服务 (RDS) 是可用于远程控制跳转盒的替代协议。

使用 Azure Bastion

Azure Bastion 是一种平台即服务 (PaaS) 产品/服务,可部署在虚拟网络中以连接到该网络中的 VM,例如跳转盒。 若要进行连接,请从 Azure 门户中的浏览器使用 RDP 或 SSH。 传输层安全性 (TLS) 协议可保护连接。 通常有一个公共 IP 地址,该地址与 VM 的网络接口卡 (NIC) 相关联。 该地址提供连接到 VM 的方法。 使用 Azure Bastion 时,不再需要将公共 IP 地址与跳转盒相关联。

连接到 AKS 群集的 API 服务器时,最好使用信任连接。 一种方法是使用 Azure Bastion 连接到 Azure 环境内部的跳转盒。 在此场景中,跳转盒驻留在中心虚拟网络中。 专用 AKS 群集驻留在辐射型虚拟网络中。 虚拟网络对等互连将中心和辐射型网络连接到一起。

跳转盒可以使用 Azure 专用终结点、专用 DNS 区域和专用 DNS 区域中的 DNS A 记录解析 API 服务器的 FQDN。 通过使用 AKS 专用群集和专用终结点,可确保只能从虚拟网络内部解析 API 服务器 FQDN。 使用专用群集时,浏览器需要在有权访问 AKS 专用群集虚拟网络的计算机上运行。 有关详细信息,请参阅用于托管 Azure Bastion 的子网

备注

跳转盒的可用性和冗余至关重要。 应始终能够访问跳线框。 同样,应始终能够访问专用 AKS 群集。 若要实现跳转盒的可用性和冗余,请将它们放入可用性集中并使用具有少量 VM 实例的虚拟机规模集。 有关详细信息,请参阅以下资源:

Architecture diagram that shows the traffic route from a user to a private AKS cluster. The traffic flows through Azure Bastion and a jump box.

下载此体系结构的 Visio 文件

数据流

  1. 用户尝试使用 Azure Bastion 和具有 TLS 加密的 HTML5 浏览器连接到跳转盒。
  2. 用户从门户中选择是使用 RDP 还是 SSH 连接到跳转盒。
  3. 用户通过 Azure Bastion 登录到跳转盒。 从此跳转盒中尝试连接到 AKS 专用群集。 中心虚拟网络具有指向 AKS 专用 DNS 区域的虚拟网络链接,用于解析专用群集的 FQDN。
  4. 中心虚拟网络和辐射型虚拟网络使用虚拟网络对等互连相互通信。
  5. 若要访问专用 AKS 群集,流量会进入 Azure 主干。 专用终结点建立与专用 AKS 群集的专用、独立连接。
  6. 流量到达专用 AKS 群集的 API 服务器。 然后,用户可以管理 Pod、节点和应用程序。

注意

如果不显式禁用公共 FQDN,仍可以从虚拟网络外部解析专用群集的 FQDN。 有关禁用 AKS 专用群集的公共 FQDN 的信息,请参阅在现有群集上禁用公共 FQDN

排查连接问题

如果无法连接到专用群集,请执行以下操作:

  • 检查虚拟网络对等互连。 此机制提供两个虚拟网络之间的网络到网络连接。 若要使流量在这两个网络之间流动,需要在两个网络之间建立虚拟网络对等互连。 建立虚拟网络对等互连时,会将路由放置在虚拟网络的系统路由表中。 该路由提供访问目标地址空间的路径。 有关对虚拟网络对等互连进行故障排除的详细信息,请参阅创建、更改或删除虚拟网络对等互连

    注意

    如果跳转盒与专用终结点和 AKS 专用群集位于同一虚拟网络中,则不需要虚拟网络对等互连。

  • 检查到专用 DNS 区域的虚拟网络链接。 虚拟网络链接为虚拟网络内部的 VM 提供了一种连接到专用 DNS 区域的方法,并解析区域中的 DNS 记录。 如果无法连接到专用 AKS 群集或无法解析专用群集的 FQDN,请检查虚拟网络是否具有到专用 DNS 区域的虚拟网络链接。 专用 DNS 区域的名称应采用以下格式:

    privatelink.<region>.azmk8s.io

    有关对虚拟网络链接进行故障排除的详细信息,请参阅以下资源:

    备注

    如果跳转盒与专用终结点和 AKS 专用群集位于同一虚拟网络中,则不需要虚拟网络链接。 创建专用 AKS 群集时,将创建专用 DNS 区域,该区域具有指向托管专用 AKS 群集的虚拟网络的链接。

提高安全性

若要进一步保护 AKS 工作负载和跳转盒,可以使用实时 (JIT) 访问和特权访问工作站 (PAW)。

Microsoft Defender for Cloud 的 JIT 访问功能可缓解威胁形势。 攻击者通常以用于连接到跳转盒的 RDP 和 SSH 端口为目标。 JIT 访问功能使用网络安全组或 Azure 防火墙阻止跳转盒的所有入站流量。 如果用户尝试使用适当的 RBAC 权限连接到跳转盒,此功能会将网络安全组或 Azure 防火墙配置为允许在指定时间内对选定端口进行入站访问。 该时间过后,端口会拒绝所有入站流量。 有关 JIT 访问的详细信息,请参阅了解实时 (JIT) VM 访问权限

PAW 是经过强化的物理设备,可为操作员提供最高安全配置。 若要采用良好的特权访问策略,请使用 PAW 连接到跳转盒和 AKS 群集。 入侵 PAW 是很困难的,因为它们会阻止许多常见的攻击途径,例如电子邮件和 Web 浏览。 有关 PAW 的详细信息,请参阅在特权访问故事过程中保护设备

使用 VPN

VPN 连接提供从本地环境到 Azure 的混合连接。 需要连接到内部虚拟网络基础结构才能访问 AKS 专用群集。 无法在虚拟网络外部访问专用群集的 API 服务器。

使用 VPN 可访问专用 AKS 群集。 使用 VPN 连接时,可以通过加密隧道访问 Azure 中的虚拟网络基础结构。 连接到虚拟网络网关后,便可以访问跳转盒。 在此处,可以连接到专用群集的 API 服务器。

Architecture diagram that shows traffic flow from a user to a private AKS cluster. The route includes a VPN gateway, an IPsec tunnel, and a jump box.

下载此体系结构的 Visio 文件

数据流

  1. 用户从本地工作站启动到跳转盒的 RDP 或 SSH 流量。
  2. 跳转盒流量离开客户边缘路由器和 VPN 设备。 流量使用加密的 IPsec 隧道遍历 Internet。
  3. 跳转盒流量到达 Azure 中的虚拟网络网关,这是 Azure 虚拟网络基础结构的入口点和出口点。
  4. 流量经过虚拟网络网关后,会到达跳转盒。 从此跳转盒中尝试连接到 AKS 专用群集。 中心虚拟网络具有指向 AKS 专用 DNS 区域的虚拟网络链接,用于解析专用群集的 FQDN。
  5. 中心虚拟网络和辐射型虚拟网络使用虚拟网络对等互连相互通信。
  6. 若要访问专用 AKS 群集,流量会进入 Azure 主干。 专用终结点建立与专用 AKS 群集的专用、独立连接。
  7. 流量到达专用 AKS 群集的 API 服务器。 然后,用户可以管理 Pod、节点和应用程序。

使用 ExpressRoute

ExpressRoute 是另一个选项,可用于从本地环境建立到 AKS 专用群集的连接。 ExpressRoute 使用边界网关协议 (BGP) 在本地网络、Azure 中的实例和 Microsoft 公共地址之间交换路由。 这种交换为 Azure 和本地工作站中的基础结构即服务 (IaaS) 资源提供了相互连接的路径。 ExpressRoute 提供专用和独立的连接,同时为企业环境保持一致的带宽和延迟。

Architecture diagram that shows the traffic route from a user to a private AKS cluster. The route includes ExpressRoute and a jump box.

下载此体系结构的 Visio 文件

数据流

  1. 用户从本地工作站启动到跳转盒的 RDP 或 SSH 流量。
  2. 跳转盒流量离开客户边缘路由器,通过光纤连接传输到交会位置,即 ExpressRoute 线路所在的位置。 流量在该处到达 Microsoft Enterprise Edge (MSEE) 设备。 然后进入 Azure 结构。
  3. 跳转盒流量到达 ExpressRoute 网关,这是 Azure 虚拟网络基础结构的入口点和出口点。
  4. 流量到达跳转盒。 从此跳转盒中尝试连接到 AKS 专用群集。 中心虚拟网络具有指向 AKS 专用 DNS 区域的虚拟网络链接,用于解析专用群集的 FQDN。
  5. 中心虚拟网络和辐射型虚拟网络使用虚拟网络对等互连相互通信。
  6. 若要访问专用 AKS 群集,流量会进入 Azure 主干。 专用终结点建立与专用 AKS 群集的专用、独立连接。
  7. 流量到达专用 AKS 群集的 API 服务器。 然后,用户可以管理 Pod、节点和应用程序。

注意

ExpressRoute 要求第三方连接提供程序提供与 MSEE 路由器的对等互连连接。 ExpressRoute 流量未加密。 有关详细信息,请参阅什么是 Azure ExpressRoute?

运行 aks 命令调用

使用 AKS 专用群集,可以从有权访问群集 API 服务器的 VM 连接到专用群集。 可以使用 Azure CLI 命令 aks command invoke 通过 Azure API 在 AKS 专用群集上远程运行 kubectlhelm 等命令。 使用 aks command invoke 时,会在群集内部特定命名空间中创建暂时性 Pod。 该 Pod 仅在命令的生存期内存在。 在暂时性 Pod 中,可以在专用群集上运行命令。

如果没有 VPN、ExpressRoute、外部连接解决方案或与群集虚拟网络直接对等互连的虚拟网络,则可以使用 aks command invoke 作为连接到专用群集的替代方法。 在使用 aks command invoke 之前,请检查群集和节点池可用的资源。 资源不足可能会阻碍临时 Pod 的创建。

有关详细信息,请参阅使用命令调用访问专用 Azure Kubernetes 服务 (AKS) 群集

将 Cloud Shell 连接到子网

将 Cloud Shell 部署到所控制的虚拟网络中时,可以与该虚拟网络内的资源进行交互。 Cloud Shell 实例通常部署到 Microsoft 管理的虚拟网络中的容器中。 该容器无法与其他虚拟网络中的资源交互。 但是,如果部署 AKS 专用群集,则可以将 Cloud Shell 连接到所管理的子网,该子网连接到群集的 API 服务器。 然后便可以连接到专用群集。 有关详细信息,请参阅将 Cloud Shell 部署到 Azure 虚拟网络

使用 SSH 和 Visual Studio Code 进行测试

SSH 是一种协议,它提供了一种安全管理和访问远程主机上的文件的方法。 在身份验证过程中,SSH 使用公钥-私钥对。

在本地计算机上,可以使用 SSH 和 Visual Studio Code 远程 SSH 扩展连接到虚拟网络中的跳转盒。 SSH 隧道已加密,连接在附加到跳转盒的公共 IP 地址上终止。 使用此方法可以轻松修改 Kubernetes 清单文件。

若要了解如何通过 SSH 连接到跳转盒,请参阅通过 SSH 进行远程开发

如果无法通过 SSH 连接到 VM 来管理专用群集,请执行以下操作:

  • 检查 VM 子网的入站网络安全组规则。 通过 SSH 连接到 Azure 中的 VM 时,附加到 VM 子网或 NIC 的网络安全组具有默认规则。 该规则会阻止源自 Azure 之外的所有入站 Internet 流量。 若要克服此障碍,请创建新的入站网络安全组规则。 配置新规则以允许源自本地计算机公共 IP 地址的 SSH 流量。
  • 检查证书位置。 使用 SSH 时,请检查是否正确放置证书。 私钥应位于本地计算机上的 C:\Users\User\.ssh\id_rsa 目录中。 公钥应置于 Azure 中 VM 上的 ~/.ssh/id_rsa.pub 文件中。

注意

建议:

  • 请勿使用公共 IP 地址连接到生产环境中的资源。 仅在开发和测试场景中使用公共 IP 地址。 如本部分前面所述,需要在此类环境中创建入站网络安全组规则。 该规则应允许来自本地计算机公共 IP 地址的流量进入环境。 有关网络安全组规则的详细信息,请参阅创建、更改或删除网络安全组
  • 请勿使用 SSH 直接连接到 AKS 节点或容器。 换言之,不要将管理目标系统用作管理工具,因为这种方法并不可靠。 最好使用群集外部的专用解决方案。 评估 aks command invoke 是否适合部署时,请牢记这一点,因为使用该命令会在群集中创建一个用于代理访问的暂时性 Pod。

结束语

  • 如果未禁用公共 FQDN,则可以通过 Internet 访问 AKS 群集的 API 服务器。
  • Cloud Shell 是 Azure 门户中的内置命令行 shell,可用于连接到 AKS 群集。
  • 使用 Azure Bastion 和专用终结点来访问专用群集是一种更安全、更锁定的方式。
  • VPN 和 ExpressRoute 都有助于促进与专用 AKS 群集的混合连接。
  • 如果没有外部连接解决方案,可以远程运行 aks command invoke 以连接到 AKS 专用群集。
  • 可以直接将 Cloud Shell 部署到所管理的虚拟网络中。 Cloud Shell 可以从你管理的虚拟网络访问你的专用群集。
  • 你可以使用 Visual Studio Code 和 SSH 连接到跳转盒。 此方法会加密到跳转盒的连接,使你能够从 VM 内部访问专用群集,并便于在开发场景中修改清单文件。 但是,这种连接方式会在环境中公开公共 IP 地址。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

若要查看非公开领英个人资料,请登录领英。

后续步骤