Application Gateway를 AKS 인그레스 컨트롤러로 사용하기에 이어지는 내용입니다.
하나의 AGIC에 여러 Ingress 사용이 가능한지 확인 중 다음과 같은 글이 발견되었습니다.
- AGIC를 사용하여 AKS 클러스터에서 여러 네임스페이스 지원 사용 - Azure Docs
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를 사용하여 AKS 클러스터에서 여러 네임스페이스 지원 사용 - Azure Docs 문서보다는
- AGIC - azure.github에서 확인 하시는것을 추천 드립니다.
같은 회사에서 같은 제품에 대한 설명을 하는 문서인데 이해할 수 있는 내용의 퀄리티가 전혀 다릅니다. ㅡㅡㅋ
(뭐... 문서를 제대로 이해하지 못하고 삽질한 제가 문제이긴 하지만 억울합니다.)
결론
- 하나의 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 Get - Halm Docs
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 추가된 파일입니다.
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만 활성화 됩니다.
'IT > Kubernetes' 카테고리의 다른 글
상태 프로브(startup, liveness, readiness)란 무엇인가? (0) | 2023.04.12 |
---|---|
하나의 Application Gateway에 여러 AGIC 사용하기 (0) | 2023.04.11 |
하나의 AGIC에 여러 Ingress 사용이 가능한가? (다른 포트 배포) (0) | 2023.04.11 |
Application Gateway를 AKS 인그레스 컨트롤러로 사용하기 (0) | 2023.04.11 |
K8S 퍼시스턴트볼륨 테스트 - Azure File (0) | 2023.04.11 |