본문 바로가기
Kubernetes

ingress

by Nirah 2023. 1. 4.

https://kubernetes.io/ko/docs/concepts/services-networking/ingress/

 

인그레스(Ingress)

기능 상태: Kubernetes v1.19 [stable] 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공

kubernetes.io

 

ingress

인그레스 는 클러스터 외부에서 클러스터 내부 서비스 로 HTTP와 HTTPS 경로를 노출한다.

트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다.

 

web 서비스 안에 아래의 페이지로 구성되어 있다면

회원가입 pod - ip

상품목록 pod - ip

결제 pod - ip

장바구니 pod - ip

 

클라이언트가 http://www.lab.local 을 입력하면 LB(로드밸런서)를 거쳐

main page(/index.html)가 출력 된다.

 

클라이언트가 회원가입 페이지를 보고싶다면, 회원가입의 pod가 연결되도록 해주는 것이 ingress다.

 

ingress resource

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

 

 

인그레스 컨트롤러

인그레스 리소스가 작동하려면, 클러스터는 실행 중인 인그레스 컨트롤러가 반드시 필요하다.

사용자가 인그레스 컨트롤러를 거쳐 로그인, 라이브러리, 대쉬 등 여러 서비스에 접근하는 식이다.

 

 

https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/

 

인그레스 컨트롤러

인그레스 리소스가 작동하려면, 클러스터는 실행 중인 인그레스 컨트롤러가 반드시 필요하다. kube-controller-manager 바이너리의 일부로 실행되는 컨트롤러의 다른 타입과 달리 인그레스 컨트롤러

kubernetes.io

 

 

ingress-nginx controller 세팅

deployment.yaml 다운로드

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/baremetal/deploy.yaml

 

 

아래 30010, 30020 포트로 변경

k create -f deploy.yaml

일단 이렇게 두면 controller 세팅은 완료되었다.

 

 

네임스페이스를 세팅하기위해 기본 config 설정을 변경한다

kubectl config set-context ingress-admin@kubernetes \

--cluster=kubernetes \

--user=kubernetes-admin \

--namespace=ingress-nginx

 

유저 변경 후 확인

kubectl config use-context ingress-admin@kubernetes

kubectl config current-context

 

서비스용 yaml 파일

cat << EOF > ingress-pod-service.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-shopping
  labels:
    category: shopping
spec:
  containers:
  - name: container
    image: kubetm/shopping
---
apiVersion: v1
kind: Service
metadata:
  name: svc-shopping
spec:
  selector:
    category: shopping
  ports:
  - port: 8080
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-customer
  labels:
    category: customer
spec:
  containers:
  - name: container
    image: kubetm/customer
---
apiVersion: v1
kind: Service
metadata:
  name: svc-customer
spec:
  selector:
    category: customer
  ports:
  - port: 8080
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-order
  labels:
    category: order
spec:
  containers:
  - name: container
    image: kubetm/order
---
apiVersion: v1
kind: Service
metadata:
  name: svc-order
spec:
  selector:
    category: order
  ports:
  - port: 8080
EOF

실행하면 아래와 같은 서비스가 실행된다.

k create -f ingress-pod-service.yaml

 

 ingress 설정용 yaml 

cat << EOF > ingress-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-lb
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-shopping
            port:
              number: 8080
      - path: /customer # url : /customer로 들어오면
        pathType: Prefix
        backend:
          service:
            name: svc-customer # svc-customer로 연결
            port:
              number: 8080
      - path: /order
        pathType: Prefix
        backend:
          service:
            name: svc-order
            port:
              number: 8080
EOF

 

실행하고 아래처럼 접속해보면 잘뜬다

k create -f ingress-ingress.yaml

 

인그레스 확인

k get ingress

인그레스 컨트롤러 확인

k get service ingress-nginx-controller

 

아래와 같이 각 서비스 항목마다 노드포트가 열려있다.

이런식으로 홈페이지를 만들어 각 서비스로 연결시킬 수 있다.