[Ingress]
- 정의 및 역할
기존의 서비스 거치지 않고
API 확인 후 POD 에 직접 접근 가능
클러스터 밖에서 내부로 접근하는 요청 시 처리 방식
1. HTTP/HTTPS 통해 외부에서 내부 접근 가능 유도
2. 클러스터 외부에서 접근 가능한 URL 제공
3. 트래픽 로드밸런싱
4. SSL/TLS 인증서 처리
5. 도메인 기반 가상 호스팅 제공
여러 서비스를 동일한 IP 주소 아래에서 운영 가능
접근 관리가 효율적인 API 객체
2. 필요성
서비스의 한계 극복( 하나의 서비스에 하나의 포트 )
서비스 포트가 아닌 경로 기반 라우팅으로 컨테이너 접근 방식
3. 접근 방식
<http://www.test.com/> -> svc1-webserver POD
<http://www.test.com/guest> -> svc2-webserver POD
<http://www.test.com/admin> -> svc3-webserver POD
4. 구성요소
Ingress Controller
|
Ingress resource
/ | \
svc1 svc2 svc3
클러스터 외부에서 내부 서비스(Pod)에 접근하게 해주는 HTTP(S) 라우터 역할
호스트 10.6.1.4 -> 마스터 192.168.10.50 -> 서비스 10.233.10.100:30080 -> INGRESS CONTROLLER 80:80 -> ENDPOINT ->
5 . Ingress controller 설치 및 확인
cd /root/kubespray/inventory/mycluster/group_vars/k8s_cluster
vi addons.yml
100 ingress_nginx_enabled: true // TRUE 변경
-------------------------------------------------------------------------------------------------------------------------------------
wget <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.0/deploy/static/provider/baremetal/deploy.***yaml>
vi deploy.yaml
345 spec:
346 ports:
347 - appProtocol: http
348 name: http
349 port: 80
350 protocol: TCP
351 targetPort: http
352 nodePort: 30080*** 추가 입력
***353 - appProtocol: https
354 name: https
355 port: 443
356 protocol: TCP
357 targetPort: https
358 nodePort: 30443*** 추가 입력
***364 clusterIP: 10.233.10.100*** 추가 입력
******
6. Deploy.yaml 적용
7. Ingress 서비스 구성
Deployment / Service 생성
vi svc1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy1-webserver
**labels:
app: websrv**
spec:
replicas: 1
selector:
matchLabels:
app: websrv
template:
metadata:
labels:
app: websrv
spec:
containers:
- name: pod-web
image: nginx:1.14
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: svc1-web
spec:
type: ClusterIP
clusterIP: 10.233.10.11
selector:
app: websrv
ports:
- name: web-port
port: 9001
targetPort: 80
vi svc2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy2-guest
spec:
replicas: 2
selector:
matchLabels:
app: guestsrv
template:
metadata:
labels:
app: guestsrv
spec:
containers:
- name: pod-guest
**image: gcr.io/google-samples/kubernetes-bootcamp:v1**
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: svc2-web
spec:
type: ClusterIP
clusterIP: 10.233.10.12
selector:
app: guestsrv
ports:
- name: guest-port
port: 9002
targetPort: 8080
vi svc3.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy3-admin
spec:
replicas: 3
selector:
matchLabels:
app: adminsrv
template:
metadata:
labels:
app: adminsrv
spec:
containers:
- name: pod-admin
image: k8s.gcr.io/echoserver:1.5
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: svc3-admin
spec:
type: ClusterIP
clusterIP: 10.233.10.13
selector:
app: adminsrv
ports:
- name: admin-port
port: 9003
targetPort: 8080
8. Ingress 생성 (룰 생성)
kubectl describe ingressclasses
vi ingress,yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
nginx.ingress.kunernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: svc1-web
port:
number: 80
- path: /guest
pathType: Prefix
backend:
service:
name: svc2-guest
port:
number: 8080
- path: /admin
pathType: Prefix
backend:
service:
name: svc3-admin
port:
number: 8080
kubectl get ing
kubectl describe ing name
address 확인 후
해당 주소로 접근 가능
curl 192.168.10.200:30080/
curl <http://192.168.10.150:30080>
curl <http://192.168.10.150:30080/guest>
curl <http://192.168.10.150:30080/admin>
for i in {1..300}; do curl 192.168.10.100:30080/guest; done | sort | uniq -c | sort -nr
for i in {1..300}; do curl 10.233.10.12:9002; done | sort | uniq -c | sort -nr
부하 분산 확인 가능
webhook
webhook 에러 발생 시 해결책
kubectl delete validatingwebhookconfiguration ingress-nginx-admission
클러스터 네트워크 문제인 경우 시 해결
'IT 엔지니어 > CLOUD' 카테고리의 다른 글
K8S - ConfigMap -1 (0) | 2025.06.02 |
---|---|
Labels/ Annotations (1) | 2025.06.01 |
K8S - Service (0) | 2025.05.30 |
K8S - STATEFULSET (0) | 2025.05.29 |
k8S - REPLICASET (0) | 2025.05.28 |