機械翻訳について

2 Oracle Cloud Infrastructure Load Balancerの使用

重要:

このドキュメントで説明されているソフトウェアは、Extended SupportまたはSustaining Supportにあります。 詳細は、「Oracleオープン・ソース・サポート・ポリシー」を参照してください。

このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお勧めします。

この章では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールして使用し、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションのロード・バランサを設定する方法について説明します。

前提条件

この項では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを設定するために必要な前提条件について説明します。

ヘルス・チェック・エンドポイント・ネットワーク・ポートの設定

ServiceInternalTrafficPolicyCluster (デフォルト)に設定して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署名キー・ペアの秘密キー・ファイル。 秘密キーはプライマリ・コントロール・プレーン・ノードにコピーする必要があります。 これは、Kubernetesモジュールの作成時に--master-nodesオプションにリストされた最初のコントロール・プレーン・ノードです。

  • 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モジュールをデプロイするには:

  1. 環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、myenvironmentです。

  2. Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。

    環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、myclusterです。

  3. Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、myhelmという名前で、--helm-kubernetes-moduleオプションを使用してmyclusterという名前のKubernetesモジュールに関連付けられています。

    olcnectl module create \
    --environment-name myenvironment \
    --module helm \
    --name myhelm \
    --helm-kubernetes-module mycluster 
  4. 新しいHelmモジュールをデプロイする場合は、olcnectl module validateコマンドを使用して、Helmモジュールをノードにデプロイできることを確認します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name myhelm
  5. 新しいHelmモジュールをデプロイする場合は、olcnectl module installコマンドを使用してHelmモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name myhelm 

    Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。

  6. Oracle Cloud Infrastructure Cloud Controller Managerモジュールを作成し、--oci-ccm-helm-moduleオプションを使用してmyhelmという名前のHelmモジュールに関連付けます。 この例では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前はmyociです。

    olcnectl module create \
    --environment-name myenvironment \
    --module oci-ccm \
    --name myoci \
    --oci-ccm-helm-module myhelm \
    --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 /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-helm-moduleオプションは、Helmモジュールの名前を設定します。 同じ名前の既存のHelmモジュールがある場合、プラットフォームAPIサーバーはそのHelmインスタンスを使用します。

    --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オプションは、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

    モジュールの追加時に必要なすべてのオプションを含めない場合は、オプションを指定するように求められます。

  7. olcnectl module validateコマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをノードにデプロイできることを確認します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name myoci
  8. 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
myhelm                    helm      	installed
myoci                     oci-ccm   	installed
control1.example.com      node      	installed
...

MODULE列のoci-ccmのエントリは、installed状態であることに注意してください。

また、olcnectl module reportコマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentmyociという名前の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ロード・バランサを使用するテスト・アプリケーションを作成するには:

  1. 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

  2. NGINXデプロイメントおよびLoadBalancerサービスを起動します:

    kubectl apply -f nginx-oci-lb.yaml
    deployment.apps/nginx-deployment created
    service/nginx-service created
  3. kubectl get deploymentコマンドを使用して、nginx-deploymentアプリケーションが実行されていることを確認できます:

    kubectl get deployments.apps
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   2/2     2            2           31s
  4. 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-servicepending状態が表示されます。 IPアドレスが割り当てられると、このフィールドはIPアドレスを表示するように変更されます。

    ヒント:

    ロード・バランサは、「ネットワーク」 > 「ロード・バランサ」の下のOracle Cloud Infrastructure UIで作成されます。

    nginx-service LoadBalancerのEXTERNAL-IPには203.0.113.10というIPアドレスがあります。 このIPアドレスはOracle Cloud Infrastructureによって提供され、アプリケーションへの接続に使用できる外部IPアドレスです。

  5. 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>
  6. nginx-service LoadBalancerサービスは、次を使用して削除できます:

    kubectl delete svc nginx-service
    service "nginx-service" deleted

    ヒント:

    ロード・バランサが「ネットワーク」 > 「ロード・バランサ」の下のOracle Cloud Infrastructure UIで削除されていることがわかります。

  7. 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モジュールは環境から削除されます。