-
[udemy] Ingresskubernetes/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 등이 있다.
*참고 문서
쿠버네티스(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