IBM Cloud Docs
选择应用程序曝光服务

选择应用程序曝光服务

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

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

指导您为应用选择最佳网络选项bottom"
选择应用曝光服务*

通过 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 支持四种基本类型的网络服务: ClusterIPNodePortLoadBalancerIngressClusterIP 服务使应用程序可在内部访问,以仅允许集群中的 pod 之间进行通信。NodePortLoadBalancerIngress 服务使应用程序可从公共因特网或专用网络外部访问。

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

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 访问应用程序。

How Kubernetes forwards public network traffic through a NodePort service.
How Kubernetes forwards traffic through a NodePort service

LoadBalancer

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

经典集群中的 LoadBalancer 服务

经典基础结构

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

How Kubernetes forwards network traffic through LoadBalancer services.
LoadBalancer service traffic in Classic clusters

VPC 集群中的 LoadBalancer 服务

虚拟私有云

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

How Kubernetes forwards network traffic through LoadBalancer services.
LoadBalancer service traffic in VPC clusters

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 路由规则。
  2. 具有可移植专用 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)。
  2. 使用注释定制 ALB 路由规则。

为 VPC 集群选择部署模式

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

请查看以下针对 VPC 集群中私有应用程序网络的负载平衡部署模式:

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