向外部设备公开 Kubernetes 服务
如果使用 Kubernetes 应用程序,可能需要使 Kubernetes 服务可供外部设备访问,以便它们可以与已部署的工作负载进行交互。 本文介绍如何将 AKS Edge Essentials 群集上运行的 Kubernetes 服务公开到外部设备。 根据用于设置 Kubernetes 群集的网络配置,可通过两种不同的方式公开服务:
- 具有端口转发的单台计算机群集。
- 具有外部虚拟交换机的可缩放群集。
注意
如果使用 Kubernetes 服务,请确保在部署期间设置 Init.ServiceIPRangeSize
和 Init.ServiceIPRangeStart
参数。 有关详细信息,请参阅 部署配置 JSON 参数。
选项 1:具有端口转发的单台计算机群集
AKS Edge Essentials 单台计算机群集配置使用内部虚拟交换机来管理网络。 此开关可确保使用外部设备无法访问的内部网络完成 Windows 主机 OS 和 Linux/Windows 节点之间的所有通信。 有关 AKS 边缘软件包网络的详细信息,请参阅 AKS 边缘软件包网络。
如果需要从外部设备访问 Kubernetes 服务,请设置从 Windows 主机 OS 转发到 Linux 或 Windows 节点的端口。 如果使用的是 LoadBalancer 类型的 Kubernetes 服务,请确保使用kubectl get services
命令获取正确的 ServiceIp。 如果使用 ClusterIp 或 NodePort 类型的 Kubernetes 服务,请使用 Linux/Windows Kubernetes 节点的 IP 地址。
若要设置端口转发,可以使用 netsh
cmdlet。 有关命令语法、上下文和格式的详细信息 netsh
,请参阅 Netsh 命令语法、上下文和格式设置。 按照以下步骤设置端口转发:
打开提升的 PowerShell 会话。
为 Windows 主机 OS 外部端口启用防火墙规则端口。 有关详细信息,请参阅 New-NetFirewallRule:
New-NetFirewallRule -DisplayName "<name-for-rule>" -Direction Inbound -LocalPort <Windows-host-OS-external-port> -Action Allow
获取命名空间中目标服务的 IP 地址:
kubectl get service -n <namespace>
设置从 Windows 主机 OS 端口转发到 Kubernetes 服务 IP 地址和端口的端口:
参数 说明 listen-port
外部设备用来与 Kubernetes 服务通信的 Windows 主机 OS IPv4 端口。 listen-address
指定要侦听 Windows 主机 OS 的 IPv4 地址。 如果未指定地址,则默认值为本地计算机。 connect-port
指定要将流量重定向到的 IPv4 端口。 此端口应为 Kubernetes 服务端口。 connect-address
指定要将流量重定向到的 IPv4 地址。 此端口应为 Kubernetes 服务 IP 地址。 netsh interface portproxy add v4tov4 listenport=<listen-port> listenaddress=<listen-address> connectport=<connect-port> connectaddress=<connect-address>
在以下示例图中,有两个 Kubernetes 服务在具有 10.0.0.2 IPv4 地址的 Windows 设备上运行:
- 运行具有 Linux 节点
192.168.0.2
和端口30034
IP 地址的 NodePort 服务的 Linux-Svc。 此服务应由 Windows 主机 OS 中的端口 8080 访问。 - 作为具有 IP 地址
192.168.0.5
和端口30035
的 LoadBalancer 服务运行的 Win-Svc。 此服务应由 Windows 主机 OS 中的端口 8081 访问。
若要启用访问这些服务的外部设备,请为这两个服务设置端口转发。 对于此方案,请运行以下命令:
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=10.0.0.2 connectport=30034 connectaddress=192.168.0.2
netsh interface portproxy add v4tov4 listenport=8081 listenaddress=10.0.0.2 connectport=30035 connectaddress=192.168.0.5
警告
如果不使用静态网络配置,Windows 主机 OS 的 IPv4 地址可能会更改。 这可能会影响端口转发配置和外部设备使用的目标 IPv4 地址。 若要最大程度地减少 IPv4 地址更改的影响,可以使用更通用 listenaddress
的内容。
选项 2:具有外部虚拟交换机的可缩放群集
AKS Edge Essentials 可缩放群集配置使用外部虚拟交换机来管理网络。 由于节点在不同的设备内运行,因此所有节点必须连接到同一网络才能相互通信。 有关 AKS 边缘软件包网络的详细信息,请参阅 AKS 边缘软件包网络。
在此配置中,Kubernetes 节点连接到外部网络,因此无需端口转发即可通过外部设备访问 Kubernetes 服务。 如果使用的是 LoadBalancer 类型的 Kubernetes 服务,请遵循选项 1 的指导,请确保使用kubectl get services
命令获取正确的 ServiceIp。 如果使用 ClusterIp 或 NodePort 类型的 Kubernetes 服务,请使用 Linux/Windows Kubernetes 节点的 IP 地址。
注意
可以将可缩放群集保留到一台设备,并使用外部虚拟交换机配置将 Kubernetes 服务直接公开到外部网络上的外部设备,而无需端口转发。