ネットワーク ロード バランシング
このトピックでは、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 はロードバランサを配置するサブネットを選択する必要があります。このデフォルトのサービス ロードバランサのサブネットは、クラスタの作成パラメータから次のように選択されます。
- 指定され、空でない場合は
cluster.networking.serviceLoadBalancerSubnetId
- それ以外の場合は
cluster.controlPlane.subnetId
または、service.beta.kubernetes.io/azure-load-balancer-internal-subnet
アノテーションを Service に追加して、特定のロードバランサに使用するサブネットを指定することもできます。このアノテーションの値はサブネットの名前です。
サンプルの LoadBalancer の作成する
ロードバランサを作成するには、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 を作成します。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
kubectl apply
を使用して Service を作成します。kubectl apply -f my-lb-service.yaml
kubectl get service
で Service のアドレスを表示します。kubectl get service my-lb-service
出力には、ロードバランサのアドレス(ロードバランサの作成方法に応じて、パブリックまたはプライベートのいずれか)が表示される列
EXTERNAL-IP
が含まれます。パブリック ロードバランサを作成した場合は、
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