ネットワーク負荷分散

このトピックでは、GKE on Azure を使用して、Azure 標準ロードバランサを基盤とする L4 ロードバランサを設定する方法について説明します。

LoadBalancer タイプの Service を作成すると、GKE on Azure コントローラによって Azure ロードバランサが構成されます。

準備

  • クラスタを作成し、kubectl を構成してクラスタにアクセスできるようにする必要があります。

パブリック ロードバランサまたはプライベート ロードバランサの選択

Service のロードバランサは、パブリック フロントエンド IP を持つパブリック ロードバランサにすることも、プライベート IP を介してのみアクセスできる内部ロードバランサにすることもできます。

デフォルトでは、新しい Service は公開されます。内部ロードバランサを作成するには、マニフェストで service.beta.kubernetes.io/azure-load-balancer-internal アノテーションを "true" に設定します。

内部ロードバランサのサブネットの選択

内部ロードバランサを作成する場合、GKE on Azure はロードバランサを配置するサブネットを選択する必要があります。このデフォルトのサービス ロードバランサのサブネットは、次のようにクラスタの作成パラメータから選択されます。

  1. 指定され、空でない場合は cluster.networking.serviceLoadBalancerSubnetId
  2. そうでない場合は cluster.controlPlane.subnetId

また、service.beta.kubernetes.io/azure-load-balancer-internal-subnet アノテーションをサービスに追加することで、特定のロードバランサに使用するサブネットを指定することもできます。このアノテーションの値はサブネット名です。

LoadBalancer の例を作成する

ロードバランサを作成するには、Deployment を作成して Service で公開します。

  1. Deployment を作成します。この 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. 次のようにして、3 つの Pod が実行中であることを確認します。

    kubectl get pods --selector=app=products
    
  4. Deployment に 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