-
ALB Ingress 로 subdomain 분기 설정NAVER Cloud 2021. 12. 20. 18:45반응형
ALB를 사용해서 abc.com/path1, /path2 와 같은 분기도 많이 처리하지만, subdomain 분기도 사용할 수 있기에 테스트를 진행해 보았다. 전체적으로 아래와 같은 구성이고, alb annotation을 사용해서 더 다양한 방식으로 분기할 수 있다.
1. alb ingress controller 설치
alb ingress 를 사용하기 위해서는 네이버클라우드의 ALB 를 생성할 수 있는 alb ingress controller 를 설치해야 한다.
네이버클라우드 가이드 문서에 나와있는대로 설치한다. (https://guide.ncloud-docs.com/docs/k8s-k8suse-albingress)
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml
2. Pod, Service 배포
각 subdomain 별로 다른 서비스를 연결할 예정이므로 deployment, service manifest 를 배포한다.
서비스 구성 예제 역시 네이버클라우드 ALB 가이드에 나와있는 manifest 를 참고한다.
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://gist.githubusercontent.com/NaverCloudPlatformDeveloper/0e6262b996f74229719807cb5ae007fc/raw/3ce72e7961bc2407bfb87e153c94672e6ee6a1cf/nks-alb-ingress-sample-services.yaml
나는 다른 서비스들과 구분하기 위해 alb 라는 namespace 를 만들어서 배포했다.
아래와 같이 pod, service 들이 생성되어 있는지 확인한다.
# kctl get all -n alb NAME READY STATUS RESTARTS AGE pod/cloud-8569cb49bf-hwg9k 1/1 Running 0 3h22m pod/naver-7d855c949f-lzh6h 1/1 Running 0 3h22m pod/platform-68754dccf9-t27t4 1/1 Running 0 3h22m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/cloud NodePort 198.19.215.85 <none> 80:31115/TCP 3h22m service/naver NodePort 198.19.133.166 <none> 80:30781/TCP 3h22m service/platform NodePort 198.19.240.183 <none> 80:31307/TCP 3h22m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cloud 1/1 1 1 3h22m deployment.apps/naver 1/1 1 1 3h22m deployment.apps/platform 1/1 1 1 3h22m NAME DESIRED CURRENT READY AGE replicaset.apps/cloud-8569cb49bf 1 1 1 3h22m replicaset.apps/naver-7d855c949f 1 1 1 3h22m replicaset.apps/platform-68754dccf9 1 1 1 3h22m
3. ingress 배포
lblb.ga 라는 도메인을 구입했고, 각 서비스 별로 platform.lblb.ga , naver.lblb.ga, cloud.lblb.ga 로 설정하도록 구성했다.
ingress를 생성해서 ALB 가 생성되면 해당 ALB 의 도메인을 각 서브도메인별로 cname 처리한다.
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sample-alb-ingress annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]' alb.ingress.kubernetes.io/description: 'alb ingress controller' labels: app: sample-alb-ingress spec: backend: serviceName: naver servicePort: 80 rules: - host: platform.lblb.ga http: paths: - backend: serviceName: platform servicePort: 80 - host: naver.lblb.ga http: paths: - backend: serviceName: naver servicePort: 80 - host: cloud.lblb.ga http: paths: - backend: serviceName: cloud servicePort: 80
ingress 역시 서비스와 동일한 alb namespace 에 생성했다.
kubectl create -f ingress.yaml -n alb # ingress & ALB 생성 확인 kctl get ingress -n alb NAME CLASS HOSTS ADDRESS PORTS AGE sample-alb-ingress <none> platform.lblb.ga,naver.lblb.ga,cloud.lblb.ga ing-alb-samplealbingress-xxxxx-xxxxxxx-40dd5ce2b433.kr.lb.naverncp.com 80 80m
이때 ALB 의 리스너 규칙 설정에 ingress.yaml 에 설정한 것과 동일하게 규칙이 들어가 있어야 한다.
4. DNS 에서 cname 설정
5. 접속 테스트
ingress.yaml 에 기재한대로 subdomain 과 동일한 이름의 서비스로 분기되는 것을 확인할 수 있다.
반응형'NAVER Cloud' 카테고리의 다른 글
ALB 사용 환경에서 특정 IP 만 웹 접근하도록 설정 (0) 2022.01.14 VM 의 NIC 별 통신 트래픽 확인하기 - flow log 설정 (0) 2022.01.10 kubernetes Pod 에서 NAS 공유 볼륨 사용하기 (0) 2021.12.01 jenkins kubernetes plugin 설치하고 빌드 테스트 해보기 (0) 2021.10.22 jenkins를 kubernetes 에 구성하기 (0) 2021.10.22