⚠️ NKS(Naver Kubernetes Service) 환경에서 진행하였습니다. ⚠️
▪︎ Ingress
- Service vs. Ingress
- Service는 트래픽을 Pod에 여러 타입으로 전달 (L4)
- ClusterIP, NodePort, LoadBalancer
- Ingress는 외부의 HTTP/HTTPS 트래픽 요청을 규칙에 따라 Service에 전달 (L7)
- Service는 트래픽을 Pod에 여러 타입으로 전달 (L4)
- 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로 설정
- Service Type
▪︎ Ingress 생성
- Ingress와 Service에 어노테이션(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 설치)
'Kubernetes' 카테고리의 다른 글
DB Pod 생성하기 (0) | 2022.12.15 |
---|---|
[NKS] NodePort / LoadBalancer 서비스 생성 (0) | 2022.11.13 |
[NKS] Deployment 생성 (0) | 2022.11.13 |
[Minikube] LoadBalancer Type 서비스 생성 (0) | 2022.11.12 |
[Minikube] NodePort Type 서비스 생성 (0) | 2022.11.12 |