このページでは、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 ドキュメントのロードバランサの種類をご覧ください。
インターネット接続ロードバランサまたは内部ロードバランサを選択する
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 とともに公開します。次の例では、サンプルのロードバランサを作成します。
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
```
クリーンアップ
Service と Deploymen を削除するには、kubectl delete
コマンドを使用します。
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml
次のステップ
Google Cloud のドキュメントサービスを使ったアプリケーションの公開で GKE について確認する。
サポートされているアノテーションの全リストを確認する。