3 MetalLB Load Balancerの使用
この章では、ベア・メタル・ホスト上のOracle Cloud Native EnvironmentのMetalLBを使用して、MetalLBモジュールをインストールして使用し、Kubernetesアプリケーションのネットワーク・ロード・バランサを設定する方法について説明します。
前提条件
この項では、MetalLBモジュールを設定するために必要な前提条件について説明します。
ヘルス・チェック・エンドポイント・ネットワーク・ポートの設定
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でトラフィックが許可されていることを確認します。
ネットワーク・ポートの設定
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モジュールをデプロイするには:
-
環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、
myenvironment
です。 -
Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。 環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、
mycluster
です。 -
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構成ファイルの作成」を参照してください。モジュールの追加時に必要なすべてのオプションを含めない場合は、指定するよう求められます。
-
olcnectl module validate
コマンドを使用して、MetalLBモジュールをノードにデプロイできることを確認します。 たとえば:olcnectl module validate \ --environment-name myenvironment \ --name mymetallb
-
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
コマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironment
のmymetallb
という名前のMetalLBモジュールを確認します:
olcnectl module report \ --environment-name myenvironment \ --name mymetallb \ --children
olcnectl module report
コマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
MetalLBを使用したアプリケーションの作成
この項では、MetalLBを使用して外部IPアドレスを提供するKubernetesアプリケーションを作成できることを確認するための基本的なテストについて説明します。
MetalLBを使用するテスト・アプリケーションを作成するには:
-
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
-
NGINXデプロイメントおよびLoadBalancerサービスを起動します:
kubectl apply -f nginx-metallb.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 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アドレスです。 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>
-
nginx-service
LoadBalancerサービスは、次を使用して削除できます:kubectl delete svc nginx-service service "nginx-service" deleted
-
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モジュールは環境から削除されます。