选择应用推广服务

借助 IBM Cloud® Kubernetes Service,您可以通过使应用程序可供公开或专用访问来管理集群内联网和外部联网。

要快速开始使用应用程序联网,请遵循以下决策树,然后单击其中一个选项以查看其设置文档:

选择应用程序曝光服务
本图指导您为应用程序选择最佳网络选项

通过 Kubernetes 服务发现了解应用程序负载均衡

Kubernetes 服务发现使用网络服务和本地 Kubernetes 代理为应用程序提供网络连接。

部署到工作程序节点的所有 pod 都会分配有 172.30.0.0/16 范围内的专用 IP 地址,并且仅在工作程序节点之间路由这些 pod。 为了避免冲突,不要在与工作程序节点通信的任何节点上使用此 IP 范围。 工作程序节点和 pod 可以使用专用 IP 地址在专用网络上进行安全通信。 但是,pod 崩溃或需要重新创建工作程序节点时,会分配新的专用 IP 地址。

您不用尝试跟踪必须具有高可用性的应用程序不断变化的专用 IP 地址,而可以改为使用内置 Kubernetes 服务发现功能将应用程序公开为服务。 Kubernetes 服务会将一些 pod 分组在一起,并提供与这些 pod 的网络连接。 服务会通过标签选择将流量路由到的目标 pod。

服务提供了应用程序 pod 与集群中其他服务的连接,而无需公开每个 pod 的实际专用 IP 地址。 服务会分配有只能在集群内部访问的集群内 IP 地址 clusterIP。 此 IP 地址在服务的整个生命周期内绑定到服务,并且在服务存在期间不会更改。 将从 172.21.0.0/16 范围内的 65,000 个 IP 中的一个 IP 为服务分配一个 IP。

为了避免冲突,不要在与工作程序节点通信的任何节点上使用此 IP 范围。 此外,会为该服务创建 DNS 查找条目,并将该条目存储在集群的 kube-dns 组件中。 DNS 条目包含服务名称、在其中创建服务的名称空间以及指向分配的集群内 IP 地址的链接。

如果您计划通过 IBM Cloud 或VPN服务将集群连接到本地网络,可能会与用于Pod的默认 172.30.0.0/16 地址范围以及用于服务的 172.21.0.0/16 地址范围发生子网冲突。 在创建集群时 ,您可以通过在 --pod-subnet 选项中为 Pod 指定自定义子网 CIDR,并在 --service-subnet 选项中为服务指定自定义子网 CIDR,从而避免子网冲突。

为了对所有 TCP 和 UDP 服务的网络流量进行基本负载平衡,一个本地 Kubernetes 网络代理( kube-proxy )作为守护进程运行在 kube-system 命名空间中的每个工作节点上。kube-proxy 使用内核功能 Iptables 规则( Linux )将请求引导至服务背后的 pod,与 pod 在群集内的 IP 地址及其部署的工作节点无关。

例如,集群内的应用程序可以使用服务的集群内 IP 或通过向服务名称发送请求来访问位于集群服务后端的 pod。 使用服务名称时,kube-proxy 会在集群的 DNS 提供程序中查找该名称,并将请求路由到该服务的集群内 IP 地址。

如果使用同时提供内部集群 IP 地址和外部 IP 地址的服务,那么集群外的客户机可以将请求发送到服务的外部公共或专用 IP 地址。kube-proxy 将请求转发到服务的集群内 IP 地址,并在服务后的应用程序 pod 之间进行负载均衡。

了解 Kubernetes 服务类型

Kubernetes 支持四种基本类型的网络服务:ClusterIP NodePort LoadBalancer Ingress ClusterIP 服务使您的应用程序可在内部访问,仅允许群集中的 pod 之间进行通信。、和 服务使您的应用程序可以从公共互联网或专用网络进行外部访问。NodePort LoadBalancer Ingress

下表比较了各种网络服务类型的特点。

Kubernetes 各网络服务类型的特征
特征 ClusterIP NodePort LoadBalancer(经典 - NLB) LoadBalancer(VPC 负载均衡器) Ingress
标准集群
可外部访问
外部主机名
稳定的外部 IP
HTTP(S) 负载均衡 是* 是*
TLS 终止
定制路由规则
每个服务多个应用程序

* 用于 HTTPS 负载平衡的 SSL 证书由 ibmcloud ks nlb-dns 命令提供。 在经典集群中,仅公共 NLB 支持这些命令。

ClusterIP

只能将应用程序作为专用网络上的 ClusterIP 服务 公开。 ClusterIP 服务提供的集群内 IP 地址只能由集群内的其他 pod 和服务访问。 没有为应用程序创建外部 IP 地址。 集群中的其他应用程序要访问位于集群服务后端的 pod,可以使用该服务的集群内 IP 地址,也可以使用该服务的名称发送请求。 请求到达服务时,服务会将所有请求都同等转发到 pod,而不考虑 pod 的集群内 IP 地址和部署到的工作程序节点。 请注意,如果在服务的 YAML 配置文件中未指定 type ,系统将默认创建 ClusterIP 类型。

NodePort

当您通过 NodePort 服务来对外提供应用时,系统会为该服务分配一个位于 30000–32767 范围内的 NodePort,以及一个内部集群 IP 地址。 若要在集群外部访问该服务,请使用任意工作节点的公共或私有 IP 地址,并以 <IP_address>:<nodeport> 的格式访问 NodePort。 但是,工作程序节点的公共和专用 IP 地址不是永久固定的。 除去或重新创建工作程序节点时,将为该工作程序节点分配新的公共 IP 地址和新的专用 IP 地址。

NodePort 非常适合用于测试公共或专用访问权,或者仅在短时间内提供访问权。 : 由于 VPC 集群中的工作程序节点没有公共 IP 地址,因此仅当您已连接到专用 VPC 网络 (例如,通过 VPN 连接) 时,才能通过 NodePort 访问应用程序。

Kubernetes NodePort
Kubernetes 如何通过 服务转发流量 NodePort 服务流量 如何通过 服务转发公共网络流量。NodePort

LoadBalancer

根据集群的基础架构提供者,LoadBalancer 服务类型的实现方式有所不同。

经典集群中的 LoadBalancer 服务

经典基础设施

网络负载均衡器(NLB)。 每个标准集群供应有四个可移植的公共 IP 地址和四个可移植的专用 IP 地址,这些 IP 地址可以用于为应用程序创建第 4 层 TCP/UDP 网络负载均衡器 (NLB)。 您可以通过公开应用程序需要的任何端口来定制 NLB。 分配给 NLB 的可移植公共 IP 地址和私有 IP 地址是永久性的,即使在集群中重新创建工作节点时也不会发生变化。 您可以为应用程序创建子域,用于通过 DNS 条目注册公共 NLB IP 地址。 还可以对每个子域的 NLB IP 启用运行状况检查监视器。

Kubernetes 如何通过 LoadBalancer 服务转发网络流量。
LoadBalancer 经典集群中的服务流量

VPC 集群中的 LoadBalancer 服务

虚拟私有云

Load Balancer for VPC。 为集群中的应用程序创建 Kubernetes LoadBalancer 服务时,将在集群外部的 VPC 中自动创建第 7 层 VPC 负载均衡器。 VPC 负载均衡器是多专区负载均衡器,通过在工作程序节点上自动打开的专用 NodePort 来路由应用程序的请求。 缺省情况下,还会使用可用于访问应用程序的主机名来创建负载均衡器。

Kubernetes 如何通过 LoadBalancer 服务转发网络流量。
LoadBalancer VPC 群集中的服务流量

Ingress

通过使用 Ingress 应用程序负载均衡器 (ALB) 设置路由,公开集群中的多个应用程序。 ALB 使用安全的唯一公共或专用入口点(即 Ingress 子域)将入局请求路由到应用程序。 可以使用一个子域,将集群中的多个应用程序公开为服务。 Ingress 由三个组件组成:

  • Ingress 资源用于定义如何对应用程序的入局请求进行路由和负载均衡的规则。
  • ALB 用于侦听入局 HTTP、HTTPS 或 TCP 服务请求。 ALB 根据在 Ingress 资源中定义的规则,在各个应用程序 pod 之间转发请求。
  • 用于经典集群的多专区负载均衡器 (MZLB) 或用于 VPC 集群的 VPC 负载均衡器可处理对应用程序的所有入局请求,并在各个专区中的 ALB 之间对请求进行负载均衡。 它还支持对公共 Ingress IP 地址进行运行状况检查。

经典集群中的 Ingress 服务流量。
经典集群中的 Ingress 服务流量

VPC 集群中的 Ingress 服务流量。
VPC 集群中的 Ingress 服务流量

规划公共外部负载均衡

以公共方式向因特网公开集群中的应用程序。

经典集群中,可以将工作程序节点连接到公用 VLAN。 公用 VLAN 用于确定分配给每个工作程序节点的公共 IP 地址,这将为每个工作程序节点提供一个公用网络接口。 公用联网服务通过向应用程序提供公共 IP 地址和(可选)公共 URL 来连接到此公用网络接口。

VPC 集群中,工作程序节点仅连接到专用 VPC 子网。 但是,创建公用联网服务时,会自动创建 VPC 负载均衡器。 VPC 负载均衡器可以通过向应用程序提供公共 URL,将公共请求路由到应用程序。 应用程序以公共方式公开时,具有公共 URL 的任何人都可以向应用程序发送请求。

应用程序以公共方式公开时,具有公共服务 IP 地址或为应用程序设置的 URL 的任何人都可以向应用程序发送请求。 因此,请尽可能少公开应用程序。 仅当应用程序准备好接受来自外部 Web 客户机或用户的流量时,才向公众公开应用程序。

工作程序节点的公用网络接口通过集群创建期间在每个工作程序节点上配置的预定义 Calico 网络策略设置进行保护。 缺省情况下,所有工作程序节点都允许所有出站网络流量。 入站网络流量被阻止(少数端口除外)。 这些端口已打开,以便 IBM 可以监视网络流量,并自动为 Kubernetes 主节点安装安全性更新,同时还可以建立与 NodePort、LoadBalancer 和 Ingress 服务的连接。 有关这些策略的更多信息(包括如何修改这些策略),请参阅网络策略

为经典集群选择部署模式

要在经典集群中将应用程序向互联网公开,请选择一种使用公共 NodePort,、LoadBalancer, 或Ingress服务的负载均衡部署模式。 下表描述了每种可能的部署模式,以及可能要使用该模式的原因和设置该模式的方式。 有关这些部署模式使用的联网服务的基本信息,请参阅了解 Kubernetes 服务类型

NLB V1.0

  • 负载均衡方法:通过 IP 地址或子域名将应用程序对外暴露的基本负载均衡方式。
  • 用例:通过支持 SSL 终止的IP地址或子域名,快速将一个应用程序对外发布。
  • 实施
    1. 单区多区 集群中创建一个公共网络负载均衡器(NLB) 1.0。
    2. (可选)注册子域和运行状况检查。

NLB V2.0

  • 负载均衡方法:DSR 负载均衡,通过 IP 地址或子域名提供应用程序访问

  • 用例:将可能面临高流量访问的应用程序通过支持 SSL 终止的IP地址或子域名向公众开放。

  • 实施

    1. 完成先决条件
    2. 单个多专区 集群中创建公共 NLB 2.0。
    3. (可选)注册子域和运行状况检查。

Istio + NLB 子域

  • 负载均衡方法:通过子域名提供应用程序访问,并使用 Istio 路由规则的基本负载均衡方式。
  • 用例:实现 Istio 的路由后规则,例如针对同一应用微服务不同版本的规则,并通过公共子域名暴露由 Istio 管理的应用。
  • 实施
    1. 安装受管 Istio 附加组件
    2. 将应用程序包含在 Istio 服务网中。
    3. 子域注册缺省 Istio 负载均衡器。

Ingress ALB

  • 负载均衡方法:HTTPS 负载均衡,该方法通过子域名提供应用程序访问,并使用自定义路由规则。
  • 用例:为多个应用程序实现自定义路由规则和 SSL 终止。
  • 实施
    1. 为公共 ALB 创建 Ingress 服务
    2. 使用注释定制 ALB 路由规则。

为 VPC 集群选择部署模式

若要在 VPC 集群中将应用程序向互联网公开,请选择使用公共 LoadBalancerIngress 服务的负载均衡部署模式。 下表描述了每种可能的部署模式,以及可能要使用该模式的原因和设置该模式的方式。 有关这些部署模式使用的联网服务的基本信息,请参阅了解 Kubernetes 服务类型

VPC 负载均衡器

  • 负载均衡方法:通过主机名暴露应用程序的基本负载均衡
  • 用例:通过 VPC 负载均衡器分配的主机名,快速将一个应用程序对外公开。
  • 实现: 在集群中 创建公共 LoadBalancer 服务。 系统会在您的 VPC 中自动创建一个 VPC 负载均衡器,该负载均衡器会为您的应用的 LoadBalancer 服务分配一个主机名。

Istio

  • 负载均衡方法:通过主机名暴露应用程序,并使用 Istio 路由规则的基本负载均衡
  • 用例:实现 Istio 的后路由规则,例如针对同一应用微服务不同版本的规则,并通过公共主机名暴露由 Istio 管理的应用。
  • 实施: 1. 安装受管 Istio 附加组件。 2、 将应用程序包含在 Istio 服务网中。 3。 使用主机名注册缺省 Istio 负载均衡器。

Ingress ALB

  • 负载均衡方法:HTTPS 负载均衡,该方法通过子域名提供应用程序访问,并使用自定义路由规则。
  • 用例:为多个应用程序实现自定义路由规则和 SSL 终止。
  • 实施
    1. 为公共 ALB 创建 Ingress 服务
    2. 使用注释定制 ALB 路由规则。

规划专用外部负载均衡

以专用方式向仅专用网络公开集群中的应用程序。

在 IBM Cloud Kubernetes Service 的 Kubernetes 集群中部署应用程序后,您可能希望使应用程序仅可供位于集群所有专用网络上的用户和服务访问。 专用负载均衡非常适用于使应用程序可供集群外部的请求使用,而无需向一般公众公开应用程序。 还可以使用专用负载均衡来测试访问,请求路由以及对应用程序进行其他配置后,再使用公用网络服务向公众公开应用程序。

例如,假设为应用程序创建了专用负载均衡器。 可通过以下对象访问此专用负载均衡器:

  • 该同一集群中的任何 pod。
  • 同一 IBM Cloud 帐户中任何集群中的任何 pod。
  • 通过 VPN 连接来连接到负载均衡器 IP 所在子网的任何系统(如果您不在 IBM Cloud 帐户中,但仍在公司防火墙后)。
  • 通过 VPN 连接来连接到负载均衡器 IP 所在子网的任何系统(如果您位于其他 IBM Cloud 帐户中)。
  • 在经典集群中连接到同一 IBM Cloud 帐户中任何专用 VLAN 的任何系统(如果启用了 VRF 或 VLAN 生成)。
  • 在 VPC 集群中:
    • 如果您允许 VPC 子网之间的流量,则同一 VPC 中的任何系统。
    • 如果您允许 VPC 之间的流量通行,那么任何能够访问该集群所在 VPC 的系统。

为经典集群选择部署模式

若要在经典集群中仅通过私有网络提供应用程序,请根据集群的 VLAN 配置选择相应的负载均衡部署模式:

在公用和专用 VLAN 设置中设置专用负载均衡

工作程序节点同时连接至公用 VLAN 和专用 VLAN 时,可以通过创建专用 NodePort、LoadBalancer 或 Ingress 服务来使应用程序只能从专用网络进行访问。 然后,可以创建 Calico 策略以阻止流至服务的公共流量。

预定义 Calico 网络策略设置 保护工作程序节点的公用网络接口,并在集群创建期间在每个工作程序节点上进行配置。 缺省情况下,所有工作程序节点都允许所有出站网络流量。 入站网络流量被阻止(少数端口除外)。 这些端口使 IBM 能够监控网络流量,并为 Kubernetes 主节点自动安装安全更新,同时确保能够与 NodePort,、LoadBalancer, 以及Ingress服务建立连接。

由于缺省 Calico 网络策略允许流至这些服务的入站公共流量,因此您可以创建 Calico 策略,以改为阻止流至这些服务的所有公共流量。 例如,NodePort 服务通过工作程序节点的专用和公共 IP 地址,在工作程序节点上打开一个端口。 具有可移植专用 IP 地址的 NLB 服务会在每个工作程序节点上打开一个公共 NodePort。 必须创建 Calico DNAT 前网络策略来阻止公共 NodePort。

查看专用联网的负载均衡部署模式。

NodePort
负载均衡方法:在工作节点上,通过该节点的私有 IP 地址公开应用程序的端口
用例:测试某款应用的私有访问权限,或仅在短时间内授予访问权限。
实现: 创建 NodePort 服务。 NodePort 服务通过工作程序节点的专用和公共 IP 地址在工作程序节点上打开端口。 必须使用 Calico DNAT 前网络策略来阻止流至公共 NodePort 的流量。
NLB V1.0
负载均衡方法:通过私有 IP 地址提供应用程序访问的基本负载均衡。
用例:快速将一个应用程序暴露到具有私有 IP 地址的私有网络中。
实施: 1. 创建专用 NLB 服务。 具有可移植专用 IP 地址的 NLB 仍在每个工作程序节点上打开公共节点端口。 2、 请创建 Calico DNAT 前网络策略来阻止流至公共 NodePort 的流量。
NLB V2.0
负载均衡方法:DSR 负载均衡,该方法通过私有 IP 地址对外提供应用程序服务。
用例:将可能面临高流量访问的应用程序暴露到具有 IP 地址的私有网络中。
实施: 1. 完成先决条件。 2、 在 单个多专区 集群中创建专用 NLB 2.0。 3。 具有可移植专用 IP 地址的 NLB 仍在每个工作程序节点上打开公共节点端口。 请创建 Calico DNAT 前网络策略来阻止流至公共 NodePort 的流量。
Ingress ALB
负载均衡方法:HTTPS 负载均衡,该方法通过子域名提供应用程序访问,并使用自定义路由规则。
用例:为多个应用程序实现自定义路由规则和 SSL 终止。
实施: 1. 禁用公共 ALB。 2、 启用专用 ALB 并创建 Ingress 资源。 3。 使用注释定制 ALB 路由规则。 4. 具有可移植专用 IP 地址的 NLB 仍在每个工作程序节点上打开公共节点端口。 请创建 Calico DNAT 前网络策略来阻止流至公共 NodePort 的流量。

设置专用负载均衡以用于仅专用 VLAN 设置

工作程序节点连接至仅专用 VLAN 时,可以通过创建专用 NodePort、LoadBalancer 或 Ingress 服务来使应用程序只能从专用网络进行外部访问。

如果您的集群仅连接到私有 VLAN,并且您允许主节点和工作节点通过仅限私有网络的服务端点进行通信,则无法自动将您的应用暴露到私有网络中。 您必须部署一台网关设备(例如 VRA(Vyatta)),使其充当防火墙,用于阻止或允许流量通过。 由于工作程序节点未连接到公用 VLAN,因此不会将公共流量路由到 NodePort、LoadBalancer 或 Ingress 服务。 但是,您必须在网关设备防火墙中打开必需的端口和 IP 地址,以允许流至这些服务的入站流量。

请查看以下适用于私有网络的负载均衡部署模式:

NodePort
负载均衡方法:在工作节点上,通过该节点的私有 IP 地址公开应用程序的端口
用例:测试某款应用的私有访问权限,或仅在短时间内授予访问权限。
实施: 1. 创建 NodePort 服务。 2、 在您的私有防火墙中,将部署服务时配置的端口对所有工作节点的私有 IP 地址开放,以允许流量通过。 要查找该端口,请运行 kubectl get svc。 该端口位于 30000-32767 范围内。
NLB V1.0
负载均衡方法:通过私有 IP 地址提供应用程序访问的基本负载均衡。
用例:快速将一个应用程序暴露到具有私有 IP 地址的私有网络中。
实施: 1. 创建专用 NLB 服务。 2、 在专用防火墙中,打开将服务部署到 NLB 的专用 IP 地址时所配置的端口。
NLB V2.0
负载均衡方法:DSR 负载均衡,该方法通过私有 IP 地址对外提供应用程序服务。
用例:将可能面临高流量访问的应用程序暴露到具有 IP 地址的私有网络中。
实施: 1. 创建专用 NLB 服务。 2. 在专用防火墙中,打开将服务部署到 NLB 的专用 IP 地址时所配置的端口。
Ingress ALB
负载均衡方法:HTTPS 负载均衡,该方法通过子域名提供应用程序访问,并使用自定义路由规则。
用例:为多个应用程序实现自定义路由规则和 SSL 终止。
实施: 1. 配置一个 可在私有网络上访问的 DNS 服务。 2、 启用专用 ALB 并创建 Ingress 资源。 3。 在专用防火墙中,针对专用 ALB 的 IP 地址打开端口 80(对于 HTTP)或端口 443(对于 HTTPS)。 4. 使用注释定制 ALB 路由规则。

为 VPC 集群选择部署模式

通过创建专用 NodePort、LoadBalancer 或 Ingress 服务,使应用程序只能从专用网络进行访问。

请查看以下适用于 VPC 集群中私有应用网络的负载均衡部署模式:

NodePort
负载均衡方式:在工作节点上开放一个端口,通过该端口的私有 IP 地址提供应用程序服务。
用例:测试某款应用的私有访问权限,或仅在短时间内授予访问权限。 注意:只有当您已连接到私有 VPC 网络(例如通过 VPN 连接)时,才能通过 NodePort 访问该应用。
实现: 创建专用 NodePort 服务
VPC 应用程序负载均衡器
负载均衡方法:通过私有主机名提供应用程序访问的基本负载均衡。
用例:利用 VPC 应用程序负载均衡器分配的私有主机名,快速将一个应用程序暴露到私有网络中。
实现: 在集群中创建专用 LoadBalancer 服务。 系统会在您的 VPC 中自动创建一个多区域 VPC 应用负载均衡器,该负载均衡器会为您的应用的 LoadBalancer 服务分配一个主机名。
Ingress ALB
负载均衡方法:HTTPS 负载均衡,该方法通过主机名暴露应用程序,并使用自定义路由规则。
用例:为多个应用程序实现自定义路由规则和 SSL 终止。
实施: 1. 启用专用 ALB,创建子域以向 DNS 条目注册 ALB,并创建 Ingress 资源。 2、 使用注释定制 ALB 路由规则。