클라우드 엔지니어 꿈나무
Kubernetes(K8S) Ingress - Centos7 본문
Ingress
Cluster 외부에서 내부 서비스로 접근하는 HTTP, HTTPS 를 관리하는 API 오브젝트
LoadBalancer, SSL 인증, 도메인(Named) 기반의 가상 호스팅 제공
기존에는 하나의 웹서버에서 처리하지만 ingress를 통해서 분리하여 성능을 향상시킴
단일 Pod 노출의 경우에는 kubectl expose와 유사한 효과를 내지만 복잡한 경우에는 더 많은 기능 제공
Ingress controller 종류
GCE용(Google Container Engine) = ingress-gce
NGINX용 : ingress-nginx
master
vi ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: svc1
port:
number: 80
- path: /bar
pathType: Prefix
backend:
service:
name: svc2
port:
number: 80
kubectl apply -f ingress.yml -n ingress-nginx : ingress-nginx 네임스페이스로 적용
kubectl create deployment nginx1 --namespace ingress-nginx --replicas 1 --image nginx : deployment 생성
kubectl create deployment nginx2 --namespace ingress-nginx --replicas 1 --image nginx
kubectl expose deployment nginx1 --name svc1 --namespace ingress-nginx --port 80 : 클러스터IP로 서비스 실행
kubectl expose deployment nginx2 --name svc2 --namespace ingress-nginx --port 80
인터넷창
deploy 및 service 까지 yml로 돌릴 시
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: svc1
port:
number: 80
- path: /babo
pathType: Prefix
backend:
service:
name: svc2
port:
number: 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
namespace: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: n1
image: nginx
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx2
namespace: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx2
template:
metadata:
labels:
app: nginx2
spec:
containers:
- name: n2
image: nginx
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: svc1
namespace: ingress-nginx
spec:
selector:
app: nginx1
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: svc2
namespace: ingress-nginx
spec:
selector:
app: nginx2
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
<참고>
kubectl get deploy -n ingress-nginx - namespace로 확인
kubectl get all -n ingress-nginx : delpy, pods 등 한 번에 확인 가능
kubectl describe pod ingress-nginx-admission-create-ddbfn -n ingress-nginx 자세히 보기
'kubernetes' 카테고리의 다른 글
Kubernetes Pod Networking - Centos7 (0) | 2023.09.22 |
---|---|
Kubernetes AutoScaling - Centos7 (0) | 2023.09.22 |
Kubernetes Storage : Persistent Volume & Claim - Centos7 (0) | 2023.09.17 |
Kubernetes(K8S) LoadBalance (metallb) - Centos7 (0) | 2023.09.17 |
Kubernetes(K8S) Volume - Centos7 (0) | 2023.09.17 |