ネットワーク ロードバランサを作成する

このページでは、AWS Elastic Load Balancer(ELB)またはネットワーク ロードバランサ(NLB)エンドポイントを使用して L4 ロードバランサを設定する方法について説明します。

GKE on AWS で使用できる他のタイプのロードバランサの詳細については、ロードバランサの概要をご覧ください。

始める前に

ロードバランサ タイプを選択する

GKE on AWS は、AWS Classic Elastic Load Balancer(Classic ELB)または NLB として Service ロードバランサを作成します。デフォルトでは、GKE on AWS は Classic ELB を作成します。NLB を作成するには、service.beta.kubernetes.io/aws-load-balancer-type アノテーションを nlb に設定します。ロードバランサのタイプの違いについては、AWS ドキュメントのロードバランサの種類をご覧ください。

インターネット接続ロードバランサまたは内部ロードバランサを選択する

Service のロードバランサは、インターネット接続(一般公開された解決可能な DNS 名を持つ)または内部(VPC 内でのみアクセス可能)のいずれかです。

デフォルトでは、新しいロードバランサはインターネットに接続します。内部ロードバランサを作成するには、マニフェストで service.beta.kubernetes.io/aws-load-balancer-internal アノテーションを "true" に設定します。

aws-load-balancer-internal アノテーションを既存の Service に適用することはできません。インターネット接続と内部の間で構成を変更するには、既存の LoadBalancer を削除して再作成する必要があります。

サブネットを選択する

ロードバランサを作成するとき、AWS はロードバランサを配置するサブネットを認識する必要があります。デフォルトでは、これらのサブネットは VPC 内のサブネットから自動的に検出されます。そのためには、サブネットに特定のタグが必要です。サブネットの自動検出とタグ付けの詳細については、ロードバランサのサブネットをご覧ください。

また、service.beta.kubernetes.io/aws-load-balancer-subnets アノテーションを Service に追加することで、アノテーションを使用してロードバランサのサブネットを指定することもできます。このアノテーションの値は、サブネット ID またはサブネット名のカンマ区切りのリストです(例: subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef)。

ロードバランサの例を作成する

LoadBalancer タイプの Service を作成するには、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 を作成します。

  5. 必要なロードバランサのタイプを決定します。

    • インターネット接続の Classic ELB
    • インターネット接続の NLB
    • 内部 Classic ELB
    • 内部 NLB

    要件を満たすタブを選択し、その中のマニフェストを my-lb-service.yaml という名前のファイルにコピーします。

    インターネット接続 Classic

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

    インターネット接続 NLB

    アノテーション service.beta.kubernetes.io/aws-load-balancer-typenlb に設定して、NLB を作成します。次の YAML にはこのアノテーションが含まれています。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    内部 Classic

    アノテーション service.beta.kubernetes.io/aws-load-balancer-internal"true" に設定して、内部 LoadBalancer を作成します。次の YAML にはこのアノテーションが含まれています。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    内部 NLB

    アノテーションを設定して、内部 NLB を作成します。

    • service.beta.kubernetes.io/aws-load-balancer-internal"true" に設定
    • service.beta.kubernetes.io/aws-load-balancer-typenlb

    次の YAML には、この両方のアノテーションが含まれています。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    
  6. kubectl apply を使用して Service を作成します。

    kubectl apply -f my-lb-service.yaml
    
  7. kubectl get service で Service のアドレスを表示します。

    kubectl get service my-lb-service
    

    出力には、ロードバランサのアドレス(ロードバランサの作成方法に応じて、パブリックまたはプライベートのいずれか)が表示される列 EXTERNAL-IP が含まれます。

  8. インターネット接続ロードバランサを作成した場合は、curl で次のコマンドを使用してロードバランサに接続できます。

    curl http://EXTERNAL_IP:60000
    

    EXTERNAL_IP は、前の手順の EXTERNAL-IP 列のアドレスに置き換えます。

出力は次のようになります。

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

クリーンアップ

Service と Deploymen を削除するには、kubectl delete コマンドを使用します。

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

次のステップ