ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で入手できます。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
Oracle Cloud Native EnvironmentでのMetalLBの使用
イントロダクション
ネットワーク・ロード・バランサは、Kubernetesアプリケーションを外部に公開する方法を提供します。Kubernetes LoadBalancerサービスを使用して、クラスタの外部からアプリケーションに接続するために使用できる外部IPアドレスを提供および公開するネットワーク・ロード・バランサを作成します。
MetalLBは、ベア・メタル・ホストで実行されているOracle Cloud Native EnvironmentにデプロイされたKubernetesアプリケーション用のネットワーク・ロード・バランサです。MetalLBを使用すると、ベア・メタル環境で従来はクラウド・プロバイダのネットワーク・ロード・バランサを利用していたKubernetes LoadBalancerサービスを使用できます。
目的
このドキュメントでは、Oracle Cloud Native EnvironmentでMetalLBを使用して、Kubernetesアプリケーションに対してMetalLBモジュールを設定および使用する方法について説明します。
前提条件
このチュートリアルの手順を実行するためのホストシステムを、このセクションに示します。成功するには、次のものが必要です。
-
7 Oracle Linuxシステムを次のように使用します。
- オペレータ・ノード(ocne- operator)
- 3つのKubernetesコントロール・プレーン・ノード(ocne-control01、ocne-control02、ocne-control03)
- 3つのKubernetesワーカー・ノード(ocne-worker01、ocne-worker02、ocne-worker03)
-
プライマリ・コントロール・プレーン・ノードの仮想IPアドレス。このIPアドレスは、すべてのノードで使用されている必要はなく、ロード・バランサによってプライマリ・コントローラとして割り当てられたコントロール・プレーン・ノードに動的に割り当てられます。
Oracle Support免責事項: Oracle Cloud Infrastructureにデプロイする場合、テナンシでは、仮想クラウド・ネットワーク(VCN)内のVLAN用のOCI: レイヤー2ネットワーキングで導入された新機能を有効にする必要があります。無料のラボ環境のテナンシではこの機能が有効になっていますが、OCIレイヤー2ネットワーキング機能は一般には使用できません。
ユース・ケースがある場合は、テクニカル・チームと協力して、テナンシがこの機能を使用するようにリストしてください。 -
各システムには、少なくとも次のものがインストールされている必要があります。
- 最新のOracle Linux 8 (x86_64)がインストールされ、Unbreakable Enterprise Kernelリリース6 (UEK R6)が実行されていること
-
これらのシステムで事前構成された設定は、次のとおりです。
sudo
権限を持つoracle
ユーザー・アカウント- 各ノード間のパスワードなしSSH
- Oracle Cloud Native Environmentのインストールおよび構成
演習環境の設定
ノート: 無料のラボ環境を使用する場合、接続およびその他の使用手順については、Oracle Linux Lab Basicsを参照してください。
この演習には複数のシステムがあり、それぞれに異なるステップを実行する必要があります。まず、7つの端末ウィンドウまたはタブを開き、各ノードに接続することをお薦めします。これにより、繰り返しログインおよびログアウトする必要がなくなります。ノードは次のとおりです。
- ocne-control01
- ocne-control02
- ocne-control03
- ocne演算子
- ocne-worker01
- ocne-worker02
- ocne-worker03
重要: 無料のラボ環境では、完全にインストールされたOracle Cloud Native Environmentが提供されたノードにデプロイされます。このデプロイメントは、起動後に終了するまでに約25分から30分かかります。そのため、この実行中はステップを離れてから、演習を完了します。
-
端末を開き、sshを介して各ノードに接続します。
ssh oracle@<ip_address_of_ol_node>
Kubernetes環境の検証
-
(任意のコントロール・プレーン・ノード上)
kubectl
が機能することを確認します。kubectl get nodes
出力例:
[oracle@ocne-control01 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ocne-control01 Ready control-plane,master 22m v1.23.7+1.el8 ocne-control02 Ready control-plane,master 21m v1.23.7+1.el8 ocne-control03 Ready control-plane,master 20m v1.23.7+1.el8 ocne-worker01 Ready <none> 20m v1.23.7+1.el8 ocne-worker02 Ready <none> 19m v1.23.7+1.el8 ocne-worker03 Ready <none> 19m v1.23.7+1.el8 [oracle@ocne-control01 ~]$
ワーカー・ノードの構成
(すべてのコントロール・プレーン・ノードおよびワーカー・ノード上)ネットワーク・ポートを設定します。
sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo firewall-cmd --reload
MetalLBモジュールのインストール
次に、MetalLBモジュールをインストールして検証します。
ocne- operatorノードで:
-
MetalLB構成ファイルを作成します。
cat << 'EOF' | tee metallb-config.yaml address-pools: - name: default protocol: layer2 addresses: - 10.0.12.240-10.0.12.250 EOF
-
構成ファイルのコンテンツを表示します。
cat ~/myenvironment.yaml
-
HelmおよびMetalLBモジュールをOracle Cloud Native Environment構成ファイルに追加します。
cat << 'EOF' | tee -a ~/myenvironment.yaml - module: helm name: myhelm args: helm-kubernetes-module: mycluster - module: metallb name: mymetallb args: metallb-helm-module: myhelm helm-kubernetes-module: mycluster metallb-config: /home/oracle/metallb-config.yaml EOF
-
Helmおよび MetalLBモジュールが myenviroment.yamlファイルに追加されていることを確認します。
cat ~/myenvironment.yaml
-
モジュールを作成します。
olcnectl module create --config-file myenvironment.yaml
出力例:
[oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml Modules created successfully. Modules created successfully. Modules created successfully. [oracle@ocne-operator ~]$
-
モジュールを検証します。
olcnectl module validate --config-file myenvironment.yaml
出力例:
[oracle@ocne-operator ~]$ olcnectl module validate --config-file myenvironment.yaml Validation of module mycluster succeeded. Validation of module myhelm succeeded. Validation of module mymetallb succeeded. [oracle@ocne-operator ~]$
-
モジュールをインストールします。
olcnectl module install --config-file myenvironment.yaml
注意: 完了には数分かかります。
出力例:
[oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml Modules installed successfully. Modules installed successfully. Modules installed successfully. [oracle@ocne-operator ~]$
-
インストールされているモジュールを表示します。
olcnectl module instances --config-file myenvironment.yaml
出力例:
[oracle@ocne-operator ~]$ olcnectl module instances --config-file myenvironment.yaml INSTANCE MODULE STATE 10.0.12.11:8090 node installed 10.0.12.12:8090 node installed 10.0.12.13:8090 node installed 10.0.12.21:8090 node installed 10.0.12.22:8090 node installed 10.0.12.23:8090 node installed mycluster kubernetes installed myhelm helm installed mymetallb metallb installed [oracle@ocne-operator ~]$
Kubernetesアプリケーションの作成
この項では、LoadBalancerサービスを使用するKubernetesアプリケーションを作成します。
任意のコントロール・プレーン・ノード:
-
Kubernetesアプリケーションを作成します。
tee echo-oci-lb.yml > /dev/null << 'EOF' --- apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment labels: app: echo1 spec: replicas: 2 selector: matchLabels: app: echo1 template: metadata: labels: app: echo1 spec: containers: - name: echoserver image: k8s.gcr.io/echoserver:1.4 ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: echo-lb-service spec: selector: app: echo1 type: LoadBalancer ports: - name: http port: 80 targetPort: 8080 EOF
-
サービスを作成します。
kubectl create -f echo-oci-lb.yml
出力例:
[oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml deployment.apps/echo-deployment created service/echo-lb-service created [oracle@ocne-control01 ~]$
-
Kubernetesデプロイメントが実行されていることを確認します。
kubectl get deployments
出力例:
[oracle@ocne-control01 ~]$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 2/2 2 2 3m15s [oracle@ocne-control01~]$
-
Kubernetesサービスが実行中であることを示します。
kubectl get svc
出力例:
[oracle@ocne-control01 ~]$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE echo-lb-service LoadBalancer 10.111.72.49 10.0.12.240 80:31727/TCP 4m47s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m [oracle@ocne-control01 ~]$
echo-lb-service
LoadBalancerのEXTERNAL-IP
のIPアドレスが10.0.12.240であることに注意してください。このIPアドレスは、MetalLBによって提供され、アプリケーションへの接続に使用できる外部IPアドレスです。
デプロイメントのテスト
次のステップでは、新しくデプロイされたアプリケーションをテストします。EXTERNAL-IP
値がMetalLBによって(このシナリオでは10.0.12.240-10.0.12.250
の範囲の間に)動的にプロビジョニングされるため、最初の2つのステップでは、この動的値をオペレーティング・システム変数として格納します。
-
(任意のコントロール・プレーン・ノード上)割り当てられた
EXTERNAL-IP
アドレスを取得します。LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
-
割り当てられたポート番号を取得します。
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
-
これらは環境変数として格納されていることを確認します。
echo $LB echo $LBPORT
出力例:
[oracle@ocne-control01 ~]$ echo $LB 10.0.12.240 [oracle@ocne-control01 ~]$ echo $LBPORT 80 [oracle@ocne-control01 ~]$
-
curl
を使用して、デプロイされたアプリケーションに接続します。curl -i -w "\n" $LB:$LBPORT
出力例:
[oracle@ocne-control01 ~]$ curl -i -w "\n" $LB:$LBPORT HTTP/1.1 200 OK Server: nginx/1.10.0 Date: Wed, 10 Aug 2022 10:52:10 GMT Content-Type: text/plain Transfer-Encoding: chunked Connection: keep-alive CLIENT VALUES: client_address=10.244.2.0 command=GET real path=/ query=nil request_version=1.1 request_uri=http://10.0.12.240:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=10.0.12.240 user-agent=curl/7.61.1 BODY: -no body in request- [oracle@ocne-control01 ~]$
非Kubernetesホストからのテスト
-
(ocne- operator上)この最後のテストは、MetalLBが外部リクエストに応答していることを確認します。
curl -v http://10.0.12.240:80
出力例:
[oracle@ocne-operator ~]$ curl -v http://10.0.12.240:80 * Rebuilt URL to: http://10.0.12.240:80/ * Trying 10.0.12.240... * TCP_NODELAY set * Connected to 10.0.12.240 (10.0.12.240) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.12.240 > User-Agent: curl/7.61.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 < Date: Wed, 10 Aug 2022 11:38:08 GMT < Content-Type: text/plain < Transfer-Encoding: chunked < Connection: keep-alive < CLIENT VALUES: client_address=10.244.0.0 command=GET real path=/ query=nil request_version=1.1 request_uri=http://10.0.12.240:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=10.0.12.240 user-agent=curl/7.61.1 BODY: * Connection #0 to host 10.0.12.240 left intact [oracle@ocne-operator ~]$
これにより、MetalLBが正しく構成され、アプリケーションがデプロイされ、リクエストが正常に受け入れられていることが確認されます。
詳細情報
- Oracle Cloud Native Environmentのドキュメント
- Oracle Cloud Native Environmentトレーニング
- Oracle Linuxラーニング・サブスクリプション
- Oracle Linuxカリキュラム
その他の学習リソース
docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Use MetalLB with Oracle Cloud Native Environment
F61364-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.