Astro Hub

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
    • 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

프로젝트 홈으로 돌아가기