2023년 5월 13일
인그레스(Ingress)는 클러스터 외부에서 내부로 접근하는 요청(HTTP, HTTPS 요청)을 처리하기 위한 규칙들의 집합입니다. 일반적인 로드밸런서와는 달리, 인그레스는 IP 주소 대신 URL 경로를 사용하여 요청을 처리합니다.
인그레스는 Ingress Controller를 통해 실제로 경로를 찾아주는 ‘규칙’ 즉 설정 값이라고 생각하면 편합니다. Ingress Controller는 인그레스 규칙을 기반으로 주소(URL)에 따라 어떤 서비스로 연결해야 하는 지를 작동합니다.
이를 통해 클러스터 외부에서 특정 URL에 접속하면 해당하는 서비스로 연결될 수 있도록 설정할 수 있습니다.
사용되는 도커 이미지는 인프런 교육 때 사용하던 인그레스 테스트용 도커 이미지입니다.
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
kubectl get deployment,service
파드 생성과 서비스 생성을 확인 했으면 이제 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