728x90
Ingress, Ingress Controller
- 인그레스를 사용하면 L7의 웹 요청을 해석해서 단일 IP, 단일 포트로 다수의 도메인과 서비스로 연결할 수 있음
- 쿠버네티스에서 기본적으로 지원하는 인그레스 오브젝트는 클라우드 환경이 아니면 사용할 수 없음
- 클라우드에서 인그레스를 생성하면 외부에 게이트웨이를 생성하고 각 기능에 맞게 서비스에 연결
- 쿠버네티스에서 Ingress를 사용하기 위해서는 두 가지가 필요
- 첫 번째는 YAML 파일에서 kind: Ingress 로 정의되는 Ingress 오브젝트
- 두 번째는 Ingress 규칙이 적용될 Ingress Controller
YAML 파일로부터 Ingress를 생성해도 아무 일도 일어나지 않음
Ingress는 단지 Ingress 규칙을 정의하는 선언적인 오브젝트일 뿐,외부 요청을 받아들이는 실제 서버가 아니기 때문
- Ingress는 Ingress Controller라고 하는 특수한 서버 컨테이너에 적용되어야만 Ingress에 적용된 규칙이 활성화됨
- Ingress Controller가 외부로부터 네트워크 요청을 수신했을 때, Ingress 규칙에 기반해 이 요청을 어떻게 처리할지를 결정
1. 인그레스 생성
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
rules:
- http:
paths:
- path: /auth
pathType: Prefix
backend:
service:
name: auth-service
port:
number: 80
- path: /sending
pathType: Prefix
backend:
service:
name: sendmanager-service
port:
number: 80
https://github.com/Guts-Gun/KITe_ArgoCD/blob/main/service/ingress-setting.yaml
2. 인그레스 컨트롤러 설치: Nginx Ingress Controller 생성
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml
kubectl get pods -n ingress-nginx
controller pod가 실행됨
kubectl get ingress # service-ingress
kubectl get service -n ingress-nginx #ingress-nginx-controller
https://github.com/Guts-Gun/KITe_ArgoCD/blob/main/ingress/ingress-nginx.yaml
3. metalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
https://github.com/Guts-Gun/KITe_ArgoCD/tree/main/metallb
4. External IP Pool을 담을 configmap을 생성
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.95.90.50-10.95.90.70
5. 배포 확인
kubectl get all -n metallb-system
6. nginx-ingress에서 External IP 할당 받기
kubectl edit svc -n ingress-nginx ingress-nginx-controller
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
sessionAffinity: None
type: LoadBalancer
728x90