设置专用路径Network Load Balancer for VPC

虚拟私有云 4.16 及更高版本

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

先决条件

  1. 访问您的Red Hat OpenShift集群

  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. 将负载平衡器服务部署到群集。

    oc 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 端口。 有关更多信息,请参阅 了解默认情况下的安全群集 VPC 网络 以及 创建和管理 VPC 安全组
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
注释,用于指定使用哪个子网为ppNLB 分配 IP 地址。 这些 IP 地址仅供内部使用。 该值可以是 VPC 子网 ID、VPC 子网名称或 VPC 子网 CIDR。 您必须只指定一个子网。 所有传入流量似乎都来自这些 IP 地址。 虽然所有地址都在一个区域内,但ppNLB仍会处理来自所有区域的传入流量。 如果这个特定区域发生故障,其他区域的传入流量仍可正常工作。 如果不指定此注释,将自动选择子网,并使用可用空闲 IP 地址最多的群集工作节点子网。 要查看所有资源组中的子网,请运行 ibmcloud oc subnets --provider vpc-gen2 --vpc-id VPC_ID --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
健康检查 URL 路径,用于 HTTP 和 HTTPs 健康检查。 此注释仅在 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
您在应用部署 YAML 文件的 spec.template.metadata.labels 部分中使用的标签键(<selector_key> )和标签值(<selector_value> )。 此定制标签可标识运行您的应用程序的所有 pod,以便在负载均衡中包含这些 pod。
port
服务侦听的端口。
targetPort
可选:服务将流量转发到的端口。 在 Pod 中运行的应用程序必须监听该目标端口上的传入 TCP 流量。 目标端口通常在应用程序 pod 中运行的映像中静态定义。 pod 中配置的目标端口与服务的节点端口不同,也可能与 VPC LB 上配置的外部端口不同。