https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
ingress : 외부에서 내부로 접근하기 위한 API 오브젝트
클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함.
인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공할 수 있다.
ingress 오브젝트를 사용하기 위해서 반드시 인그레스 컨트롤러가 있어야 한다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
위 yaml코드를 해석하자면 /testpath로 접근하는 http 요청이 들어왔을 때 80번 포트로 서비스하라는 의미다.
https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters
위 사이트에 들어가서 인그레스 컨트롤러 설치과정을 따른다.
kubectl apply -f deploy.yaml로 파일을 적용한 후 아래와 같은 코드를 입력하여 어떤 결과가 나오는지 테스트해본다.
ingress-pod-service.yaml
cat << EOF > ingress-pod-service.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-shopping
labels:
category: shopping
spec:
containers:
- name: container
image: kubetm/shopping
---
apiVersion: v1
kind: Service
metadata:
name: svc-shopping
spec:
selector:
category: shopping
ports:
- port: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: pod-customer
labels:
category: customer
spec:
containers:
- name: container
image: kubetm/customer
---
apiVersion: v1
kind: Service
metadata:
name: svc-customer
spec:
selector:
category: customer
ports:
- port: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: pod-order
labels:
category: order
spec:
containers:
- name: container
image: kubetm/order
---
apiVersion: v1
kind: Service
metadata:
name: svc-order
spec:
selector:
category: order
ports:
- port: 8080
EOF
위 코드로 서비스를 각각 생성하여 서비스의 이름으로 라우팅하도록 구현할 수 있다.
ingress-ingress.yaml
cat << EOF > ingress-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service-lb
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: / #이 경로의 요청을 backend service로 전달
pathType: Prefix
backend:
service:
name: svc-shopping
port:
number: 8080
- path: /customer
pathType: Prefix
backend:
service:
name: svc-customer
port:
number: 8080
- path: /order
pathType: Prefix
backend:
service:
name: svc-order
port:
number: 8080
EOF
svc-shopping, svc-customer, svc-order 서비스로 각각 접근하게 되었을 때 어떤 포트로 연결해줄 것인지 명시한 yaml파일
위 yaml파일을 적용할 때 반드시 어떤 네임스페이스에 적용할 것인지도 명시해줘야 한다.
라우팅을 해놓았기 때문에 어디서 요청을 하든 같은 화면이 표시
스스로 해보기 실습
image: nginx:latest Service port: 80 / 으로 접속 시 Welcome to Main Page 표시 /shopping 으로 접속 시 Welcome to Shopping Center /order 로 접속 시 Welcome to order page /customer 로 접속 시 Welcome to customer page
cat << EOF > ingress-pod-service-lb.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-main
labels:
category: mainurl
spec:
containers:
- name: container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: svc-mainurl
spec:
selector:
category: mainurl
ports:
- port: 80
---
apiVersion: v1
kind: Pod
metadata:
name: pod-shopping
labels:
category: shopping
spec:
containers:
- name: container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: svc-shopping
spec:
selector:
category: shopping
ports:
- port: 80
---
apiVersion: v1
kind: Pod
metadata:
name: pod-customer
labels:
category: customer
spec:
containers:
- name: container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: svc-customer
spec:
selector:
category: customer
ports:
- port: 80
---
apiVersion: v1
kind: Pod
metadata:
name: pod-order
labels:
category: order
spec:
containers:
- name: container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: svc-order
spec:
selector:
category: order
ports:
- port: 80
EOF
#----------------------------------------------------------------
kubectl apply -f ingress-pod-service-lb.yaml -n ingress-nginx
여러 파드와 서비스를 정의
※ '---'는 리소스 구분자로 하나의 yaml 파일에 다양한 오브젝트 리소스를 정의할 수 있게 해준다.
cat << EOF > ingress-ingress-lb.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service-lb
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: svc-mainurl
port:
number: 80
- path: /shopping
pathType: Prefix
backend:
service:
name: svc-shopping
port:
number: 80
- path: /customer
pathType: Prefix
backend:
service:
name: svc-customer
port:
number: 80
- path: /order
pathType: Prefix
backend:
service:
name: svc-order
port:
number: 80
EOF
#----------------------------------------------------------
kubectl apply -f ingress-ingress-lb.yaml -n ingress-nginx
k exec -it pod-main -n ingress-nginx -- /bin/bash
apt update
apt install -y vim
vi /usr/share/nginx/html/index.html
# 원하는대로 수정
k exec -it pod-shopping -n ingress-nginx -- /bin/bash
apt update
apt install -y vim
vi /usr/share/nginx/html/shopping/index.html
# 원하는대로 수정
k exec -it pod-order -n ingress-nginx -- /bin/bash
apt update
apt install -y vim
vi /usr/share/nginx/html/order/index.html
# 원하는대로 수정
k exec -it pod-customer -n ingress-nginx -- /bin/bash
apt update
apt install -y vim
vi /usr/share/nginx/html/customer/index.html
# 원하는대로 수정
'Kubernetes' 카테고리의 다른 글
23.9.7(목) 쿠버네티스 9일차 (0) | 2023.09.07 |
---|---|
23.9.6(수) 쿠버네티스 8일차 (0) | 2023.09.06 |
23.9.1(금) 쿠버네티스 6일차 (0) | 2023.09.01 |
23.8.25(금) 쿠버네티스 1일차 (0) | 2023.09.01 |
23.8.28(월) 쿠버네티스 2일차 (0) | 2023.09.01 |