구축 된 k8s 에 추가해본다. ingress 를 통해야만 외부 user 가 생성된 웹페이지에 접속 할 수 있다.
온프레미스이면 nginx-ingress controller의 svc 형식이 loadbalancer 라면 vm 의 ip 대역대를 공급해 줘야한다.
nodePort 형식으로 하면 자동으로 ip 가 연결이 되는데 이번 환경은 production 상태라고 감안해 본다. ㅋ
그래서 필요한 것이 베어메탈 ip 이다. 베어메탈의 ip pool 를 설명하면 자동으로 nginx-ingress controller 의 익스터널 ip 가 설정된다.
결국 nginx-ingress 의 svc IP 를 통해 외부에서 접속 ING -> SVC -> POD 로 접속이 가능하다.
-nginx -ingress 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
자동으로 설치가 된다.
-베어메탈 설치
stric ARP MODE 를 TRUE 로 해준다.
가상 IP 주소 (VIP)와 해당 IP 주소에 대한 MAC 주소를 매핑하는 기술입니다.
그러므로 IP ADRRESS POOL 도 지정해준다. VM 의 IP 대역대를 입력하면 됨.
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system
설정을 제대로 했는지 확인 할려면 다음 명령어를 입력해보자.
# 이 명령어를 입력하면 strictARP:True가 나와야 한다.
kubectl get configmap kube-proxy -n kube- system -o yaml | grep strictARP
다음을 입력하여 설치하자.
그럼 default namespace인 metallb-system namespace를 생성하고 해당 네임 스페이스에서 실행될 것이다.
helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb
metallb 설정
# yaml형식의 파일을 생성해 주고 다음과 같이 편집한다.
vim my-config.yaml
---
# 사용 apiversion
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
#해당 IPAddressPool 명과 사용하는 namespace
name: ip-pool
namespace: metallb-system
spec:
addresses:
# 사용할 ip address pool
- 172.31.46.220-172.31.46.230
autoAssign: true
---
apiVersion: metallb.io/v1beta1
# metalib의 l2모드를 사용한다.
kind: L2Advertisement
metadata:
name: l2-network
# L2Advertisement이 사용할 namespace명
namespace: metallb-system
spec:
# 사용할 ipAddressPools을 추가해주는 데 위에 정의한 ipAddressPools을 사용하도록 한다.
ipAddressPools:
- ip-pool
위 의 설정을 적용하기 위해 기존 설정을 지우고 다시 설정해준다.
# 설정 확인
kubectl get validatingwebhookconfigurations
# 지우기
kubectl delete validatingwebhookconfigurations metallb-webhook-configuration
# no resourceㄴ found가 나와야 한다.
kubectl get validatingwebhookconfigurations
# 설정 적용
kubectl apply -f my-config.yaml
# 최종 확인
kubectl describe ipaddresspool.metallb.io --namespace metallb-system
참고한 블러그: [MetalLB]MetalLB 설치 — 나의 개발자 일기 (tistory.com)
[MetalLB]MetalLB 설치
0. 목적 온 프레미스 환경에서 LoadBalancer를 사용을 위해 설치 1. 사전 설치 helm으로 설치할 예정이므로 helm과 쿠버네티스가 설치되어 있어야 한다. 2. 설치 더보기 If you’re using kube-proxy in IPVS mode, s
mydevjourney.tistory.com
확인
ADRRESS POOL 등록됐다.
이젠 INGRESS-NGINX 에 IP가 할당됏는지 확인한다.
주석에 보면 METALLB 의 IP POOL 에 적용되었다. 로드밸런서 인그레스에도 IP 가 부여된 모습이다.
- CERBOT 으로 AWS 에 있는 ACM 의 인증서를 TLS 로 저장한다.
- 대략적으로 YAML 작성해서 배포해 본다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: was-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
rules:
- host: www.seunghobet.click
http:
paths:
- path: / # 요청 경로
pathType: Prefix # 요청 경로 타입 (Prefix, Exact, ImplementationSpecific)
backend:
service:
name: spring-boot-service # 백엔드 서비스 이름
port:
number: 80 # 백엔드 서비스 포트
- 결과
nginx-ingress 의 익스터널의 ip 는 모든 ing 가 공유하나 각 도메인에 따라 pod 에 연결되게 한다
다중 마스터노드 구성 - 로드밸런서를 이용해 구현 하기 (0) | 2024.04.29 |
---|---|
익스터널 etcd 구성 (0) | 2024.04.29 |
k8s 구축해보기 (0) | 2024.04.29 |