このブログを検索

この記事の内容は、個人の見解、検証の範囲のものであり、誤りがある可能性があります。
個人の責任において情報活用をお願いします。


2021年10月29日金曜日

俺とkubernetesと時々vSphere -ServiceのLoadBalancerタイプ-

このブログは、コンテナのオーケストレーターであるkubernetesについて

自分の知識をまとめることを目的として記事を書いています。

もともとなが~くvSphereのあれやこれやに携わってきたのでvSphereとの類似点や

相違点についてもちょっと混ぜていけたりしたらいいかなぁとかも思っています。


前回までで、Kubernetesの構築、Pod、Service、永続ボリュームの利用を説明しました。

vSphereでいうところの、ESXiをインストールしてVCを構築して統合管理を行い、ストレージ

の設定してデータストアを作成し、仮想マシンを作って起動したというところですね。


基本的なことはできるようになっていますが、自分で作ったkubernetesの場合は便利な機能が

使えない状態になっています。


例えば、ServiceにはLoadBalancerというタイプのものがあります。

これを作成してみましょう。

以下のyamlを用意し、kubectl apply -f を実行します。

---

kind: Service

apiVersion: v1

metadata:

  name: test-svc-1

  labels:

    app: test

    site: test

spec:

  type: LoadBalancer

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

  selector:

    site: test

---


無事作成できたように見えますが、状態を見てみると以下の様にいつまでもEXTERNAL-IPが<pending>のままです。


kubectl get svc

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE

kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        27h

test-svc-1   LoadBalancer   10.107.138.238   <pending>     80:31352/TCP   7s


当然外部からアクセスするIPアドレスがないので通信ができません。

このように、手動作成のKubernetesには一部機能が備わっていなくてそのままだと使えないものがあるという状態です。


今回例として挙げた、ServiceのLoadBalancerタイプですが、以下の様な動作でユーザーからのアクセスをさばいてくれます。

                                    

<ユーザー>

  →<Service:LoadBalancer>

   →<Kubernetesクラスタノードのどれか>

    →<Serviceと紐ついているPodのどれか>


つまり、ユーザーとKubernetesクラスタの間にLoadBalancerが入って、ユーザーからのアクセスをNodePortdで待ち構えるKubernetesクラスタのノードどれかに渡します。

ユーザーはLoadBalancerのIPにアクセスすればいいわけですから、KubernetesクラスタのノードのIPアドレスが変わっても特に意識することがなくなります。


勘のいい方は、えっそれって・・・と思われたかもしれません。

そうです。Kubernetesクラスタの外部にLB立ってます。

なので、手動で構築したままのKubernetesクラスタでServiceのLoadBalancerを作成しても、連携してくれるLoadBalancerがいないので、EXTERNAL-IPが<pending>のままになってしまうのです。

しかし、それをどうにかやってくれるありがたい存在があります。

その名をMetalLB、来月はこのMetalLBをどのように導入してどのように使うのかについて解説したいと思います。


ちなみに、マネージドkubernetes(GCPやAWS等で提供されているKubernetes)は、ServiceのLoadBalancerが作成されると連携してLoadBalancerが展開されます。

この辺の管理も含めて便利になっているのがサービスとして提供されているKuberneteのいいところですね。