### 참조 링크
- [# Ingress Controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)
- [# Managing Workloads](https://kubernetes.io/docs/concepts/workloads/management/)
## 쿠버네티스 설치
- 작년에 구매한 sq-nano 가 놀고 있다.
- https://voramall.com/product/v-raptor-sq-nano/12/
- 구매하면 제공되는 자습서를 보고 [[sq-nano에 Kubernetes 설치하기]]
- 이럴 필요가 없었다. 나는 k8s에 배포하는 법을 알고 싶었을 뿐
- 도커 데스크탑에서 k8s 활성화. 로컬 설치 끝
## 쿠버네티스의 리소스?
- 파드 : 컨테이너의 실행 방법을 정의
- 레플리카셋 : 동일 스펙의 파드를 여러 개 생성하고 관리
- 디플로이먼트 : 레플리카세트의 리비전을 관리
- 서비스 : 파드 집합에 접근하기 위한 경로 정의
- 인그레스 : 서비스를 클러스터 외부로 노출
## 매니페스트 파일 작성하기
- 파일 형식은 yaml 을 사용한다.
- 앞서 리소스가 매니페스트의 kind 속성의 값이 된다.
- Deployment, Service, Ingress 만 기억하면 된다.
### 매니페스트 파일의 실행
```
$ kubectl apply -f [파일명].yaml
```
### Deployment
- 디플로이먼트, 레플라카셋, 파드의 관계를 이해하면 파일 작성은 그리 어렵지 않다.
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: greeting:1.1
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
```
### Service
- service 의 주 기능은 라우팅 이라고 생각하면 된다. 아래 설정에서 port to targetPort
- port는 ingress 에서 넘어오는 포트, targetPort는 pod의 containerPort를 적어주면 된다.
```
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
```
### Ingress
- Ingress는 외부에서 쿠버네티스 안쪽에 접근하기 위한 입구(진입점)이라고 생각하면 된다.
- Service에서 유형을 바꿔주면 외부 노출을 시켜줄 수 있지만 ingress라는 것을 사용하면 관리가 더 편리하다.
- Ingress를 사용하려면 쿠버네티스에 Ingress controller를 먼저 설정해야한다. 클라우드 서비스마다 적절한 ingress controller를 제공해주고 있으니 클라우드 서비스를 사용하는 경우 해당 클라우드의 가이드를 따르자.
- 여기서는 ingress-nginx 로 세팅한다.
```
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml
$ kubectl get all -n ingress-nginx
```
- 다음으로 Ingress 매니페스트
```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
ingressClassName: nginx
rules:
- host: local.ohhoonim.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: webapp-service
port:
number: 80
```
댓글
댓글 쓰기