Cloud & Architecture/Kubernetes

Kubernetes 인그레스(Ingress), 로드밸런서 LoadBalancer, metallb

Karla Ko 2024. 2. 2. 10:12
728x90

 

Ingress, Ingress Controller

    • 인그레스를 사용하면 L7의 웹 요청을 해석해서 단일 IP, 단일 포트로 다수의 도메인과 서비스로 연결할 수 있음
    • 쿠버네티스에서 기본적으로 지원하는 인그레스 오브젝트는 클라우드 환경이 아니면 사용할 수 없음
    • 클라우드에서 인그레스를 생성하면 외부에 게이트웨이를 생성하고 각 기능에 맞게 서비스에 연결
    • 쿠버네티스에서 Ingress를 사용하기 위해서는 두 가지가 필요
      1. 첫 번째는 YAML 파일에서 kind: Ingress 로 정의되는 Ingress 오브젝트
      2. 두 번째는 Ingress 규칙이 적용될 Ingress Controller
YAML 파일로부터 Ingress를 생성해도 아무 일도 일어나지 않음
Ingress는 단지 Ingress 규칙을 정의하는 선언적인 오브젝트일 뿐,외부 요청을 받아들이는 실제 서버가 아니기 때문
  • Ingress는 Ingress Controller라고 하는 특수한 서버 컨테이너에 적용되어야만 Ingress에 적용된 규칙이 활성화됨
  • Ingress Controller가 외부로부터 네트워크 요청을 수신했을 때, Ingress 규칙에 기반해 이 요청을 어떻게 처리할지를 결정

 

1. 인그레스 생성

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
  rules:
    - http:
        paths:

          - path: /auth
            pathType: Prefix
            backend:
              service:
                name: auth-service
                port:
                  number: 80
          - path: /sending
            pathType: Prefix
            backend:
              service:
                name: sendmanager-service
                port:
                  number: 80

https://github.com/Guts-Gun/KITe_ArgoCD/blob/main/service/ingress-setting.yaml

 

2. 인그레스 컨트롤러 설치: Nginx Ingress Controller 생성

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml
kubectl get pods -n ingress-nginx

controller pod가 실행됨

kubectl get ingress # service-ingress
kubectl get service -n ingress-nginx #ingress-nginx-controller

https://github.com/Guts-Gun/KITe_ArgoCD/blob/main/ingress/ingress-nginx.yaml

 

3. metalLB 설치

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml

https://github.com/Guts-Gun/KITe_ArgoCD/tree/main/metallb

 

4. External IP Pool을 담을 configmap을 생성

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.95.90.50-10.95.90.70

 

5. 배포 확인

kubectl get all -n metallb-system

 

6. nginx-ingress에서 External IP 할당 받기

kubectl edit svc -n ingress-nginx ingress-nginx-controller
 selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  sessionAffinity: None
  type: LoadBalancer

 

 

 

728x90