今回は「kubeadm を利用して構築した Kubernetes 環境に MetalLB (L4 ロードバランサー)の インストール方法」についてまとめます。
概要
L4ロードバランサーの1つである「MetalLB」を ベアメタル Kubernetes クラスタにインストールします。 「MetalLB」を導入することで「Service」の「LoadBalancer」が利用できるようになります。
この記事では「MetalLBの導入から動作確認まで」をまとめます。
前提
ベアメタル Kubernetes クラスタが構築されている前提での作業を想定しています。本記事の内容は以下の環境で動作確認しています。
- Kubernetes v1.14
- MetalLB v0.7.3
インストール
GitHub から metallb.yaml をダウンロードして環境にあわせて修正。 今回は Controller を master Node に配置し、 Speaker を 各 worker Node に配置します。 そのため、 Controller の Deployment だけ修正します。
-
metallb.yaml をダウンロード
curl -O https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml
-
Controller が master Node に配置されるよう修正
今回は Controller の Deployment に対して nodeAffinity と toleratioins を設定しました。
… (省略) … --- apiVersion: apps/v1beta2 kind: Deployment metadata: namespace: metallb-system name: controller labels: app: metallb component: controller spec: revisionHistoryLimit: 3 selector: matchLabels: app: metallb component: controller template: metadata: labels: app: metallb component: controller annotations: prometheus.io/scrape: "true" prometheus.io/port: "7472" spec: serviceAccountName: controller terminationGracePeriodSeconds: 0 securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: controller image: metallb/controller:v0.7.3 imagePullPolicy: IfNotPresent args: - --port=7472 - --config=config ports: - name: monitoring containerPort: 7472 resources: limits: cpu: 100m memory: 100Mi securityContext: allowPrivilegeEscalation: false capabilities: drop: - all readOnlyRootFilesystem: true # Add -START- affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: Exists tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule # Add -END- ---
-
Kubernetes 上に展開
kubectl apply -f metallb.yaml
設定
-
L2ロードバランサ用の設定を作成
以下のような layer2-config.yaml ファイルを作成します。 IPアドレスのレンジは環境に合わせて修正します。 ここで指定された範囲で Service の EXTERNAL-IP が設定されます。
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: my-ip-space protocol: layer2 addresses: - 10.51.2.10-10.51.2.20
-
Kubernetes 上に適用
kubectl apply -f layer2-config.yaml
-
Firewallの穴あけ
sudo firewall-cmd --zone public --add-port 7472/tcp --permanent firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --add-service=https --zone=public --permanent sudo firewall-cmd --reload
Firewallに関してはうまく動かなければ切ってしまったほうが早いかも…
Firewallを停止したい場合は systemctl stop firewalld
で停止させます。
動作確認
-
Load Balancer を含むサービスを展開
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/tutorial-2.yaml
-
Pod 、 Service が起動していることを確認
kubectl get pods,services
NAME READY STATUS RESTARTS AGE pod/nginx-58df4bbfdd-vk6x9 1/1 Running 0 7m42s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service/nginx LoadBalancer 10.104.173.121 10.51.2.10 80:30291/TCP 7m42s
Pod、Service が起動していればOK。起動しているサービスの EXTERNAL-IP でアクセスできる。
-
ブラウザから http://10.51.2.10 (Service の EXTERNAL-IP)へアクセス
-
必要に応じてテストに使った Deployment と Service を削除
kubectl delete -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/tutorial-2.yaml
今回は「MetalLBの導入から動作確認まで」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
参考記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!