https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
ingress
인그레스 는 클러스터 외부에서 클러스터 내부 서비스 로 HTTP와 HTTPS 경로를 노출한다.
트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다.
web 서비스 안에 아래의 페이지로 구성되어 있다면
회원가입 pod - ip
상품목록 pod - ip
결제 pod - ip
장바구니 pod - ip
클라이언트가 http://www.lab.local 을 입력하면 LB(로드밸런서)를 거쳐
main page(/index.html)가 출력 된다.
클라이언트가 회원가입 페이지를 보고싶다면, 회원가입의 pod가 연결되도록 해주는 것이 ingress다.
ingress resource
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
인그레스 컨트롤러
인그레스 리소스가 작동하려면, 클러스터는 실행 중인 인그레스 컨트롤러가 반드시 필요하다.
사용자가 인그레스 컨트롤러를 거쳐 로그인, 라이브러리, 대쉬 등 여러 서비스에 접근하는 식이다.
https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/
ingress-nginx controller 세팅
deployment.yaml 다운로드
아래 30010, 30020 포트로 변경
k create -f deploy.yaml
일단 이렇게 두면 controller 세팅은 완료되었다.
네임스페이스를 세팅하기위해 기본 config 설정을 변경한다
kubectl config set-context ingress-admin@kubernetes \
--cluster=kubernetes \
--user=kubernetes-admin \
--namespace=ingress-nginx
유저 변경 후 확인
kubectl config use-context ingress-admin@kubernetes
kubectl config current-context
서비스용 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
실행하면 아래와 같은 서비스가 실행된다.
k create -f ingress-pod-service.yaml
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: /
pathType: Prefix
backend:
service:
name: svc-shopping
port:
number: 8080
- path: /customer # url : /customer로 들어오면
pathType: Prefix
backend:
service:
name: svc-customer # svc-customer로 연결
port:
number: 8080
- path: /order
pathType: Prefix
backend:
service:
name: svc-order
port:
number: 8080
EOF
실행하고 아래처럼 접속해보면 잘뜬다
k create -f ingress-ingress.yaml
인그레스 확인
k get ingress
인그레스 컨트롤러 확인
k get service ingress-nginx-controller
아래와 같이 각 서비스 항목마다 노드포트가 열려있다.
이런식으로 홈페이지를 만들어 각 서비스로 연결시킬 수 있다.
'Kubernetes' 카테고리의 다른 글
프로젝트 구상도 (0) | 2023.01.19 |
---|---|
[미니프로젝트] - metal LB 사용하여 WordPress와 MySQL을 퍼시스턴트 볼륨에 배포 (with 시크릿) (1) | 2023.01.04 |
secret (0) | 2023.01.04 |
ConfigMap (환경변수) (0) | 2023.01.04 |
워크로드 (0) | 2023.01.03 |