IBM Cloud Docs
设置专用路径Network Load Balancer for VPC

设置专用路径Network Load Balancer for VPC

虚拟私有云 1.1.29及以后

在没有公共互联网访问的完全私有 VPC 环境中,可以使用私有路径网络负载平衡器来平衡流向 VPC 集群中运行的应用程序的网络流量。 更多信息,请参阅 专用路径服务用例

VPC 专用路径网络负载平衡器目前处于测试阶段,其功能可能会有变化。

先决条件

  1. 登录您的帐户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。

  2. 如果还没有正在运行的应用程序,请 在集群中部署一个应用程序。 确保在部署配置文件的 metadata 部分中添加标签。 此定制标签可标识运行您的应用程序的所有 pod,以便在负载均衡中包含这些 pod。

配置 "LoadBalancer 服务

  1. 复制 LoadBalancer* 配置,并将其保存到名为 lb.yaml 的文件中。

    apiVersion: v1
    kind: Service
    metadata:
      name: <app_name>-vpc-nlb-<VPC_zone>
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "private-path" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet_ID>"
    spec:
      type: LoadBalancer
      selector:
        <selector_key>: <selector_value>
      ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
  2. 根据使用情况自定义字段。 有关注释的完整列表,请参阅 注释和规范

  3. 保存更改。

  4. 将负载平衡器服务部署到群集。

    kubectl apply -f lb.yaml
    

创建专用路径服务

按照说明 创建专用路径服务

设置虚拟专用端点网关

既然已经配置了负载平衡器服务,就必须设置虚拟专用端点 (VPE) 网关来访问群集中的应用程序。

更多信息,请参阅 在用户界面中创建端点网关

通过 VPE 连接应用程序

有关通过 VPE 连接到应用程序的信息,请参阅 设置端点网关后访问虚拟专用端点

注释和规格

查看所需和可选的 VPC NLB 注释和规范。

所需的注释和规格

externalTrafficPolicy
指定 LocalCluster
设为 Local 可保留客户端向应用程序发出请求时的源 IP 地址。 此设置可防止将传入流量转发到其他节点。 该选项还可以配置 HTTP 健康检查。
如果设置了 Cluster,则仅从 VPC NLB 最初转发传入请求的工作节点执行 DSR。 传入请求到达后,请求会被转发到包含应用程序 pod 的工作节点,该工作节点可能位于不同的区域。 应用程序 pod 的响应会发送到原始工作节点,该工作节点会使用 DSR 绕过 VPC NLB 直接将响应发回客户端。 该选项还可以配置 TCP 健康检查。

可选注释和规格

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
包含一个唯一的名称,使您的 VPC 负载均衡器具有持久性。 删除所属群集时,不会删除持久 VPC 负载平衡器。 有关更多信息,请参阅 持久 VPC 负载平衡器。 此注释只能在创建负载平衡器时设置。 它不能用于更新操作。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
此注解在与Kubernetes负载平衡器服务相关联的 VPC 负载平衡器资源上设置健康检查协议。 可用选项为 httphttpstcp。 通常,VPC LB 健康检查协议由Kubernetes负载均衡器服务规范中的 externalTrafficPolicy 设置值决定。 但是,本注释会覆盖这一逻辑。 此注解不会改变Kubernetes(尤其是 kube-proxy)对 externalTrafficPolicy 的各种设置的行为方式。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
用于健康检查的 TCP 端口。 只有同时指定 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 时,该注释才适用。 如果指定的 TCP 端口在Kubernetes节点端口范围(30,000-32,767)之外,则必须修改应用于群集工作节点的 VPC 安全组,以允许端口上的入站流量。 如果将此注释应用于与 VPC ALB 关联的Kubernetes负载平衡器服务,则必须修改分配给 VPC ALB 的安全组的出站规则,以允许向指定 TCP 端口的出站流量。 更多信息,请参阅 管理安全组
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
注释,用于指定使用哪个子网为ppNLB 分配 IP 地址。 这些 IP 地址仅供内部使用。 该值可以是 VPC 子网 ID、VPC 子网名称或 VPC 子网 CIDR。 您必须只指定一个子网。 所有传入流量似乎都来自这些 IP 地址。 虽然所有地址都在一个区域内,但ppNLB仍会处理来自所有区域的传入流量。 如果这个特定区域发生故障,其他区域的传入流量仍可正常工作。 如果不指定此注释,将自动选择子网,并使用可用空闲 IP 地址最多的群集工作节点子网。 要查看所有资源组中的子网,请运行 ibmcloud ks subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
注释,用于指定工作节点标签选择器。 您可以通过指定标签选择器密钥,将群集中的特定工作节点配置为接收流量。 注释中只能包含一个标签选择器,而且必须以 "key=value" 格式指定该选择器。 如果未指定此注释,群集中的所有工作节点都会被配置为接收来自 VPC NLB 的流量。 此注释优先于 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone 注释,工作节点上的任何 dedicated: edge 标签都将被忽略。 要将流量限制在特定区域内,可以使用此注释指定该区域内的工作者节点。 请注意,在群集工作节点上设置新标签并不会自动将工作节点配置为接收流量;您必须重新创建或更新 VPC NLB,才能让新标签的工作节点接收流量。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
用于 HTTP 和 HTTPs 健康检查的健康检查 URL 路径。 此注释仅在 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 设置为 httphttps 时适用。 URL 路径必须采用 origin-form 请求目标的格式。 如果未指定此注释,且 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 注释设置为 httphttps,则应用默认值 /
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
可选。 两次健康检查之间的等待秒数。 默认情况下,该值设置为 5,最小值为 2,最大值为 60。 该值必须大于 ibm-load-balancer-cloud-provider-vpc-health-check-timeout 值,默认设置为 2
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
可选。 等待健康检查回复的秒数。 默认情况下,该值设置为 2,最小值为 1,最大值为 59。 该值必须小于 ibm-load-balancer-cloud-provider-vpc-health-check-delay,默认设置为 5
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
VPC 负载均衡器健康检查重试的最大次数。 默认情况下,该值设置为 2,最小值为 1,最大值为 10
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota
可选。 负载平衡器路由到的每个区域的工作节点数量。 缺省值为 8。 对于在三个区域都有工作节点的集群来说,负载平衡器会路由到总共 24 个工作节点。 负载平衡器路由到的所有区域的工作节点总数不能超过 50 个。 如果集群中所有区域的工作节点都少于 50 个,则指定 0 以路由到区域中的所有工作节点。
selector
The label key (<selector_key>) and value (<selector_value>) that you used in the spec.template.metadata.labels section of your app deployment YAML. 此定制标签可标识运行您的应用程序的所有 pod,以便在负载均衡中包含这些 pod。
port
服务侦听的端口。
targetPort
可选:服务引导流量的端口。 pod 中运行的应用程序必须监听此目标端口上的 TCP 输入流量。 目标端口通常在应用程序 pod 中运行的映像中静态定义。 pod 中配置的目标端口与服务的节点端口不同,也可能与 VPC LB 上配置的外部端口不同。