为外部负载均衡创建全局子网

本页面将引导您完成以下操作:在 Google Distributed Cloud (GDC) 气隙环境中创建全局子网,并将该子网用于外部负载均衡器 (ELB)。

借助全局子网,您可以配置可在 GDC 组织中的多个可用区使用外部负载均衡操作的子网。负载均衡通过在多个服务器之间分配网络流量,可提高应用和服务的性能、可靠性和可用性。如需详细了解用于负载均衡的全局子网,请参阅关于用于负载均衡的子网

本页面适用于应用运维人员群组中的开发者,他们希望为其组织管理负载均衡。如需了解详情,请参阅 GDC 气隙环境文档的受众群体

准备工作

如需创建全局子网并将其配置为用于 ELB,您必须具备以下条件:

  • 拥有您要配置负载均衡器的项目。如需了解详情,请参阅创建项目
  • 必要的身份和访问权限角色:

    • 请让您的组织 IAM 管理员向您授予 Load Balancer Admin (load-balancer-admin) 角色。
    • 请让您的组织 IAM 管理员向您授予 Global Load Balancer Admin (global-load-balancer-admin) 角色。
    • 请让您的组织 IAM 管理员为您授予 Subnet Organization Admin (subnet-org-admin) 角色。
    • 请让您的组织 IAM 管理员为您授予 Subnet Project Admin (subnet-project-admin) 角色。

    如需了解详情,请参阅预定义角色说明

创建父级全球子网

您在本部分中创建的父级全局子网将作为 IP 地址池,从中获取 ELB IP 地址。子网必须包含 ipam.gdc.goog/network-segment: data 标签。您可以使用 spec.parentReference.name 字段指定子网父级。 您可以通过以下两种方式配置相应父子网的 CIDR:

如需详细了解静态 CIDR 配置与动态 CIDR 配置之间的区别,请参阅静态和动态 CIDR 配置

使用静态 CIDR 配置创建子网

如果您需要精确控制 IP 地址空间,请使用静态 CIDR 配置。 此子网的类型为 Branch。如需详细了解根子网、分支子网和叶子网类型,请参阅子网层次结构

如需创建具有静态 CIDR 配置的全局父子网,请将所选 CIDR 地址块添加到 spec.ipv4Request.cidr 字段:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    cidr: STATIC_CIDR
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

替换以下内容:

  • GLOBAL_API_SERVER:全局管理 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
  • ELB_PARENT_SUBNET_NAME:为 ELB 的全局父子网选择的名称。
  • STATIC_CIDR:您要为此父子网分配的特定 CIDR 地址块,例如 10.0.10.0/27
  • PARENT_NAME:现有父子网的名称,新子网将基于该父子网创建。

如需将此子网配置为与 ELB 搭配使用,您必须为 ELB 创建叶子子网

使用动态 CIDR 配置创建子网

动态 CIDR 配置会自动从父子网中分配指定大小的可用 CIDR 块。这简化了 IP 地址管理,尤其是在大型环境中。 此子网的类型为 Branch。如需详细了解根子网、分支子网和叶子网子网类型,请参阅子网层次结构。 如需创建具有动态 CIDR 的全局父子网,请使用所选的前缀长度配置 spec.ipv4Request.prefixLength 字段:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
piVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
  ipam.gdc.goog/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    prefixLength: PREFIX_LENGTH
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

替换以下内容:

  • ELB_PARENT_SUBNET_NAME:您为 ELB 父子网选择的名称,例如 lb-global-lancer-elb-subnet
  • STATIC_CIDR:您要使用的特定 CIDR 地址块,例如 10.0.10.0/27。此变量仅适用于静态 CIDR 配置。
  • PARENT_NAME:用于创建此新子网的现有父子网的名称,例如 default-vpc-workload-cidr
  • PREFIX_LENGTH:动态分配的 CIDR 的所选前缀长度,例如 27。此变量仅适用于动态 CIDR 配置。

如需将此子网配置为与 ELB 搭配使用,您必须为 ELB 创建叶子子网

为 ELB 创建叶子子网

设置全局父子网后,您必须创建一个叶子子网,以便为全局 ELB 服务分配单个 IP 地址。此叶子子网的 type 字段值必须为 Leaf,并且必须与负载均衡器资源(例如 ForwardingRuleBackendServiceBackend)位于同一项目命名空间中。

如需创建叶子子网并将其关联到 ELB,请按以下步骤操作:

  1. 创建一个 prefixLength 值为 32 的叶子子网,因为该子网旨在分配单个 IP 地址。parentReference 值引用了之前创建的父级全局子网

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/allocation-preference: default
        ipam.gdc.goog/network-segment: data
      name: ELB_IP_SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_REF
        namespace: platform
      type: Leaf
    EOF
    

    替换以下内容:

    • ELB_IP_SUBNET_NAME:您为叶子子网选择的名称,例如 lb-project-elb-ip
    • PROJECT_NAMESPACE:与您的项目对应的 Kubernetes 命名空间,其中包含您的 ELB 对象,例如 lb-project
    • PARENT_REF:此叶子子网从中获取 IP 地址的父子网的名称,例如您之前创建的父级全局子网
  2. 将新创建的叶子子网(包含分配的 IP 地址)与 ELB 的 ForwardingRuleExternal 资源相关联。在 ForwardingRuleExternal 资源中,更新 spec.cidrRef.name 字段以引用您在上一步中创建的叶子子网的名称:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleExternal
    metadata:
      name: FRI_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ports:
        - port: PORT
          protocol: PROTOCOL
      backendServiceRef:
        name: BES_NAME
      cidrRef:
        name: LEAF_SUBNET_NAME
    EOF
    

    替换以下内容:

    • FRI_NAME:您为 ForwardingRuleExternal 对象选择的名称,例如 nginx-elb-static-fr
    • PORT:ELB 监听传入流量的端口号,例如 80
    • PROTOCOL:ELB 使用的网络协议,例如 TCPUDP
    • BES_NAME:与此 ForwardingRuleExternal 资源关联的 BackendService 的名称,例如 nginx-bes
    • LEAF_SUBNET_NAME:您在上一步中创建的叶子子网的名称,例如 lb-project-elb-ip