今回は「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 をダウンロード
-
Controller が master Node に配置されるよう修正
今回は Controller の Deployment に対して nodeAffinity と toleratioins を設定しました。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566… (省略) …
---
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 上に展開
1kubectl apply -f metallb.yaml
設定
-
L2ロードバランサ用の設定を作成
以下のような layer2-config.yaml ファイルを作成します。 IPアドレスのレンジは環境に合わせて修正します。 ここで指定された範囲で Service の EXTERNAL-IP が設定されます。
123456789101112apiVersion: 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 上に適用
1kubectl apply -f layer2-config.yaml
-
Firewallの穴あけ
1234sudo 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 を含むサービスを展開
-
Pod 、 Service が起動していることを確認
1kubectl get pods,services
123456NAME 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 を削除
今回は「MetalLBの導入から動作確認まで」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
参考記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!