機械翻訳について

3 MetalLB Load Balancerの使用

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

前提条件

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

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

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でトラフィックが許可されていることを確認します。

ネットワーク・ポートの設定

Kubernetesワーカー・ノードで次のポートを開く必要があります。 各ワーカー・ノードで次を実行します:

sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo systemctl restart firewalld.service

MetalLB構成ファイルの作成

operatorノードにMetalLB構成ファイルを指定する必要があります。 構成ファイルには、MetalLBを構成するために必要な情報が含まれています。 このファイルは、ロード・バランサIPをKubernetesアプリケーションにプロビジョニングするときに使用するIPアドレス範囲、使用するプロトコルなどの構成情報をリストする場所です。

構成ファイルは、アップストリームMetalLB ConfigMapファイルのスニペットまたはカット・ダウン・バージョンです。 スニペット・ファイルには、アップストリームConfigMapファイルに表示されるconfigセクション(address-pools, peers, bgp-communities, bfd-profilesの任意の組合せなど)で構成できるオプションのみを含める必要があります。 たとえば:

peers:
- peer-address: 10.0.0.1
  peer-asn: 64501
  my-asn: 64500
address-pools:
- name: default
  protocol: bgp
  addresses:
  - 192.168.10.0/24

Platform APIサーバーは、MetalLBモジュールの作成時に構成ファイルに含まれている情報を使用します。

重要:

Oracle Cloud Native Environmentは、MetalLBリリース0.12.1をインストールします。 このリリースでは、ConfigMapを使用してMetalLBクラスタを構成します。 MetalLBリリース0.13以降では、CustomResourceを使用してこの構成を実行します。 MetalLBリリース0.12.1の上流の例を使用して、ConfigMapのスニペットを作成し、Oracle Cloud Native EnvironmentとともにインストールされるMetalLBのバージョンを構成する必要があります。

構成ファイルで使用できるオプションについては、次の場所にあるMetalLB ConfigMapファイルのアップストリームのドキュメントを参照してください:

https://github.com/metallb/metallb/blob/v0.12.1/website/content/configuration/_index.md

重要:

構成ファイルに完全なConfigMapファイルを含めないでください。configセクションで使用可能なオプションのみが含まれます。

次の例では、MetalLBレイヤー2構成を使用し、192.168.1.240から192.168.1.250のIPアドレス範囲を指定して、Kubernetesアプリケーションのロード・バランサIPを作成します。 このサンプル・ファイルはmetallb-config.yamlという名前で、次のものが含まれます:

address-pools:
- name: default
  protocol: layer2
  addresses:
  - 192.168.1.240-192.168.1.250 

MetalLBモジュールのデプロイ

単一のolcnectl module createコマンドを使用して、KubernetesクラスタにMetalLBを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にMetalLBモジュールをデプロイする場合に便利です。

Kubernetesモジュールの既存のデプロイメントがある場合は、MetalLBモジュールをデプロイするときにそのインスタンスを指定できます。

この項では、MetalLBモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。

モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストについては、「プラットフォーム・コマンドライン・インタフェース」olcnectl module createコマンドを参照してください。

MetalLBモジュールをデプロイするには:

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

  2. Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。 環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、myclusterです。

  3. MetalLBモジュールを作成し、--metallb-kubernetes-moduleオプションを使用して、myclusterという名前のKubernetesモジュールに関連付けます。 この例では、MetalLBモジュールの名前はmymetallbです。

    olcnectl module create \
    --environment-name myenvironment \
    --module metallb \
    --name mymetallb \
    --metallb-kubernetes-module mycluster \
    --metallb-config /home/opc/metallb-config.yaml

    --moduleオプションは、モジュール・タイプを作成(metallb)に設定します。 MetalLBモジュールの名前は、--nameオプションを使用して定義します(この場合はmymetallbです)。

    --metallb-kubernetes-moduleオプションは、Kubernetesモジュールの名前を設定します。

    --metallb-configオプションは、MetalLB構成ファイルのロケーションを設定します。 このファイルは、指定されたパスのオペレータ・ノードで使用可能である必要があります。 この構成ファイルの作成については、「MetalLB構成ファイルの作成」を参照してください。

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

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

    olcnectl module validate \
    --environment-name myenvironment \
    --name mymetallb
  5. olcnectl module installコマンドを使用して、MetalLBモジュールをインストールします。 たとえば:

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

    MetalLBモジュールは、Kubernetesクラスタにデプロイされます。

MetalLBモジュールのデプロイメントの確認

オペレータ・ノード上でolcnectl module instancesコマンドを使用して、MetalLBモジュールがデプロイされていることを確認できます。 たとえば:

olcnectl module instances \
--environment-name myenvironment
INSTANCE                  MODULE        STATE  
mymetallb                 metallb       installed 
mycluster                 kubernetes    installed
control1.example.com      node          installed
...

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

また、olcnectl module reportコマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentmymetallbという名前のMetalLBモジュールを確認します:

olcnectl module report \
--environment-name myenvironment \
--name mymetallb \
--children

olcnectl module reportコマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。

MetalLBを使用したアプリケーションの作成

この項では、MetalLBを使用して外部IPアドレスを提供するKubernetesアプリケーションを作成できることを確認するための基本的なテストについて説明します。

MetalLBを使用するテスト・アプリケーションを作成するには:

  1. LoadBalancerサービスを使用するKubernetesアプリケーションを作成します。 この例のデプロイメントでは、レプリカ数2および関連するLoadBalancerサービスを含むNGINXアプリケーションを作成します。

    コントロール・プレーン・ノードで、nginx-metallb.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
    spec:
      selector:
        app: nginx
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        targetPort: 80
  2. NGINXデプロイメントおよびLoadBalancerサービスを起動します:

    kubectl apply -f nginx-metallb.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
    NAME            TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    kubernetes      ClusterIP      10.96.0.1      <none>          443/TCP        25h
    nginx-service   LoadBalancer   10.99.253.99   192.168.1.240   80:31875/TCP   70s

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

  5. curlを使用してNGINXアプリケーションのIPアドレスに接続し、アプリケーションのポート(この例では192.168.1.240:80)を追加して、NGINXのデフォルト・ページを表示します。
    curl 192.168.1.240: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
  7. nginx-deploymentアプリケーションは、次のものを使用して削除できます:

    kubectl delete deployments.apps nginx-deployment
    deployment.apps "nginx-deployment" deleted

MetalLBモジュールの削除

MetalLBモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにできます。 これを行うには、環境からMetalLBモジュールを削除します。

olcnectl module uninstallコマンドを使用して、MetalLBモジュールを削除します。 たとえば、myenvironmentという名前の環境でmymetallbという名前のMetalLBモジュールをアンインストールするには:

olcnectl module uninstall \
--environment-name myenvironment \
--name mymetallb

MetalLBモジュールは環境から削除されます。