4 Oracle Cloud Infrastructureロード・バランサの使用
この章では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを使用して、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションのロード・バランサを設定する方法について説明します。
Oracle Cloud Infrastructureロード・バランサの概要
Oracle Cloud Infrastructureフレキシブル・ネットワーク・ロード・バランシング・サービス(「Oracle Cloud Infrastructureロード・バランサ」)は、1つのエントリ・ポイントからVirtual Cloud Network (VCN)内の多数のバックエンド・サーバーへの自動トラフィック分散を提供します。 接続レベルで動作し、レイヤー3/レイヤー4 (IPプロトコル)データに基づいて受信クライアント接続を正常なバックエンド・サーバーにロード・バランシングします。
「Oracle Cloud Infrastructureロード・バランサ」の詳細については、「Oracle Cloud Infrastructureのドキュメント」を参照してください。
Kubernetes Cloud Controller Manager ServiceControllerは、Kubernetes LoadBalancerサービスの作成時にロード・バランサの作成を行います。 Platform API Serverは、Oracle Cloud Infrastructure APIと通信して、「Oracle Cloud Infrastructureロード・バランサ」をプロビジョニングおよび管理します。
Oracle Cloud Infrastructure Load Balancerを使用したアプリケーションの作成
この項では、「Oracle Cloud Infrastructureロード・バランサ」を使用して外部IPアドレスを提供するKubernetesアプリケーションを作成できることを確認するための基本的なテストについて説明します。
Oracle Cloud Infrastructureロード・バランサを使用するテスト・アプリケーションを作成するには:
-
LoadBalancerサービスを使用するKubernetesアプリケーションを作成します。 この例のデプロイメントでは、レプリカ数2および関連するLoadBalancerサービスを含むNGINXアプリケーションを作成します。
コントロール・プレーン・ノードで、
nginx-oci-lb.yaml
という名前のファイルを作成し、次のファイルをファイルにコピーします。--- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: container-registry.oracle.com/olcne/nginx:1.17.7 ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: nginx-service annotations: service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "10" spec: selector: app: nginx type: LoadBalancer ports: - name: http port: 80 targetPort: 80
annotations
セクションには、「Oracle Cloud Infrastructureロード・バランサ」のプロビジョニングに必要な情報が含まれています。 ここからロード・バランサ・シェイプを設定します。 たとえば、フレキシブル・シェイプのかわりに10Mbpsシェイプを使用するには、次を使用します:annotations: service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-shape: "10Mbps"
一部のOracle Cloud Infrastructureテナンシでは、ネットワーク・サブネットを識別するために
oci-load-balancer-subnet1
注釈を含める必要もあります。たとえば:service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..unique_ID"
含めることができる注釈の完全なリストは、次のアップストリーム・ドキュメントを参照してください:
https://github.com/oracle/oci-cloud-controller-manager/blob/master/docs/load-balancer-annotations.md
-
NGINXデプロイメントおよびLoadBalancerサービスを起動します:
kubectl apply -f nginx-oci-lb.yaml
-
kubectl get deployment
コマンドを使用して、nginx-deployment
アプリケーションが実行されていることを確認できます:kubectl get deployments.apps
出力は次のようになります:
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 2/2 2 2 31s
-
kubectl get svc
コマンドを使用して、nginx-deployment
サービスが実行されていることを確認できます:kubectl get svc nginx-service
出力は次のようになります:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service LoadBalancer 10.99.107.243 203.0.113.10 80:31288/TCP 10m
Oracle Cloud Infrastructureは、IPアドレスの割当てに数分かかる場合があります。 これが完了するまで、EXTERNAL-IP列には
nginx-service
のpending
状態が表示されます。 IPアドレスが割り当てられると、このフィールドはIPアドレスを表示するように変更されます。ヒント:
ロード・バランサは、Oracle Cloud Infrastructureの「ネットワーク」 > 「ロード・バランサ」の下に作成されます。
nginx-service
LoadBalancerのEXTERNAL-IPには203.0.113.10
というIPアドレスがあります。 このIPアドレスは、Oracle Cloud Infrastructureによって提供され、アプリケーションへの接続に使用できる外部IPアドレスです。 -
curl
を使用してNGINXアプリケーションのIPアドレスに接続し、アプリケーションのポート(この例では203.0.113.10:80
)を追加して、NGINXのデフォルト・ページを表示します。curl 203.0.113.10:80
出力は次のようになります:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
-
nginx-service
LoadBalancerサービスは、次を使用して削除できます:kubectl delete svc nginx-service
ヒント:
ロード・バランサがOracle Cloud Infrastructureの「ネットワーク」 > 「ロード・バランサ」で削除されていることがわかります。
-
nginx-deployment
アプリケーションは、次のものを使用して削除できます:kubectl delete deployments.apps nginx-deployment