2023년 5월 13일

인그레스(Ingress)는 클러스터 외부에서 내부로 접근하는 요청(HTTP, HTTPS 요청)을 처리하기 위한 규칙들의 집합입니다. 일반적인 로드밸런서와는 달리, 인그레스는 IP 주소 대신 URL 경로를 사용하여 요청을 처리합니다.

인그레스는 Ingress Controller를 통해 실제로 경로를 찾아주는 ‘규칙’ 즉 설정 값이라고 생각하면 편합니다. Ingress Controller는 인그레스 규칙을 기반으로 주소(URL)에 따라 어떤 서비스로 연결해야 하는 지를 작동합니다.

이를 통해 클러스터 외부에서 특정 URL에 접속하면 해당하는 서비스로 연결될 수 있도록 설정할 수 있습니다.

Ingress 테스트

사용되는 도커 이미지는 인프런 교육 때 사용하던 인그레스 테스트용 도커 이미지입니다.


kubectl create deployment http-go --image=gasbugs/http-go:ingress # 인그레스 테스트용 http-go
kubectl expose deployment http-go --port=80 --target-port=8080 --type=ClusterIP
kubectl scale deployment http-go --replicas=3

Untitled

kubectl get deployment,service

Untitled

파드 생성과 서비스 생성을 확인 했으면 이제 Ingress 설정을 해주도록 하겠습니다.

cd ..
mkdir ingress
vi http-go-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-go-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /welcome/test
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - pathType: Exact
            path: /welcome/test
            backend:
              service:
                name: http-go
                port:
                  number: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: boot-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - pathType: Exact
            path: /
            backend:
              service:
                name: deploy-boot
                port:
                  number: 8080

Untitled