Ingress는 쿠버네티스 클러스터 외부에서 내부 서비스로 HTTP와 HTTPS 경로를 노출하기 위해 사용합니다.
위 핵심 기능 외에도 Ingress 리소스에 라우팅 규칙을 정의하여 로드밸런서로서의 역할을 할 수도 있습니다.
이번 포스팅에서는 Minikube를 통해 Ingress를 설정하는 방법을 정리합니다.
그 전에 Minikube 및 간단한 Service, Deployment는 구성되어 있다고 가정합니다.
이전 포스팅👉
- Minikube 설치: https://basketdeveloper.tistory.com/104
- Service 구성: https://basketdeveloper.tistory.com/105
1. Ingress 설치
아래처럼 minikube 명령어를 통해 ingress를 클러스터에 설치해줍니다.
~ minikube addons enable ingress
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
💡 After the addon is enabled, please run "minikube tunnel" and your ingress resources would be available at "127.0.0.1"
▪ Using image registry.k8s.io/ingress-nginx/controller:v1.9.4
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
🔎 ingress 애드온을 확인 중입니다 ...
🌟 'ingress' 애드온이 활성화되었습니다
그리고 파드를 조회해보면 아래처럼 추가된 것을 확인 할 수 있습니다.
~ kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-2lvhc 0/1 Completed 0 36m
ingress-nginx-admission-patch-49b89 0/1 Completed 0 36m
ingress-nginx-controller-7c6974c4d8-krb8c 1/1 Running 0 36m
2. 접근 테스트
아래 minikube 명령어로 Ingress-controller를 외부에 노출(NodePort) 시키고
접근 가능한 포트를 확인 할 수 있습니다.
minikube service ingress-nginx-controller -n ingress-nginx --url
http://127.0.0.1:49123
http://127.0.0.1:49124
위처럼 정상 접근 되는 것을 확인 할수 있습니다.
하지만 아무런 라우팅 정의를 하지 않아서
nginx default 404 페이지가 뜹니다.
이제 라우팅을 정의하여 실제 Service 및 파드와 연결해보겠습니다.
3. Ingress.yml 작성
아래와 같이 ingress.yml을 작성해줬습니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
# - host: my.domain.com # if it is not configure, connect with ip address.
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: springboot-app-svc
port:
number: 8080
어노테이션을 봅시다.
- nginx.ingress.kubernetes.io/rewrite-target: /
nginx 서버 라우팅 정의에서 rewrite를 사용하고 있습니다.
이러한 어노테이션은 다양한 종류가 있을 것입니다.
위 캡쳐와 같이 쿠버네티스에서 nginx 관련 설정을
어노테이션을 사용 할 수 있도록 지원하고 있습니다.
그리고 spec.rules 항목에는
실제 라우팅 정의 항목을 기입하고 있습니다.
http://{호스트}/ 에 대한 request를 springboot-app-svc 백엔드 서비스로 프록시 해주고 있습니다.
그리고 pathType을 prefix로 명시해줬기 때문에 /** 패턴의 URL Path 요청을 모두 프록시 할 것입니다.
pathType 또한 여러가지 형태를 지원합니다.
- Prefix
- Exact
- ImplementationSpecific
자세한 내용은 공식문서에서 확인 가능합니다.
4. Ingress 적용
아래와 같이 kubectl 명령어로 Ingress 리소스를 적용해봅시다.
~ kubectl apply -f ingress.yml
ingress.networking.k8s.io/nginx-ingress created
이 후 다시 minikube service ingress-nginx-controller -n ingress-nginx --url 를 통해
포트 확인 합니다.
아래와 같이 접근해보면 정상적으로 클러스터 내 백엔드 서비스로 프록시 되고
정상 응답이 오는 것을 확인 할 수있습니다.
'개발 이야기 > Kubernetes' 카테고리의 다른 글
ArgoCD를 통해서 Application 배포 (0) | 2024.03.24 |
---|---|
Kubernetes, ArgoCD 설치 해보기(with Minikube) (0) | 2024.03.09 |
kubectl 자주 쓰는 명령어 정리 (2) | 2024.03.09 |
Kubernetes, Deployment와 Service 구성 해보기 (0) | 2024.03.02 |
Minikube 설치해보기 (0) | 2024.03.02 |