NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Kubernetes Engine クラスタに MetalLB をインストールしてみる。

Nutanix Kubernetes Engine(NKE)で作成した Kubernetes クラスタに、MetalLB をインストールして、LoadBalancer Service を作成してみます。

今回の内容です。

MetalLB のインストール

まず準備として、kubectl でクラスタに接続できるようにしておきます。

インストール先の NKE クラスタを確認しておきます。

$ kubectl get nodes
NAME                     STATUS   ROLES                  AGE   VERSION
nke-02-55946c-master-0   Ready    control-plane,master   39d   v1.26.8
nke-02-55946c-worker-0   Ready    node                   39d   v1.26.8

公式サイトで案内されている YAML を適用します。

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml
namespace/metallb-system created
customresourcedefinition.apiextensions.k8s.io/bfdprofiles.metallb.io created
customresourcedefinition.apiextensions.k8s.io/bgpadvertisements.metallb.io created
customresourcedefinition.apiextensions.k8s.io/bgppeers.metallb.io created
customresourcedefinition.apiextensions.k8s.io/communities.metallb.io created
customresourcedefinition.apiextensions.k8s.io/ipaddresspools.metallb.io created
customresourcedefinition.apiextensions.k8s.io/l2advertisements.metallb.io created
serviceaccount/controller created
serviceaccount/speaker created
role.rbac.authorization.k8s.io/controller created
role.rbac.authorization.k8s.io/pod-lister created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
rolebinding.rbac.authorization.k8s.io/controller created
rolebinding.rbac.authorization.k8s.io/pod-lister created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
configmap/metallb-excludel2 created
secret/webhook-server-cert created
service/webhook-service created
deployment.apps/controller created
daemonset.apps/speaker created
validatingwebhookconfiguration.admissionregistration.k8s.io/metallb-webhook-configuration created

Pod が Running になったことを確認しておきます。

$ kubectl get pod -n metallb-system
NAME                         READY   STATUS    RESTARTS   AGE
controller-7d678cf54-hr9pz   1/1     Running   0          5m27s
speaker-l4c6c                1/1     Running   0          5m27s

IP Address Pool リソースを作成します。Bash プロンプトに下記を貼り付けて実行し、ippool.yml という名前で YAML ファイルを作成します。

IP アドレス プールのレンジは、Kubernetes 仮想マシンの IP アドレスと同じネットワークから採番します。

  • addresses: 192.168.12.210-192.168.12.214
cat << EOF > ippool.yml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.12.210-192.168.12.214
EOF

ファイルが作成されたことを確認しておきます。

$ cat ippool.yml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.12.210-192.168.12.214

さらに、L2 Advertisement リソースの YAML ファイル(l2adv.yml)を作成しておきます。

cat << EOF > l2adv.yml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
EOF

YAML ファイルが作成されたことを確認しておきます。

$ cat l2adv.yml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default

2つの YAML ファイルを、kubectl apply で適用します。

$ kubectl apply -f ippool.yml -f l2adv.yml
ipaddresspool.metallb.io/default created
l2advertisement.metallb.io/default created

MetalLB の動作確認

Pod と LoadBalancer Service リソースを作成して、MetalLB が機能するか動作確認してみます。

まず、Pod を起動します。

$ kubectl run web2048 --image=gowatana/docker-2048
pod/web2048 created

Pod が Running になったことを確認します。

$ kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
web2048   1/1     Running   0          86s

LoadBalancer Service リソースを作成します。

$ kubectl expose pod web2048 --port=80 --target-port=80 --type LoadBalancer
service/web2048 exposed

これで、サービスが作成され、IPAddressPool で指定したレンジから EXTERNAL-IP のアドレスが設定されます。

$ kubectl get svc web2048
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
web2048   LoadBalancer   172.19.58.46   192.168.12.210   80:32038/TCP   12s

EXTERNAL-IP のアドレスに Web ブラウザからアクセスすると、2048 ゲームが表示されるはずです。

ちなみに LoadBalancer ではなく NodePort でアクセスする方法は、少し古い投稿ですがこちらをどうぞ。

以上。

 

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。