目的

APU2とAPU1を利用して、合計4台のノードにkubesprayを使って、kubernetesをデプロイしたところから、いろいろと試行錯誤をして勉強してきました。

DockerHubに登録したイメージをある程度動かせるようになってきて、サービスを公開するためには、LoadBalancerが欲しくなってきます。

最初は慣れているkeepalivedをデプロイする方法を見つけてみたものの、そのままだと1.9でSEGVするという情報もあったため、MetalLBをデプロイしてみることにしました。

結論から書くと、type: LoadBalancerを指定したService毎に1つVIPを割り当てる、という作業は非常に簡単に行なえました。
IngressのServiceに割り当てることで、いろいろ便利になりそうです。

Kubespray等でBare-metal上にk8s環境を構築している場合は、MetalLBを導入することで、簡単にサービスを公開することができると思われます。

参考資料

作業の流れ

公式ドキュメントからCopy&Pasteするだけで、ほぼほぼ完了しました。

今回は特定のサブネット(192.168.10.0/24)内部で稼動すれば十分だったため、Layer2での設定方法を利用しています。

2018/05/09時点では、下記のようにv0.6.2を指定した方法が紹介されていたので、そのまま利用しています。

$ kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.6.2/manifests/metallb.yaml

チュートリアルにあるようなYAMLファイルを作成して、最下行のIPレンジだけ自分の環境に合うように変更しています。

apiVersion: v1
 kind: ConfigMap
 metadata:
   namespace: metallb-system
   name: config
 data:
   config: |
     address-pools:
     - name: default
       protocol: layer2
       addresses:
       - 192.168.10.150-192.168.10.199

作成したファイルを指定して、$ kubectl apply -f <filename> で反映させます。

ServiceにIPを割り当てる

最後にサンプルとしてdefaultのnamespaceにデプロイしているnginxの、Service定義を変更して、teyp:に指定されているClusterIPの文字列をLoadBalancerに変更しています。

$ kubectl edit svc/sample-nginx

変更が終ったら、ServiceのStatusを確認します。

$ kubectl get svc

NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
sample-nginx      LoadBalancer   10.233.36.251   192.168.10.150  80:30715/TCP   2h

これで、$ curl 192.168.10.150 を実行して、サンプルのWebページが表示されることが確認できました。

Ingressでの利用

KubesprayでIngressを有効にしているので、このServiceでもLoadBalancerを指定してみます。

$ kubectl -n ingress-nginx edit svc/ingress-nginx-default-backend

具体的な利用はこれからですが、External-IPには無事にMetalLBからIPが割り当てられています。

以上

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.