ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [udemy] Ingress
    kubernetes/udemy 2025. 2. 18. 17:00

    Ingress

     

    • 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음
    • HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출 (OSI 7계층)
    • 기능
      • 외부 요청 라우팅 :  요청 URL 경로에 따라 트래픽을 적절한 서비스로 라우팅
      • 로드밸런싱 : 여러 서비스에 대한 로드 밸런싱을 지원하여, 트래픽을 균등하게 분산
      • SSL 인증서 처리 : SSL 인증서를 관리하고, 클라이언트와 Ingress 컨트롤러 간의 SSL 연결 종료
    • Ingress는 Rule들을 정의해놓은 리소스이며, 이를 실제 작동시키기 위해 반드시 Ingress Controller가 필요
    • 즉, Ingress Controller은 NodePort(80/443)를 열어서 Client 요청을 받은 뒤 Ingress Rules에 따라 서비스를 제공
    • Ingress Controller는 자동으로 실행되지 않고 상황에 맞게 적합한 컨트롤러를 선택하여 설치해야 한다.
      쿠버네티스에서는 
      GCE NGINX를 오픈소스로 제공하고 있고, 가장 널리 사용된 Ingress Controller는 Nginx, HAProxy, Envoy 등이 있다.

     

    *참고 문서

    1. 쿠버네티스(4) - 인그레스

     

    쿠버네티스(4) - 인그레스

    4-1 ingress, ingress controller란? (Feat. Istio Gateway와 API Gateway)인그레스(ingress)는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음이다.인그레스 컨트롤러(Ingress

    wale.tistory.com

     

     

    1. [Kubernetes] 인바운드 트래픽을 처리하는 방법 : 인그레스 (Ingress)

     

    Ingress와 Service와의 차이?

    • Ingress는 OSI 7계층(Application 계층, HTTP)으로서, IP / PORT / URL PATH 기반으로 작동
    • Service는 OSI 4계층(Transport 계층, TCP/UDP)으로서, IP / PORT 기반으로 작동
    • 중요한 차이점은 Ingress는 URL PATH을 식별하므로 라우팅 규칙까지 정의 가능

     

     

    Ingress Controller  설치

     

    # Helm 설치

    brew install helm

     

    # Ingress Controller이 위치할 namespace 생성 (ingress-basic)

    kubectl create namespace ingress-basic

     

    # Ingress Controller 설치

    helm install ingress-nginx ingress-nginx/ingress-nginx \
        --namespace ingress-basic \
        --set controller.replicaCount=2 \
        --set controller.nodeSelector."kubernetes\.io/os"=linux \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.service.externalTrafficPolicy=Local \

     

    # 설치 확인

    kubectl get pods -n ingress-basic
    ---
    NAME                                            READY   STATUS    RESTARTS   AGE
    pod/ingress-nginx-controller-5486b65c4d-kffbr   1/1     Running   0          75s
    pod/ingress-nginx-controller-5486b65c4d-rjlg8   1/1     Running   0          75s
    
    NAME                                         TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE
    service/ingress-nginx-controller             LoadBalancer   10.0.69.71    20.214.192.69   80:31547/TCP,443:32192/TCP   76s
    service/ingress-nginx-controller-admission   ClusterIP      10.0.99.139   <none>          443/TCP                      76s
    
    NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/ingress-nginx-controller   2/2     2            2           76s
    
    NAME                                                  DESIRED   CURRENT   READY   AGE
    replicaset.apps/ingress-nginx-controller-5486b65c4d   2         2         2       75s

     

    Deployment 파일 작성

     

    # 01-NginxApp1-Deployment.yaml 파일 작성

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app1-nginx-deployment
      labels:
        app: app1-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: app1-nginx
      template:
        metadata:
          labels:
            app: app1-nginx
        spec:
          containers:
            - name: app1-nginx
              image: stacksimplify/kube-nginxapp1:1.0.0
              ports:
                - containerPort: 80

     

    app1-nginx라는 컨테이너를 배포하는 파일 작성

     

    Service 파일 작성

     

    # 02-NginxApp1-ClusterIP-Service.yaml 파일 작성

    apiVersion: v1
    kind: Service
    metadata:
      name: app1-nginx-clusterip-service
      labels:
        app: app1-nginx
    spec:
      type: ClusterIP
      selector:
        app: app1-nginx
      ports:
        - port: 80
          targetPort: 80

     

    app1-nginx라는 컨테이너의 서비스를 만드는 파일 작성

     

    Ingress 파일 작성

     

    # 03-Ingress-Basic.yaml 파일 작성

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginxapp1-ingress-service
      #annotations:
        #kubernetes.io/ingress.class: nginx  
    spec:
      ingressClassName: nginx
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: app1-nginx-clusterip-service
                    port: 
                      number: 80

     

    Ingress Controller가 작동할 Ingress 작성

    즉 Ingress Controller의 External IP로 오는 요청들은, 다 app1-nginx로 보낸다.

     

    생성 및 확인

     

    # 생성

    kubectl apply -f kube-manifests/

     

    # 확인

    kubectl get all

     

    http://<Ingress Controller의 External IP>/index.html로 접속시

    정상적으로 app-nginx 컨테이너로 전달되어, 확인 가능하다.


    [참고 영상]

    Udemy - Azure Kubernetes Service with Azure DevOps and Terraform

    섹션 10 : Ingress-basics

     

    [참고 문서]

    https://github.com/stacksimplify/azure-aks-kubernetes-masterclass/tree/master/09-Ingress-Basic

     

     

    'kubernetes > udemy' 카테고리의 다른 글

    [udemy] Ingress - ExternalDNS (2)  (0) 2025.02.22
    [udemy] Ingress - ExternalDNS  (0) 2025.02.22
    [udemy] Azure Files  (0) 2025.02.18
    [Udemy] Secrets  (0) 2025.02.18
    [Udemy] AKS Storage - Azure Disks (2)  (0) 2025.02.14
Designed by Tistory.