Kubernetes

[NKS] Ingress 생성

uuuhhh 2022. 11. 13. 02:25

⚠️ NKS(Naver Kubernetes Service) 환경에서 진행하였습니다. ⚠️

 

 

▪︎ Ingress


  • Service vs. Ingress
    • Service는 트래픽을 Pod에 여러 타입으로 전달 (L4)
      • ClusterIP, NodePort, LoadBalancer
    • Ingress는 외부의 HTTP/HTTPS 트래픽 요청을 규칙에 따라 Service에 전달 (L7)
  • Kubernetes에서 Ingress 생성 시 ALB Ingress Controller을 통해 LoadBalancer 인스턴스 생성 후 연동
  • Ingress Rule에서 설정한 Service의 NodePort를 포트 값으로 Target 그룹을 생성하고 LoadBalancer 인스턴스에 등록한다.

 

 

▪︎ ALB Ingress Controller


  • 현재 NCP의 NKS를 사용하고 있는 관계로 NCP ALB Ingress Controller 매니페스트 파일로 설치를 진행한다.
$ k apply -f <https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml>

serviceaccount/alb-ingress-controller created
clusterrole.rbac.authorization.k8s.io/alb-ingress-controller created
clusterrolebinding.rbac.authorization.k8s.io/alb-ingress-controller created
ingressclass.networking.k8s.io/alb created
deployment.apps/alb-ingress-controller created

 

  • ALB Ingress Controller가 생성된 것을 확인 !
    • 위 컨트롤러가 생성되는데 필요한 IngressClass나 ServiceAccount, ClusterRole, ClusterRoleBinding.. 등이 생성된 것도 확인 !

 

  • Ingress Controller의 기본 설정값
    • Service Type
      • NodePort
    • Default Rule
      • 매칭 되는 Rule이 없을 경우
      • spec.defaultBackend에 설정
      • 80 포트로 설정된 기본 Target Group이 생성
    • Rule Priority
      • Ingress에서 정의한 Rule 순서에 따라 우선순위 결정
      • 가장 위부터 Rule 우선 순위 1로 설정

 

 

▪︎ Ingress 생성


  • IngressService어노테이션(Annotation)을 사용하여 ALB Ingress Controller의 설정을 변경할 수 있다.
  • ALB Ingress Controller의 어노테이션은 alb.ingress.kubernetes.io/ 로 시작 !
  • 여러 가지 종류의 어노테이션들이 있으니 관련 공식 문서 참고 !
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cn-ingress
  labels:
    name: cn-ingress
  annotations:
    kubernetes.io/ingres.class: alb
spec:
  rules:
  - host: cc-cnproject.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: cn-app-svc-n
            port: 
              number: 8080

 

  • Host Domain : cc-cnproject.com
  • cn-app-svc-n의 이름의 NodePort Type의 서비스로 트래픽 라우팅

 

  • 위의 매니페스트 파일로 ingress를 생성해보자

 

  • Ingress Class도 alb로 설정된 것을 확인 !
  • Host Domain도 cc-cnproject.com으로 설정 확인 !
  • 로드밸런서의 주소도 할당된 것을 확인 !

 

  • 그럼 이제 남은 건 접속을 해봐야죠 :)
  • 현재 위에서 설정한 호스트 도메인은 실제로 존재하지 않는 도메인이므로 위 도메인을 사용하여 요청을 보내기 위해서는 curl 명령에 
    -H host 옵션과 함께 사용해야 한다.

 

  • 정상적으로 요청에 대한 응답 확인 !

 

▪︎ ⭐️


  • ALB Ingress Controller 외에 Nginx Ingress Controller 등 여러 종류가 존재한다.
  • Ingress는 로드밸런서의 확장된 버전이라고 생각하면 된다.
  • LoadBalancer Service vs. Ingress
    • 로드밸런서 서비스는 해당 서비스의 Public IP 주소를 가진 로드밸런서가 필요하지만
    • 인그레스는 하나의 IP 주소로 여러 개의 서비스를 라우팅하며 접근이 가능하도록 지원해준다 !

 

 

ref.


[AWS/EKS] 콘솔로 생성하는 EKS - ④ ingress로 서비스 외부 노출 시키기 (AWS LoadBalancer Controller 설치)

ALB Ingress Controller 설정

ALB Ingress Controller 활용 예제

Ingress 활용 예제