网络负载均衡

本主题介绍如何使用 GKE on Azure 设置由 Azure 标准负载均衡器支持的 L4 负载均衡器。

创建 LoadBalancer 类型的 Service 时,GKE on Azure 控制器会配置 Azure 负载平衡器

准备工作

  • 您必须创建集群并配置 kubectl 才能访问集群。

选择公共或专用负载均衡器

服务负载均衡器可以是公共的(具有公共前端 IP),也可以是内部(只能通过专用 IP 访问)。

默认情况下,新 Service 是公开的。要创建内部负载均衡器,请在清单中将 service.beta.kubernetes.io/azure-load-balancer-internal 注解设置为 "true"

为内部负载均衡器选择子网

创建内部负载均衡器时,GKE on Azure 需要选择要在其中放置负载均衡器的子网。此默认服务负载均衡器子网是从集群的创建参数中选择的,如下所示:

  1. 如果已指定且非空,则使用 cluster.networking.serviceLoadBalancerSubnetId
  2. 否则 cluster.controlPlane.subnetId

或者,您也可以通过向 Service 添加 service.beta.kubernetes.io/azure-load-balancer-internal-subnet 注解来指定要用于给定负载均衡器的子网。此注解的值是子网的名称。

创建 LoadBalancer 示例

您可以通过创建部署并使用 Service 公开该部署来创建负载均衡器。

  1. 创建您的部署。此 Deployment 中的容器会侦听端口 50001。将以下 YAML 保存到名为 my-deployment-50001.yaml 的文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. 使用 kubectl apply 创建 Deployment:

    kubectl apply -f my-deployment-50001.yaml
    
  3. 验证三个 pod 是否正在运行:

    kubectl get pods --selector=app=products
    
  4. 为您的部署创建类型为 LoadBalancer 的 Service。您可以创建公共或内部的 Azure 标准负载均衡器。选择下列其中一个选项。

    将以下清单之一复制到名为 my-lb-service.yaml 的文件中。

    公有云

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    内部

    您可以通过将注解 service.beta.kubernetes.io/azure-load-balancer-internal 设置为 "true" 来创建内部 LoadBalancer。以下 YAML 包含此注解。yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. 使用 kubectl apply 创建 Service:

    kubectl apply -f my-lb-service.yaml
    
  6. 使用 kubectl get service 查看 Service 的地址。

    kubectl get service my-lb-service
    

    输出将包含列 EXTERNAL-IP 的负载均衡器地址(公共或专用),具体取决于负载均衡器的创建方式。

  7. 如果您已创建公共负载均衡器,则可以使用 curl 连接到负载均衡器。将 external-ip 替换为上一步的 kubectl get service 输出中的地址。

    curl http://external-ip:60000
    

    输出类似以下内容:

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

清理

如需移除 Service 和 Deployment,请使用 kubectl delete

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml