外部负载平衡器 (ELB) 通过从分配给项目的池的 IP 地址(来自更大的实例外部 IP 池)将项目外部的服务公开。
ELB 虚拟 IP (VIP) 地址在组织之间不会发生冲突,并且在所有组织中都是唯一的。因此,您必须仅针对项目外部的客户端必须访问的服务使用 ELB 服务。
只要您允许工作负载退出项目,在项目内运行的工作负载就可以访问 ELB 服务。此流量模式实际上要求项目中的出站流量先返回到内部服务,然后再返回到项目。
准备工作
如需配置 ELB 服务,您必须具备以下条件:
- 拥有您要配置负载均衡器的项目。如需了解详情,请参阅创建项目。
- 自定义的
ProjectNetworkPolicy(PNP) 入站流量政策,用于允许流量流向此 ELB 服务。如需了解详情,请参阅配置 PNP 以允许流量流向 ELB。 必要的身份和访问权限角色:
- Project NetworkPolicy Admin:有权管理项目命名空间中的项目网络政策。请让您的组织 IAM 管理员为您授予 Project NetworkPolicy Admin (
project-networkpolicy-admin) 角色。 - Load Balancer Admin:请组织 IAM 管理员为您授予 Load Balancer Admin (
load-balancer-admin) 角色。
- Project NetworkPolicy Admin:有权管理项目命名空间中的项目网络政策。请让您的组织 IAM 管理员为您授予 Project NetworkPolicy Admin (
配置 PNP 以允许流量流向 ELB
为了使 ELB 服务正常运行,您必须配置并应用自己的自定义 ProjectNetworkPolicy 入站流量政策,以允许流量流向此 ELB 服务。指定外部 CIDR 地址以允许流量进入此 ELB:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: allow-inbound-traffic-from-external
spec:
policyType: Ingress
subject:
subjectType: UserWorkload
ingress:
- from:
- ipBlock:
cidr: CIDR
ports:
- protocol: TCP
port: PORT
EOF
替换以下内容:
MANAGEMENT_API_SERVER:管理 API 服务器的 kubeconfig 路径的 kubeconfig 路径。如果您尚未为目标可用区中的 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。PROJECT:您的 GDC 项目的名称。CIDR:需要从哪个外部 CIDR 访问 ELB。此政策是必需的,因为外部负载均衡器使用直接服务器返回 (DSR),该功能可保留源外部 IP 地址,并在返回路径上绕过负载均衡器。PORT:负载均衡器后面的 pod 上的后端端口。此值位于Service资源的清单的.spec.ports[].targetPort字段中。
创建外部负载平衡器
在 GDC 中使用三种不同的方法创建 ELB:
- 使用 gdcloud CLI 创建 ELB。
- 使用 Networking Kubernetes 资源模型 (KRM) API 创建 ELB。
您可以使用 KRM API 和 gdcloud CLI 定位 Pod 或虚拟机工作负载。当您直接在 Kubernetes 集群中使用 Kubernetes 服务时,只能以创建 Service 对象的集群中的工作负载为目标。