ネットワーク ロード バランシング

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

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

始める前に

  • クラスタを作成し、クラスタにアクセスするように 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 アノテーションを Service に追加して、特定のロードバランサに使用するサブネットを指定することもできます。このアノテーションの値はサブネットの名前です。

サンプルの 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 Standard Load Balancer は、パブリックまたは内部のいずれかで作成できます。次のいずれかを選択します。

    次のいずれかのマニフェストを 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