아무리 k8s를 잘 사용해서 pod를 띄우고 서비스를 연결하고, 인증을 시크릿으로 올려 마운트 시키고 등등 하여도 외부에 오픈을 해야 쓸모있는 시스템이 된다. 이렇게 외부에서 접근을 할 수 있도록 관리해주는 오브젝트가 인그레스이다.

 

아래 이미지는 쿠버네티스 공식 도큐먼트에 나와있는 그림이다.

 

인그레스 컨트롤러가 동반이 되어야 실제 rule을 적용시키고 트래픽을 받을 수 있으며, 인그레스 컨트롤러의 종류는 공식 홈페이지에서 찾아볼 수 있다.

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

 

인그레스 컨트롤러

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

kubernetes.io

 

살펴보면 AWS,GCE,nginx를 지원하고, 이 외에도 F5 BIG-IP, Citrix등 굉장히 많은 것들을 지원한다. 

한번 어떤방식으로 작동하는지 살펴보기 위해 nginx를 볼 예정이다. 

아래 사이트를 접속하면 내 k8s 환경에 따라 여러가지 방법들을 제시한다.

https://kubernetes.github.io/ingress-nginx/deploy/

 

Installation Guide - NGINX Ingress Controller

Installation Guide There are multiple ways to install the NGINX ingress controller: with Helm, using the project repository chart; with kubectl apply, using YAML manifests; with specific addons (e.g. for minikube or MicroK8s). On most Kubernetes clusters,

kubernetes.github.io

자신의 상황에 맞는 Contents를 선택하여 시작해보자. 글쓴이는 GCP의 일반 VM을 사용하기에 Bare-metal을 살펴보겠다.

접속한후 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/baremetal/deploy.yaml 부분에서 https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/baremetal/deploy.yaml  를 웹에서 접속해보면 Yaml을 볼 수 있다.

 

살펴보면 Role, ServiceAccount 등 여러가지 오브젝트들을 확인할 수 있고, 중간에 보면 아래와 같이 Service가 있는 것을 볼 수 있다.

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.1
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: NodePort

이것이 이제 컨트롤러 pod이며 노드포트 타입으로 열려있고 80, 443 port로 들어오는 트래픽을 앞단에서 받아주는 것을 볼 수 있다. 이것이 맨위 인그레스 이미지에서 client다음에 있는 부분이라고 볼 수 있다. 이후 backend서버와 연결하는 부분이 필요한데, 이 부분은 아래 따배런 강사님의 유튜브를 보며 해당 백엔트 서버 코드를 참고했다.

 

https://www.youtube.com/watch?v=9TMIetXb6Pw 

 

해당 영상을 보고 marvel과 payment를 배포했다고 가정하고 ingress를 배포해 보자.

아래처럼 path별로 어떤 서비스와 연결할 것인지 명시하는 부분이 있다. 그리고 ingress를 배포한 후 아까 ingress-controller를 배포한 nodeport로 curl을 날려보자

 

curl workerIP:nodePort로 하면 /로 연결이 되기 때문에 marvel-service로 연결이 된다.

아래와 같이 잘 뜨는 것을 볼 수 있다.

curl workerIP:nodePort/pay라고 하면 ingress에 명시되어 있는 pay-service로 연결이 된다.

 

이처럼 ingress에서는 L7로드밸런서와 비슷하게 외부에서 접속을 할 수 있도록 도와준다.

 

AWS를 사용하는 경우는 아래 글을 읽어보면 좋을것 같다.

https://aws.amazon.com/ko/blogs/opensource/kubernetes-ingress-aws-alb-ingress-controller/

 

Kubernetes Ingress with AWS ALB Ingress Controller | Amazon Web Services

Note: This post has been updated in January, 2020, to reflect new best practices in container security since we launched native least-privileges support at the pod level, and the instructions have been updated for the latest controller version. You can als

aws.amazon.com

 

'쿠버네티스' 카테고리의 다른 글

쿠버네티스 네트워크 트러블슈팅 툴  (1) 2025.04.19
HPA  (0) 2022.09.26
스테이트 풀셋  (0) 2022.08.28
스토리지  (0) 2022.08.28
잡, 크론잡  (0) 2022.08.28

+ Recent posts