( 참고 : [교재] 핵심만 콕! 쿠버네티스 )

Ingress 리소스


1. Ingress란?

Ingress = HTTP,HTTPS 등 네트워크 Layer7에 대한 설정을 담당하는 리소스

  • 외부 HTTP 호출에 대한 트래픽 처리
  • cluster 내부 서비스에, “외부에서 접근 가능한 URL”을 부여
  • Ingress Controller가 존재


1-1. Ingress Controller란?

Ingress 리소스

  • 프로그램,코드라기보다는,
  • “트래픽 처리에 대한 정보를 담는 규칙”


Ingress Controller

  • Ingress의 규칙따라 외부의 트래픽을 service로 전달
  • 따로 설치해줘야!


1-2. NGINX Ingress Controller

대표적인 Ingress Controller 중 하나!


1-3. NGINX Ingress Controller 설치

step 1) Controller 설치를 위한 “네임스페이스” 생성

kubectl create ns ctrl


step 2) Controller 관련된 리소스들 생성 ( pod, service )

helm install nginx-ingress stable/nginx-ingress --version 1.40.3 -n ctrl


step 3) 생성된 것을 확인

kubectl get pod -n ctrl
kubectl get svc -n ctrl


2. Ingress 기본 사용법

2-1. Ingress 생성

step 1) (ingress와 연결할) nginx 서비스 생성 & 확인

kubectl run mynginx --image nginx --expose --port 80

kubectl get pod,svc mynginx


step 2) Ingress 리소스 정의

# mynginx-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: mynginx
spec:
  rules:
  - host: 10.0.1.1.sslip.io
    http:
      paths:
      - path: /
        backend:
          serviceName: mynginx
          servicePort: 80
  • annotations
    • label과 유사하지만, 필터하는데에는 사용 X
    • Ingress Controller에 정보 전달할 용으로
    • ex) kubernetes.io/ingress.class: nginx
      • 해당 Ingress가 NGINX Ingress Controller에 의해 처리될 것을 의미
  • rules : 외부 traffic 처리 규칙


step 3) Ingree 리소스 생성 & 조회

kubectl apply -f mynginx-ingress.yaml

kubectl get ingress
# NAME	CLASS	HOSTS	ADDRESS	PORTS	AGE
# mynginx <none> 10.0.1.1.sslip.io 10.0.1.1 80 10m


step 4) mynginx 서비스 연결

  • mynginx의 80번 포트로 전달될 것
curl 10.0.1.1.sslip.io