ネットワーク ロード バランシング
このトピックでは、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=productsDeployment に
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: 50001kubectl applyを使用して Service を作成します。kubectl apply -f my-lb-service.yamlkubectl 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