Ingress 란?
- 인그레스는 클러스터 외부에서 클러스터 내부 서비스로 HTTP와 HTTPS 경로를 노출한다. 트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다.
- ingress 관련 내용은 아래 docs 참고
https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
인그레스(Ingress)
기능 상태: Kubernetes v1.19 [stable] 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공
kubernetes.io
[문제]
1. Applicaton Service 운영
- ingress-nginx namespace에 nginx 이미지를 app=nginx 레이블을 가지고 실행하는 nginx pod를 구성하세요
- 앞서 생성한 nginx Pod를 서비스하는 nginx service를 생성하시오
- 현재 appjs Service는 이미 동작중입니다. 별도 구성이 필요 없습니다.
2. Ingress 구성
- app-ingress.yaml 파일을 생성하여 다음 조건의 ingress 서비스를 구성하시오
. ingress name: app-ingress
. NODE_PORT:30080/ 접속했을 때 nginx 서비스로 연결
. NODE_PORT:30080/app 접속했을 때 appjs 서비스로 연결
. Ingress 구성에 다음의 annotations을 포함시키시오.
annotations:
kubernetes.io/ingress.class: nginx
[풀이]
1. Applicaton Service 운영
- appjs 초기 구성
# kubectl run appjs --image=nginx --labels=app=appjs -n ingress-nginx
pod/appjs created
# kubectl expose -n ingress-nginx pod appjs --port=80 --target-port=80
service/appjs exposed
# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
appjs 1/1 Running 0 22s
# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
appjs ClusterIP 10.103.173.148 <none> 80/TCP 21s
- nginx pod 구성
# kubectl run nginx --image=nginx --labels=app=nginx -n ingress-nginx --dry-run -o yaml
# kubectl run nginx --image=nginx --labels=app=nginx -n ingress-nginx
# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
appjs 1/1 Running 0 15m
nginx 1/1 Running 0 10s
# kubectl expose -n ingress-nginx pod nginx --port 80 --target-port=80 --dry-run -o yaml
# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
appjs ClusterIP 10.103.173.148 <none> 80/TCP 16m
nginx ClusterIP 10.100.162.93 <none> 80/TCP 5s
# kubectl describe service -n ingress-nginx nginx
2. Ingress 구성
- 아래 docs 예제 참고
https://kubernetes.io/ko/docs/concepts/services-networking/ingress/

- app-ingress.yaml 파일을 생성 후 ingress 서비스를 구성
# vi app-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: ingress-nginx
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
- path: /app
pathType: Prefix
backend:
service:
name: appjs
port:
number: 80
# kubectl apply -f app-ingress.yaml
ingress.networking.k8s.io/app-ingress created
# kubectl get ingress -n ingress-nginx app-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
app-ingress <none> * 80 13s
# kubectl describe ingress -n ingress-nginx app-ingress
Name: app-ingress
Labels: <none>
Namespace: ingress-nginx
Address:
Ingress Class: <none>
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
*
/ nginx:80 (10.36.0.1:80)
/app appjs:80 (10.44.0.1:80)
Annotations: kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
Events: <none>
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.example.com Ready control-plane 129d v1.25.4
node1.example.com Ready <none> 129d v1.25.4
node2.example.com Ready <none> 129d v1.25.4
# curl node1.example.com:30080/
# curl node1.example.com:30080/app
[참고]
- 유투브 따배씨
'자격증 > CKA' 카테고리의 다른 글
| [CKA] Persistent Volume Claim을 사용하는 Pod 운영 (0) | 2023.04.22 |
|---|---|
| [CKA] Persistent Volume 생성 (0) | 2023.04.19 |
| [CKA] Secret 운영 (0) | 2023.04.01 |
| [CKA] ConfigMap 운영 (0) | 2023.04.01 |
| [CKA] NodePort 서비스 생성 (0) | 2023.03.31 |