- Created by Sansae, last modified on Mar 07, 2024
목차
Ingress 개요
https://medium.com/devops-mojo/kubernetes-ingress-overview-what-is-kubernetes-ingress-introduction-to-k8s-ingress-b0f81525ffe2
- 하나의 IP나 도메인으로 다수의 서비스 제공 (단일 Endpoint)
- L7을 기반으로한 부하 분산이므로 많은 기능을 제공
- Domain base Routing
- Uri base Routing
- 부하분산
- SSL 종료
- Ingress Controller필수
- Service의 LoadBalancer Type과 같이 Load Balancer가 요구 됩니다.
- 다양한 Ingress Controller가 있으며, 무료의 경우 기능사용에 제약이 많으므로 유료를 권장합니다.
- Cloud환경에서는 ApiGateway, ApplicationGateway, ApplicationLoadBalancer와 연동해서 사용 가능합니다. (예: AZURE-AGIC, AWS ALB-INGRESS)
Ingress Controller
- AKS 애플리케이션 게이트웨이 인그레스 컨트롤러는 Azure 애플리케이션 게이트웨이를 구성하는 인그레스 컨트롤러다.
- Ambassador API 게이트웨이는 Envoy 기반 인그레스 컨트롤러다.
- Apache APISIX 인그레스 컨트롤러는 Apache APISIX 기반의 인그레스 컨트롤러이다.
- Avi 쿠버네티스 오퍼레이터는 VMware NSX Advanced Load Balancer을 사용하는 L4-L7 로드 밸런싱을 제공한다.
- BFE Ingress Controller는 BFE 기반 인그레스 컨트롤러다.
- Citrix 인그레스 컨트롤러는 Citrix 애플리케이션 딜리버리 컨트롤러에서 작동한다.
- Contour는 Envoy 기반 인그레스 컨트롤러다.
- EnRoute는 인그레스 컨트롤러로 실행할 수 있는 Envoy 기반 API 게이트웨이다.
- Easegress IngressController는 인그레스 컨트롤러로서 실행할 수 있는 Easegress 기반 API 게이트웨이다.
- F5 BIG-IP 쿠버네티스 용 컨테이너 인그레스 서비스를 이용하면 인그레스를 사용하여 F5 BIG-IP 가상 서버를 구성할 수 있다.
- Gloo는 API 게이트웨이 기능을 제공하는 Envoy 기반의 오픈소스 인그레스 컨트롤러다.
- HAProxy 인그레스는 HAProxy의 인그레스 컨트롤러다.
- *쿠버네티스 용 HAProxy 인그레스 컨트롤러는 HAProxy 용 인그레스 컨트롤러이기도 하다.
- *Istio 인그레스는 Istio 기반 인그레스 컨트롤러다.
- 쿠버네티스 용 Kong 인그레스 컨트롤러는 Kong 게이트웨이를 구동하는 인그레스 컨트롤러다.
- Kusk 게이트웨이는 OpenAPI 중심의 Envoy 기반 인그레스 컨트롤러다.
- *쿠버네티스 용 NGINX 인그레스 컨트롤러는 NGINX 웹서버(프록시로 사용)와 함께 작동한다.
- Pomerium 인그레스 컨트롤러는 Pomerium 기반 인그레스 컨트롤러이며, 상황 인지 접근 정책을 제공한다.
- Skipper는 사용자의 커스텀 프록시를 구축하기 위한 라이브러리로 설계된 쿠버네티스 인그레스와 같은 유스케이스를 포함한 서비스 구성을 위한 HTTP 라우터 및 역방향 프록시다.
- Traefik 쿠버네티스 인그레스 제공자는 Traefik 프록시 용 인그레스 컨트롤러다.
- Tyk 오퍼레이터는 사용자 지정 리소스로 인그레스를 확장하여 API 관리 기능을 인그레스로 가져온다. Tyk 오퍼레이터는 오픈 소스 Tyk 게이트웨이 및 Tyk 클라우드 컨트롤 플레인과 함께 작동한다.
- Voyager는 HAProxy의 인그레스 컨트롤러다.
Ingress Manifest
https://dev-k8sref-io.web.app/docs/services/ingress-v1/
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata (ObjectMeta)
spec (IngressSpec)
- ingressClassName
- rules
status (IngressStatus)
ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - http: paths: - path: /testpath pathType: Prefix backend: service: name: nginx-svc port: number: 80
Ingress 실습
Ingress 와 연결할 어플리케이션 배포
nginx-deploy.yaml, nginx-svc.yaml Expand source
sansae@sansaeAir15m2 k8s-lab-workspace % k apply -f nginx-deploy.yaml deployment.apps/nginx-deploy created sansae@sansaeAir15m2 k8s-lab-workspace % k apply -f nginx-svc.yaml service/nginx-svc created sansae@sansaeAir15m2 k8s-lab-workspace % k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2m57s nginx-svc ClusterIP 10.0.245.161 <none> 80/TCP 3s
Ingress Controller 배포
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml
sansae@sansaeAir15m2 k8s-lab-workspace % kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml namespace/ingress-nginx created serviceaccount/ingress-nginx created serviceaccount/ingress-nginx-admission created role.rbac.authorization.k8s.io/ingress-nginx created role.rbac.authorization.k8s.io/ingress-nginx-admission created clusterrole.rbac.authorization.k8s.io/ingress-nginx created clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created rolebinding.rbac.authorization.k8s.io/ingress-nginx created rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created configmap/ingress-nginx-controller created service/ingress-nginx-controller created service/ingress-nginx-controller-admission created deployment.apps/ingress-nginx-controller created job.batch/ingress-nginx-admission-create created job.batch/ingress-nginx-admission-patch created ingressclass.networking.k8s.io/nginx created validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created sansae@sansaeAir15m2 k8s-lab-workspace % k get all -n ingress-nginx NAME READY STATUS RESTARTS AGE pod/ingress-nginx-admission-create-pknd2 0/1 Completed 0 110s pod/ingress-nginx-admission-patch-6x9cm 0/1 Completed 2 110s pod/ingress-nginx-controller-654497b5fc-mmgfl 1/1 Running 0 110s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ingress-nginx-controller LoadBalancer 10.0.40.254 4.230.148.14 80:32251/TCP,443:31606/TCP 111s service/ingress-nginx-controller-admission ClusterIP 10.0.167.0 <none> 443/TCP 111s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ingress-nginx-controller 1/1 1 1 110s NAME DESIRED CURRENT READY AGE replicaset.apps/ingress-nginx-controller-654497b5fc 1 1 1 110s NAME COMPLETIONS DURATION AGE job.batch/ingress-nginx-admission-create 1/1 6s 111s job.batch/ingress-nginx-admission-patch 1/1 19s 111s
sansae@sansaeAir15m2 k8s-lab-workspace % k apply -f ingress.yaml ingress/minimal-ingress created
- No labels
0 Comments