상세 컨텐츠

본문 제목

nginx-ingress controller 와 베어메탈ip 로 ingress 생성해 보기

k8s

by drogva 2024. 4. 29. 12:31

본문

구축 된 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 에 연결되게 한다

'k8s' 카테고리의 다른 글

다중 마스터노드 구성 - 로드밸런서를 이용해 구현 하기  (0) 2024.04.29
익스터널 etcd 구성  (0) 2024.04.29
k8s 구축해보기  (0) 2024.04.29

관련글 더보기