K8s Network
Ingress는 외부(인터넷)에서 K8s 클러스터 안의 서비스로 들어오는 HTTP/HTTPS 요청을 관리하는 입구입니다.
학교 비유를 통한 Ingress 설명
학교 안에 여러 교실(Pod)이 있는데,
학생들이 외부(집)에서 학교로 와서 각 교실로 찾아가려면 정문(Ingress)이 필요합니다.
그리고 그 정문에서 "너는 1반 가, 너는 2반 가" 이렇게 안내해주는 경비 아저씨(Ingress Controller)도 필요합니다.
Ingress는 규칙만 적어놓은 안내표이고, 실제로 이 규칙을 따라 트래픽을 전달하는 역할을 하는 게 바로 Ingress Controller입니다.
트래픽 처리 흐름
Pod가 요청을 처리한 후, 다시 역순으로 응답 전달

ingress routing
ingress는 subpath를 통한 routing도 가능하여, 여러 path를 통해 분기처리가 가능합니다.

외부 접근
ingress controller통한 요청 처리를 위해서는 반드시 ingress controller로 접근이 필요합니다.
그렇기 위해서는 K8s 외부에서는 Loadbalancer 등으로, 내부에서는 Nodeport/LoadBalancer 타입의 Service가 필수입니다.

ingress 실습
NCP에서 VM 3개를 클러스터링하여 K8s 운영 중이니 참고하시기 바랍니다.
Nodeport + ingress
외부 접근을 위해서 흔히 사용하는 조합입니다.
LB를 활용해도 되지만, 간단한 서비스의 경우 Service 타입을 Nodeport로 해도 무방합니다.
nginx-ingress-controller 설치
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--set controller.service.type=NodePort \
--set controller.service.nodePorts.http=32080 \
--set controller.service.nodePorts.https=32443nginx ingress 리소스 구성
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: "*"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80생성된 리소스들

nginx가 생성된 worker node의 <공인IP:nodeport> 로 curl을 하면 nginx가 호출되야 합니다.

ingress 구성 시, 80 포트를 통해 접근하도록 명시했기에, 443포트를 수신하도록 설정하였어도, 400 code를 줄 뿐입니다.

도메인을 통한 접근
서두에 언급했다시피 ingress는 ip 뿐만 아니라, 도메인을 통해서 접근도 가능합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: hello.world.com # ip > domain으로 수정
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80hello.world.com 도메인을 소유하지 않고 있기에, curl을 호출할 서버에 해당 도메인이 어떤 ip로 매칭되는지 설정이 필요합니다.
echo "<worker1 pub ip> hello.world.com" | sudo tee -a /etc/hostscurl -H "Host: hello.world.com" http://101.79.10.90:32080/ #-H 옵션을 통해 도메인 resolve 가능
