このページでは、AWS Elastic Load Balancer(ELB)またはネットワーク ロードバランサ(NLB)エンドポイントを使用して L4 ロードバランサを設定する方法について説明します。
GKE on AWS で使用できる他のタイプのロードバランサの詳細については、ロードバランサの概要をご覧ください。
準備
- クラスタを作成し、
kubectl
がそのクラスタに接続するよう構成します。 - サービス ロードバランサのサブネットにタグを付けます。これは、サブネットの自動検出に必要です。
- Classic か Network ELB のどちらが必要かを決定します。
- インターネット接続ロードバランサと内部ロードバランサのどちらを使用するかを決定します。
ロードバランサ タイプを選択する
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 ドキュメントのロードバランサの種類をご覧ください。
インターネット接続ロードバランサまたは内部ロードバランサを選択する
サービス ロードバランサは、インターネット接続(一般公開された解決可能な DNS 名を持つ)または内部(VPC 内でのみアクセス可能)のいずれかです。
デフォルトでは、新しいロードバランサはインターネットに接続します。内部ロードバランサを作成するには、マニフェストで service.beta.kubernetes.io/aws-load-balancer-internal
アノテーションを "true"
に設定します。
aws-load-balancer-internal
アノテーションを既存のサービスに適用することはできません。インターネット接続と内部構成を変更するには、既存の LoadBalancer を削除して再作成する必要があります。
サブネットを選択する
ロードバランサを作成するとき、AWS はロードバランサを配置するサブネットを認識する必要があります。デフォルトでは、これらのサブネットは VPC 内のサブネットから自動的に検出されます。そのためには、サブネットに特定のタグが必要です。サブネットの自動検出とタグ付けの詳細については、ロードバランサのサブネットをご覧ください。
また、service.beta.kubernetes.io/aws-load-balancer-subnets
アノテーションをサービスに追加することで、アノテーションを使用してロードバランサのサブネットを指定することもできます。このアノテーションの値は、subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef
のように、サブネット ID またはサブネット名のカンマ区切りのリストです。
ロードバランサの例を作成する
LoadBalancer タイプの Service を作成するには、Deployment を作成して Service で公開します。次の例では、サンプルのロードバランサを作成します。
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"
kubectl apply
を使用して Deployment を作成します。kubectl apply -f my-deployment-50001.yaml
次のようにして、3 つの Pod が実行中であることを確認します。
kubectl get pods --selector=app=products
Deployment に
LoadBalancer
タイプの Service を作成します。必要なロードバランサの種類を決定します。
- インターネットに接続する 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-type
をnlb
に設定して、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-type
をnlb
次の 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
kubectl apply
を使用して Service を作成します。kubectl apply -f my-lb-service.yaml
kubectl get service
で Service のアドレスを表示します。kubectl get service my-lb-service
出力には、ロードバランサのアドレス(ロードバランサの作成方法に応じて、パブリックまたはプライベートのいずれか)が表示される列
EXTERNAL-IP
が含まれます。インターネット接続ロードバランサを作成した場合は、次のコマンドを使用して
curl
でロードバランサに接続できます。curl http://EXTERNAL_IP:60000
EXTERNAL_IP
は、前の手順の EXTERNAL-IP 列のアドレスに置き換えます。
出力は次のようになります。
```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```
クリーンアップ
サービスとデプロイを削除するには、kubectl delete
コマンドを使用します。
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml
次のステップ
Google Cloudのドキュメントサービスを使ったアプリケーションの公開で GKE を確認する。
サポートされているアノテーションの完全リストを確認する。