10.Azure / 30.IngressController
프로젝트: astro-test1
원본 경로: installguide-이름바꾸기테스트/10.Azure/30.IngressController.md
Ingress Controller(설정전)
[[TOC]]
1. 개요
AKS 에 Nginx Ingress Controller 를 생성한다.
2. Ingress Controller
[참고] 아래 azure 가이드 참고
https://learn.microsoft.com/ko-kr/azure/aks/ingress-basic?tabs=azure-cli
1) Ingress Controller 설치(with helm)
$ kubectl create ns ingress-nginx
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# [참고] default values 확인
#$ mkdir ~/temp/ingress-nginx
# cd ~/temp/ingress-nginx
#$ helm show values ingress-nginx/ingress-nginx > values.yaml
# DEV
$ helm -n ingress-nginx install ingress-nginx ingress-nginx/ingress-nginx \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
# PRD
$ helm -n ingress-nginx install ingress-nginx ingress-nginx/ingress-nginx \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.replicaCount=2 \
--set controller.nodeSelector.nodepool=infra
#[참고] 아래는 참고항목이다.
--set controller.replicaCount=2 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.nodeSelector.nodepool=infra \
--set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
--set controller.service.externalTrafficPolicy=Local
# ingress pod 확인
$ kubectl -n ingress-nginx get services -o wide -w ingress-nginx-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
ingress-nginx-controller LoadBalancer 192.168.126.123 4.230.150.113 80:30192/TCP,443:30125/TCP 38s app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
# Check Installed chart (release)
$ helm -n ingress-nginx ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2025-04-24 22:53:49.72246 +0900 KST deployed ingress-nginx-4.12.1 1.12.1
# 사용자가 정의한 values 확인
$ helm -n ingress-nginx get values ingress-nginx
USER-SUPPLIED VALUES:
controller:
service:
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: /healthz
- ingress svc 가 loadbalancer type 으로 생성되므로 부하분산장치와 공인IP node port 가 모두 생성된다.
Helm upgrade 시
# Upgrade 전
$ helm -n ingress-nginx ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2025-04-24 22:53:49.72246 +0900 KST deployed ingress-nginx-4.12.1 1.12.1
# PRD
helm -n ingress-nginx upgrade ingress-nginx ingress-nginx/ingress-nginx \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.replicaCount=2 \
--set controller.nodeSelector.nodepool=infra
# Upgrade 후
$ helm -n ingress-nginx ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
...
2) 정보확인
Azure Portal에서 생성된 Load Balancer 를 메뉴를 보면 아래와 같은 정보를 확인할 수 있다.
- 메뉴 : Portal > Load Balacner > kubernetes
FrontEnd IP Config
- 외부접근 IP
- PRD : 4.230.150.113
- 외부접근 IP
backend pool
분산규칙 확인
3. kubepia.net 설정
메뉴 : Portal > DNS 영역
- kubepia.net > 레코드집합
- *.cbiz
- 형식 : A
- TTL : 3600
- 값 : 4.230.150.113
테스트
$ ping aaa.cbiz.kubepia.net
PING aaa.cbiz.kubepia.net (4.230.150.113): 56 data bytes
4. Sample App(userlist) 배포
1) Deploy
# 1) ns
$ kubectl create ns temp
# 2) deploy
$ kubectl -n temp create deploy userlist --image=ssongman/userlist:v1
# 삭제시...
$ kubectl -n temp delete deploy userlist
2) Service
# 3) service
$ echo '
apiVersion: v1
kind: Service
metadata:
name: userlist-svc
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8181
selector:
app: userlist
' | kubectl -n temp apply -f -
3) Ingress
# ingress
$ cat <<EOF | kubectl -n temp apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: userlist-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: "userlist.cbiz.kubepia.net"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: userlist-svc
port:
number: 80
EOF
확인
curl http://userlist.4.230.150.113.nip.io
4) Clean Up
$ kubectl delete ns temp