쿠버네티스 교육내용 리뷰 - Ingress

shJeong19·2023년 7월 27일

kubernetes

목록 보기
8/10

Ingress

  • 서비스의 로드밸런서는 L4로드밸런싱을 제공하는 리소스였으면 인그레스는 L7로드밸런싱을 제공한다.
    폴더별로 부하분산을 시킬 수 있는것도 L7로드밸런싱을 제공하기 때문에 가능하다.
  • 인그레스를 사용하기 위해서는 인그레스 컨트롤러의 설치가 필요하다.
    Ingress-Nginx설치

1. nginx와 apache 각 pod, service 생성

# nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: webnginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  labels:
    svc: nginx
spec:
  type: ClusterIP
  ports:
    - port: 9001
      targetPort: 80
      protocol: TCP
  selector:
    app: nginx
# apache
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-httpd
spec:
  selector:
    matchLabels:
      app: httpd
  replicas: 3
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: webapache
        image: httpd
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: svc-httpd
spec:
  type: ClusterIP
  ports:
    - port: 9002
      targetPort: 80
      protocol: TCP
  selector:
    app: httpd

2. Ingress 생성

---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: ing-webserver
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /web1
        pathType: Prefix
        backend:
          service:
            name: svc-nginx					# 서비스명 할당
            port:
              number: 80
      - path: /web2							# web2경로로 요청이 오면 
        pathType: Prefix
        backend:
          service:
            name: svc-httpd					# 서비스명 할당
            port:
              number: 80
  • 인그레스 생성확인

3. Ingress를 통한 접속 테스트

# 각 노드 웹루트에 ingress에서 설정한 path 디렉토리 생성.
# 예시에는 하나씩 나와있지만 nginx, apache 각 노드에 모두 생성.
kubectl exec <POD명> -- mkdir /usr/share/nginx/html/web1
kubectl exec <POD명> -- mkdir /usr/local/apache2/htdocs/web2

# 미리 파드를 구분할 수 있게 만들어놓은 index.html 파일 각 파드에 복사
kubectl cp index.html <POD명>:/usr/share/nginx/html/web1/index.html
kubectl cp index.html <POD명>:/usr/local/apache2/htdocs/web2/index.html

인그레스를 통한 접속 확인

# ingress-nginx네임스페이스의 정보를 확인한다.
kubectl get all -n ingress-nginx
  • ingress-nginx-controller의 포트를 확인할 수 있다. (31370)

# 접속 테스트
curl <마스터IP>:<ingress-nginx-controller의 포트>/<PATH>

# web1 접속
curl 192.168.70.141:31370/web1/index.html

# web2 접속
curl 192.168.70.141:31370/web2/index.html

부하분산 테스트

# web1 테스트
for i in {1..100}; do curl -s 192.168.70.141:31370/web1/index.html; done | sort | uniq -c | sort -nr
  • 100회 접속 테스트 시 각 파드마다 50% 확률로 분산되고 있다.
#web2 테스트
for i in {1..100}; do curl -s 192.168.70.141:31370/web2/index.html; done | sort | uniq -c | sort -nr
  • 3파드에 대략 33% 확률로 분산되는걸 확인.
profile
Im steady Jeong

0개의 댓글