2 Oracle Cloud Infrastructure Load Balancerの使用
この章では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールして使用し、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションのロード・バランサを設定する方法について説明します。
前提条件
この項では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを設定するために必要な前提条件について説明します。
ヘルス・チェック・エンドポイント・ネットワーク・ポートの設定
ServiceInternalTrafficPolicy
をCluster
(デフォルト)に設定してKubernetes LoadBalancerサービスを使用する場合、ヘルス・チェック・エンドポイントはTCPポート10256で使用可能であることが予想されます。kube-proxy
は、このポートにリスナーを作成し、LoadBalancerサービスへのアクセスを有効にして、ノード上でkube-proxy
が健全であることを検証します。 LoadBalancerサービスは、このポリシーを使用してトラフィックをルーティングできるノードを決定します。 このポートでトラフィックを許可するには、すべてのKubernetesノードでTCPポート10256をオープンする必要があります。 各Kubernetesノードで、次を実行します:
sudo firewall-cmd --zone=public --add-port=10256/tcp
sudo firewall-cmd --zone=public --add-port=10256/tcp --permanent
sudo systemctl restart firewalld.service
ServiceInternalTrafficPolicy
の詳細については、次のアップストリームのドキュメントを参照してください:
https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/
ネットワーク・セキュリティ・リストのTCPポート10256でトラフィックが許可されていることを確認します。
Oracle Cloud Infrastructure識別子の収集
Oracle Cloud Infrastructure環境に関する情報を収集します。 必要な最も一般的な情報は、次のとおりです:
-
リージョンの識別子。
-
テナンシのOCID。
-
コンパートメントのOCID。
-
ユーザーのOCID。
-
API署名キー・ペアの公開キーのフィンガープリント。
-
API署名キー・ペアの秘密キー・ファイル。
- Virtual Cloud Network (VCN)のOCID。
- 必要に応じて高可用性のためのVCN内の2つのサブネットのOCIDs。
- ロード・バランサに使用する割当て。
- ロード・バランサに使用するシェイプ。
これらの各識別子またはコンポーネントの検索の詳細は、「Oracle Cloud Infrastructureドキュメント」を参照してください。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイ
Oracle Cloud Infrastructureストレージを使用するようにOracle Cloud Infrastructure Cloud Controller Managerモジュールをすでにインストールしている場合は、アプリケーション・ロード・バランサをプロビジョニングするために別のモジュールを作成する必要はありません。 Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、Oracle Cloud Infrastructureストレージ・バランサとロード・バランサの両方をプロビジョニングするために使用されます。
単一のolcnectl module create
コマンドを使用して、Kubernetesクラスタの「Oracle Cloud Infrastructureロード・バランサ」の設定に必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にOracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイする場合に便利です。
Kubernetesモジュールの既存のデプロイメントがある場合は、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイするときにそのインスタンスを指定できます。
この項では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。
モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストについては、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module create
コマンドを参照してください。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイするには:
-
環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、
myenvironment
です。 -
Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。
環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、
mycluster
です。 -
Oracle Cloud Infrastructure Cloud Controller Managerモジュールを作成し、
--oci-ccm-kubernetes-module
オプションを使用して、mycluster
という名前のKubernetesモジュールに関連付けます。 この例では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前はmyoci
です。重要:
次の例では、リリース1.6.1以降で使用される
--oci-private-key-file
オプションを使用します。 リリース1.6.0の場合は、代わりに--oci-private-key
オプションを使用します。olcnectl module create \ --environment-name myenvironment \ --module oci-ccm \ --name myoci \ --oci-ccm-kubernetes-module mycluster \ --oci-region us-ashburn-1 \ --oci-tenancy ocid1.tenancy.oc1..unique_ID \ --oci-compartment ocid1.compartment.oc1..unique_ID \ --oci-user ocid1.user.oc1..unique_ID \ --oci-fingerprint b5:52:... \ --oci-private-key-file /home/opc/.oci/oci_api_key.pem \ --oci-vcn ocid1.vcn.oc1..unique_ID \ --oci-lb-subnet1 ocid1.subnet.oc1..unique_ID
--module
オプションは、モジュール・タイプを作成(oci-ccm
)に設定します。 Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前は、--name
オプションを使用して定義します(この場合はmyoci
です)。--oci-ccm-kubernetes-module
オプションは、Kubernetesモジュールの名前を設定します。--oci-region
オプションは、使用するOracle Cloud Infrastructureリージョンを設定します。 この例のリージョンは、us-ashburn-1
です。--oci-tenancy
オプションは、テナンシのOCIDを設定します。--oci-compartment
オプションは、コンパートメントのOCIDを設定します。--oci-user
オプションは、ユーザーのOCIDを設定します。--oci-fingerprint
オプションは、Oracle Cloud Infrastructure API署名キーの公開キーのフィンガープリントを設定します。--oci-private-key-file
パス・オプションは、Oracle Cloud Infrastructure API署名キーの秘密キーのロケーションを設定します。 これは、オペレータ・ノード上にある必要があります。--oci-vcn
オプションは、ロード・バランサを作成するVCNのOCIDを設定します。--oci-lb-subnet1
オプションは、ロード・バランサを作成するVCNサブネットのOCIDを設定します。ロード・バランサの高可用性を設定する場合は、--oci-lb-subnet2
オプションを使用して、別の可用性ドメインに2番目のサブネットを指定する必要があります。 たとえば:--oci-lb-subnet2 ocid1.subnet.oc1..unique_ID \
ヒント:
Oracle Cloud Infrastructureストレージに使用される既存のOracle Cloud Infrastructure Cloud Controller Managerモジュールがある場合、
olcnectl module update
コマンドを使用して、このネットワーキング情報を含めるように更新できます。 これにより、ロード・バランサをプロビジョニングするようにモジュールが構成されます。 たとえば:olcnectl module update \ --environment-name myenvironment \ --name myoci \ --oci-vcn ocid1.vcn.oc1..unique_ID \ --oci-lb-subnet1 ocid1.subnet.oc1..unique_ID \ --oci-lb-subnet2 ocid1.subnet.oc1..unique_ID
モジュールの追加時に必要なすべてのオプションを含めない場合は、指定するよう求められます。
-
olcnectl module validate
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをノードにデプロイできることを確認します。 たとえば:olcnectl module validate \ --environment-name myenvironment \ --name myoci
-
olcnectl module install
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、Kubernetesクラスタにデプロイされます。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイメントの確認
オペレータ・ノード上でolcnectl module instances
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールがデプロイされていることを確認できます。 たとえば:
olcnectl module instances \ --environment-name myenvironment INSTANCE MODULE STATE mycluster kubernetes installed myoci oci-ccm installed control1.example.com node installed ...
MODULE
列のoci-ccm
のエントリは、installed
状態であることに注意してください。
また、olcnectl module report
コマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironment
のmyoci
という名前のOracle Cloud Infrastructure Cloud Controller Managerモジュールを確認します:
olcnectl module report \ --environment-name myenvironment \ --name myoci \ --children
olcnectl module report
コマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
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 deployment.apps/nginx-deployment created service/nginx-service created
-
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 UIで作成されます。
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 service "nginx-service" deleted
ヒント:
ロード・バランサが「ネットワーク」 > 「ロード・バランサ」の下のOracle Cloud Infrastructure UIで削除されていることがわかります。
-
nginx-deployment
アプリケーションは、次のものを使用して削除できます:kubectl delete deployments.apps nginx-deployment deployment.apps "nginx-deployment" deleted
Oracle Cloud Infrastructure Cloud Controller Managerモジュールの削除
Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにできます。 これを行うには、環境からOracle Cloud Infrastructure Cloud Controller Managerモジュールを削除します。
olcnectl module uninstall
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを削除します。 たとえば、myenvironment
という名前の環境でmyoci
という名前のOracle Cloud Infrastructure Cloud Controller Managerモジュールをアンインストールするには:
olcnectl module uninstall \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructure Cloud Controller Managerモジュールは環境から削除されます。