본문 바로가기
IT/Kubernetes

하나의 AGIC에 여러 Ingress 사용이 가능한가? (multi-namespace)

by rapker 2023. 4. 11.
반응형

Application Gateway를 AKS 인그레스 컨트롤러로 사용하기에 이어지는 내용입니다.

하나의 AGIC에 여러 Ingress 사용이 가능한지 확인 중 다음과 같은 글이 발견되었습니다.

Azure Docs의 내용을 보면 문맥도 이해가 잘 안되고,

네임스페이스를 다르게 하면 같은포트를 쓰는 앱 배포가 가능한다? <- 이 말도 이해할 수 없고,

같은 포트를 쓰더라도 app을 서로 다른 namespace에 배포 하는거라서 전혀 다른 두 app이 동일 포트로 실행 되는건데

pod 배포 자체는 가능할 지 몰라도 AppGW의 public가 1개 인데 같은 포트를 쓴다는거지?

 

ㅁㅈ댜러메ㅑㅈ덞'제ㅑ4ㅓ겨2039겸0ㄹㅈ돌[ㅈㄷ0ㅑㄹ먿ㄹㅈ

 

그냥 테스트 해 보기로 했습니다.

 

default 네임스페이스에 80 포트를 사용하는 aks-helloworld 앱이 배포 되어 있는 상태이고

ns-hello 라는 네임스페이스를 만들고 거기에 80 포트를 사용하는 aks-helloworld3 앱을 배포해 보겠습니다.

테스트 내용 확인할 필요도 없습니다. (제가 해봤습니다.)

 

watchNamespace를 사용하면 하나의 AGIC로 여러개의 namespace에서 독립적으로 ingress를 구성할 수 있지만 이렇게 사용(동일 포트)하면 충돌이 발생되어 우선순위가 높은것만 활성화 된다 라는 내용이고

 

자세한 내용 확인하시려면

같은 회사에서 같은 제품에 대한 설명을 하는 문서인데 이해할 수 있는 내용의 퀄리티가 전혀 다릅니다. ㅡㅡㅋ

(뭐... 문서를 제대로 이해하지 못하고 삽질한 제가 문제이긴 하지만 억울합니다.)

 

결론

  • 하나의 AGIC로 여러 네임스페이스에서 다수의 ingress 배포가 가능하지만 포트는 달라야 합니다.

 


현재 상태 확인

먼저 현재의 상태를 파악해 봅니다.

이 전 테스트 에서 진행 되었던 현재 AKS 상태 입니다.

  • AKS Cluster 1개 (Azure CNI)
  • AppGW 1개 (WAF v2)
  • AGIC 1개
  • Ingress 1개 (80 port)

 

namespace 확인

kubectl get ns

 

pod 확인

kubectl get all -o wide

 

ingress 확인

kubectl get ingress -o wide

 

포탈에서 확인

 

Receiver

 

Http

 

Rule

 

BackendPool

 


 

설치된 helm 의 정보 확인하는 방법

 

뭔가 진행하기 전에 현재 설치되어 있는 AGIC에 설정되어 있는 값을 확인하는 방법을 좀 알아보고 갑시다.

 

부록 격 내용이지만 나중에 필요할 것 같아서 정리 한번 해 놓고 가겠습니다.

 

따로 진행해야 하는건 없습니다.

 

참고

helm으로 설치된 release 항목 출력

helm list

 

특정 release의 모든 정보를 출력

#helm get all <release name>
helm get all ingress-azure

 

특징으로 release 설치 할 때 유저가 입력한 값이랑 실제 적용된 모든 값들이 출력됨

특정 release의 요약 정보 출력

#helm get notes <release name>
helm get notes ingress-azure

 

helm으로 설치되었을 때 출력되는 요약정보가 출력됩니다.

 

특정 release의 유저가 입력한 정보만 출력

#helm get values <release name>
helm get values ingress-azure

 

특정 release가 동작에 필요로 하는 모든 정보를 출력

#helm get manifest <release name>
helm get manifest ingress-azure

 


 

AGIC 설정 값 확인 - watchNamespace

AGIC 설치할 때 watchNamespace 부분을 주석 처리하여 모든 네임스페이스에서 ingress 생성을 감시 하도록 옵션을 주었구요

 

이 내용이 제대로 반영되어 있는지 확인해 보겠습니다.

helm으로 설치된 ingrss controller의 release 이름 확인

helm list

 

해당 release의 요약정보 출력

helm get notes ingress-azure

 

귿~~~~

Watching All Namespaces

 


 

새로운 namespace에 ingress 생성

 

새로운 namespace 생성

kubectl create ns ns-hello
kubectl get ns

yaml 준비

Application Gateway를 AKS 인그레스 컨트롤러로 사용하기에서 사용 했던

agic_sample_pod.yaml에서

app 이름 규칙에 숫자 3을 포함 시키고, title 이름도 3 포함 시키고, namespace: ns-hello 추가된 파일입니다.

agic_sample_pod3.yaml
0.00MB

yaml 배포

kubectl apply -f agic_sample_pod3.yaml

 

배포 확인

kubectl get all -o wide -n ns-hello

 

default, ns-hello 네임스페이스의 ingress를 확인해 봅니다.

kubectl get ingress
kubectl get ingress -n ns-hello

 

각 네임스페이스에 80포트를 사용하는 ingress가 배포 되어 있구요

 

자 이제 드디어 포탈에서 AppGW를 확인 해보겠습니다.

(도대체 어떤 방식으로 사용이 가능하다고 문서를 만들어 놓은건지)

 

포탈에서 AppGW 설정 값 확인해 봅니다.

 

Receiver : 응? 수신기 추가 안되었네?

 

Http : 응? http설정은 추가 되었는데 왜 기본 프로브가 지정되어 있지?

 

Rule : 얼씨구 규칙도 안만들어 졌고

 

BackendPool : 이것도 안만들어졌네

 

멀쩡한게 없습니다.

 

그래도 브라우저에서 접속해 봅니다.

 

AppGW 의 public ip 확인

 

역시나 브라우저에서는 처음 배포 되었던 default 네임스페이스의 80 포트로만 트래픽이 전달 됩니다.

 

혹시 캐시를 날리기, 다른 브라우저로 접속 등을 반복적으로 하면

새로 배포한 ns-hello 쪽으로 트래픽이 갈 수 있을까? 싶어서 수차례 해봤지만 될리가 없죠.

 

해당 내용으로 검색을 좀 더 하다가 AGIC - azure.github 의 내용을 보고 이해가 되었습니다.

 

watchNamespace를 사용하면 하나의 AGIC로 여러개의 namespace에서 독립적으로 ingress를 구성할 수 있다.

namespace가 달라도 포트가 동일하면 충돌이 발생하여 우선순위에 의해 트래픽이 전달된다.

  • 우선순위
    • 두 개의 ingress가 동시에 생성되면 알파벳의 앞부분이 우선합니다.
    • 아래 예시에서는 namespace가 production인 ingress만 활성화 됩니다.

반응형
LIST