Kubernetes - ingress nginx 설치 및 사용법
이번 포스팅에서 다루어볼 내용은 간단하게 쿠버네티스 ingress-nginx를 설치하고, 외부 트래픽을 내부 팟에게 전달해주는 예제이다. 바로 예제로 들어간다.
> git clone https://github.com/kubernetes/ingress-nginx.git
> cd ./ingress-nginx/deploy/static/provider/baremetal
> kubectl apply -f .
> kubectl get deploy -n ingress-nginx
NAME READY UP-TO-DATE AVAILABLE AGE
ingress-nginx-controller 1/1 1 1 60s
여기까지 따라왔다면 설치는 완료되었고, ingress-nginx를 위한 서비스 등이 떴을 것이다.
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.97.27.106 <none> 80:30431/TCP,443:31327/TCP 4m35s
30431로 접속해보자.
> curl levi.local.com:30431
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.19.1</center>
</body>
</html>
호스트 설정을 통해 levi.local.com을 localhost로 포워딩하도록 설정하였다. 실습에 localhost는 사용하기 힘들기 때문에 etc/hosts 설정을 통해 로컬을 특정 도메인처럼 할당해보자.
> sudo vi /etc/hosts
127.0.0.1 levi.local.com
이제 ingress-nginx가 포워딩할 웹어플리케이션 팟을 띄워보자.
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 1
selector:
matchLabels:
app: springboot-web
template:
metadata:
labels:
app: springboot-web
spec:
containers:
- name: springboot-web
image: 1223yys/springboot-web:0.2.5
imagePullPolicy: Always
ports:
- containerPort: 8080
livenessProbe:
httpGet:
port: 8080
path: /api
initialDelaySeconds: 60
readinessProbe:
httpGet:
port: 8080
path: /api
initialDelaySeconds: 60
디플로이먼트 컨트롤러로 springboot-web 애플리케이션 팟을 관리하도록 매니페스트를 작성하였다. 해당 매니패스트를 적용해보자.
> kubectl apply -f deployment.yaml
다음으로는 springboot-web으로 접근할 수 있게 해주는 외부 통로인 서비스를 작성해보자.
apiVersion: v1
kind: Service
metadata:
name: springboot-web-service
spec:
selector:
app: springboot-web
ports:
- name: http
port: 80
targetPort: 8080
해당 서비스도 배포해보자.
> kubectl apply -f service.yaml
마지막으로 ingress nginx 매니페스트 파일을 작성해보자.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress-sample
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: levi.local.com
http:
paths:
- path: /
backend:
serviceName: springboot-web-service
servicePort: 80
위 매니페스트 파일에서 host를 유의하자. 포스팅 초반에 localhost를 로컬 도메인으로 할당해야한다 했는데, 그 이유가 위 host 때문이다. 위에 보이는 host는 실제로 http 요청이 들어올때 요청 헤어의 "Host : levi.local.com" 을 참조하기 때문이다.
이제 요청을 보내보자.
> curl http://levi.local.com:30431/api
new api !
ingress-nginx를 통해 웹앱 팟에 잘 접근되는 것을 확인할 수 있다.
출처: https://coding-start.tistory.com/375?category=761720 [코딩스타트]
'컨테이너 > Kubernetes' 카테고리의 다른 글
쿠버네티스란 무엇인가 (0) | 2023.04.25 |
---|---|
Kubernetes - kustomize를 이용한 쿠버네티스 오브젝트 관리 (0) | 2021.04.26 |
Kubernetes - 쿠버네티스 클러스터 로깅(logging, fluentd + kafka + elk) (0) | 2021.04.26 |
Kubernetes - 볼륨(Volume),퍼시스턴트 볼륨&볼륨 클레임(persistent volume&claim) (0) | 2021.04.26 |
Kubernetes - kubernetes(쿠버네티스) resources(cpu/momory) 할당 및 관리 (0) | 2021.04.26 |
Kubernetes - Kubernetes 로깅 운영(logging), Fluentd (0) | 2021.04.25 |
Kubernetes - Kubernetes 아키텍쳐 (0) | 2021.04.25 |
Kubernetes - Kubernetes 용어설명 (0) | 2021.04.25 |