kubernets

 

드디어 Ingress 까지 왔다.

 

Udemy 강좌를 보니, 대충 강좌 내용을 보고 이해했을 때에 대한 내용을 설명해보겠다.

 

Ingress

  • 둘 이상의 백엔드 서비스를 사용할 때 쓴다.
  • 외부에서 DNS 처리를 한다.
  • Ingress Controller 와 Ingress Resource 가 있다.
  • Ingress Controller 는 직접 만들어야한다.
    • Deployment : Nginx, Haproxy, Contour, Traefik, Istio 등의 이미지를 사용
    • ConfigMap. Service, ServiceAccount 등을 설정한다.
  • Ingress Resource 는 Ingress 리소스 타입으로 생성한다.
  • End-Point, Host 에 따라 트래픽을 분기할 수 있다.
  • 지정하지 않은 End-Point 는 error 로 처리되도록 설정할 수 있다.

 

Ingress Controller. 지금껏 배워왔던 리소스를 많이 활용한다.

 

Ingress Resouce. end-poin 와 host 로 구분한다.

 

다음은 공식 문서의 내용

 

  • 인그레스(Ingress)는 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트 라고 한다.
  • 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL / TLS 종료, 그리고 이름-기반의 가상 호스팅을 제공하도록 구성할 수 있다.

 

... 막상 매뉴얼 보니 강좌에서 본 내용이 좀 더 이해하기 쉬웠다;

 

인그레스가 사실상 이번 쿠버네티스 강좌에서 제공하는 가장 중요한 기능이라고도 생각이 든다.

End Point 를 나누어 트래픽을 분산 시킨다는 것은, 대용량 트래픽 처리에서도 굉장히 중요한 개념 중 하나이기 때문이다.

 

# 모든 네임스페이스 보기 --all-namespaces
$ k get all --all-namespaces

# 또는 -A
$ k get all -A

 

Ingress Resouce 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  creationTimestamp: "2022-04-30T16:24:24Z"
  generation: 1
  name: ingress-wear-watch
  namespace: app-space
  resourceVersion: "1424"
  uid: a50cb0fe-0c9a-42cc-b40d-d0a9b4adb003
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: wear-service
            port:
              number: 8080
        path: /wear
        pathType: Prefix
      - backend:
          service:
            name: video-service
            port:
              number: 8080
        path: /watch
        pathType: Prefix
      - backend:
          service:
            name: video-service
            port:
              number: 8080
        path: /stream
        pathType: Prefix
status:
  loadBalancer:
    ingress:
    - ip: 10.110.191.189

 

위 metadata 에서 annotation 중에 nginx.ingress.kubernetes.io/rewrite-target 옵션의 경우

 

rewrite-target 옵션 없을 때

  • http://<ingress-service>:<ingress-port>/watch --> http://<watch-service>:<port>/
  • http://<ingress-service>:<ingress-port>/wear --> http://<wear-service>:<port>/

rewrite-target 옵션 적용 시

  • http://<ingress-service>:<ingress-port>/watch --> http://<watch-service>:<port>/watch
  • http://<ingress-service>:<ingress-port>/wear --> http://<wear-service>:<port>/wear

 

이런식으로 리다이렉팅이 된다고 한다.

 

ingress 생성을 위한 매니페스트 템플릿 생성 명령어는 다음과 같다.

 

$ k create ingress test-ingress -n critical-space --rule="/pay*=pay-service:8282" --dry-run=client -o yaml

 

이후 kodekloud 에서 Ingress Controller 까지 생성하는 작업을 해봤는데..

 

위에 Ingress Controller 의 요소 모두를 생성해보았다. Deployment, Service(NodePort), ServiceAccount, ConfigMap, Ingress, ClassName ...

 

해당 소스 파일은 깃헙에 올려놓기로 한다.

매니페스트 템플릿 파일을 생성하는 방법에 대한 내용은 공식 문서를 참고하면 좋다.

 

내용이 충분히 길어졌기에 오늘은 여기서 마무리..

 

다음은 Network Policies 와 State Persistence 에 대해 정리해보도록 한다.