2024.10.21 - [Cloud/Kubernetes] - [k8s] kind로 Kubernetes 실습 환경 구성하기
[k8s] kind로 Kubernetes 실습 환경 구성하기
Kind란?Kind는 로컬 컴퓨터 환경에 쿠버네티스 클러스터를 손쉽고 빠르게 설치하기 위해 만들어진 도구입니다.Kind는 Go 언어를 기반으로 만들어졌으며, Docker이미지를 기반으로 kubeadm을 이용하여
lucy-devblog.tistory.com
MetalLB를 설치하기 전에 kind 클러스터 구성을 위해 위 글을 참고하시면 됩니다.
kind는 베어메탈 환경에서 동작합니다. 그러므로 MetalLB를 설치하여 베어메탈 환경에서도 로드 밸런서를 사용할 수 있도록 합니다.
1. MetalLB 설치
https://metallb.io/installation/
Installation :: MetalLB, bare metal load-balancer for Kubernetes
Before starting with installation, make sure you meet all the requirements. In particular, you should pay attention to network addon compatibility. If you’re trying to run MetalLB on a cloud platform, you should also look at the cloud compatibility page
metallb.io
MetalLB를 설치하기 전에 kube-proxy가 ipvs 모드를 사용하고 있는지 확인한다. 사용하고 있다면 다음과 같이 수정한다.
kubectl edit configmap -n kube-system kube-proxy
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
수정했다면 이제 아래 명령어를 사용하여 MetalLB를 설치하면 된다.
# kubectl로 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml
# helm으로 설치
helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb
kubectl과 helm 이외에도 kustomize를 이용하여 설치할 수 있습니다.
# kustomization.yml
namespace: metallb-system
resources:
- github.com/metallb/metallb/config/native?ref=v0.15.2
MetalLB를 설치하면 metallb-system이라는 네임스페이스에 배포되었음을 확인할 수 있습니다.
2. 로드 밸런서에 할당할 IP 주소 정의
https://metallb.io/configuration/
Configuration :: MetalLB, bare metal load-balancer for Kubernetes
MetalLB remains idle until configured. This is accomplished by creating and deploying various resources into the same namespace (metallb-system) MetalLB is deployed into. There are various examples of the configuration CRs in configsamples. Also, the API i
metallb.io
로드밸런서에서 사용하는 주소 풀을 설정하기 위해 docker network inspect로 정보를 받아옵니다.
docker network inspect -f '{{.IPAM.Config}}' kind
위 명령어의 결과를 바탕으로 외부 노출 주소 범위를 설정합니다. 그리고 이를 L2로 광고합니다.
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: local-pool
namespace: metallb-system
spec:
addresses:
- # 생성할 로드밸런서의 IP 범위
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: local-loadbalancer-advertisement
namespace: metallb-system
spec:
ipAddressPools:
- local-pool
Linux에서는 docker network에 접근이 가능하여 위와 같은 설정이 가능하지만 Windows나 MacOS에서는 docker network에 접근할 수 없다고 합니다.
3. 테스트 결과
로드밸런서에 할당된 IP에 curl을 하면 통신이 되는 것을 확인할 수 있습니다.
ubuntu로 vmware를 만들고 그 위에 kind로 클러스터를 설치해서 시도했는데 vmware에서는 curl로 가능하지만 아무래도 kind ip 범위로 설정하여 외부에서는 통신이 되지 않습니다. 이 부분은 추후 수정하겠습니다.
참고
'Cloud > Kubernetes' 카테고리의 다른 글
[k8s] kubeadm으로 클러스터 구성(2) (2) | 2025.07.17 |
---|---|
[k8s] kubeadm으로 클러스터 구성(1) (1) | 2025.07.12 |
[k8s] helm으로 Grafana와 Prometheus 설치하기 (0) | 2025.04.01 |
[k8s] GKE에서 ArgoCD 설치 및 Github Repository 연결 (0) | 2025.02.24 |
[k8s] Kubernetes Scheduling (0) | 2024.12.04 |