Ingress Concept
‘호롤리’가 작성한 Ingress Gateway의 개념 설명과 실습 절차이다.
https://gruuuuu.github.io/cloud/k8s-service/#
위 블로그를 따라 해도 Ingress Gateway가 잘 동작하고, 아래와 같이 내가 만든 Practice YAML을 이용해도 Ingress Gateway가 잘 동작한다.
Practice
일반적인 준비 절차:
K8s cluster에 'ingress controller'가 동작 중인지 확인한다.
(만약 설치된 ingress controller가 없으면, nginx ingress controller를 설치할 것!)
$ kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-2bzz7 1/1 Running 0 6h23m
pod/ingress-nginx-controller-5rnw8 1/1 Running 0 6h23m
pod/ingress-nginx-controller-69jf2 1/1 Running 0 6h23m
pod/ingress-nginx-controller-j9nwr 1/1 Running 0 6h22m
pod/ingress-nginx-controller-xzc79 1/1 Running 0 6h22m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.233.15.71 10.10.9.180 80:31302/TCP,443:31071/TCP 57d
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/ingress-nginx-controller 5 5 5 5 5 kubernetes.io/os=linux 57d
가능하면, 위 예제처럼 service type이 ‘LoadBalancer’가 되도록하고, cluster 외부에서 직접 접속 가능한 주소를 할당한다. (예: 10.10.9.180)
위 예제대로라면, Cluster 밖에 있는 Web Browser는 80, 443 포트로 접속 가능하다.
Ingress Object 설정 및 생성
내 Pod에 접근할 수 있는 Ingress object를 생성한다.
아래와 같이 내 서비스에 접근할 수 있도록 Ingress manifest 파일을 작성한다.
##
## Filename: ingress.yaml
##
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: mymusic
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: andrewapp.peter.space # web browser에서 'http://andrewapp.peter.space/'로 요청이 들어온다면...
http:
paths:
- path: /mymusic # web browser에서 'http://.../mymusic/...' 로 요청이 들어온다면...
backend:
serviceName: andrewapp # 'andrewapp'이름의 '80' 포트 서비스 Object로 패킷을 Forward한다.
servicePort: 80
위에서 작성한 ingress.yaml을 kubernetes cluster에 적용한다.
$ kubectl apply -n andrew -f ingress.yaml
Example App을 이용한 테스트
Service manifest 파일을 생성한다.
##
## Filename: service.yaml
##
apiVersion: v1
kind: Service
metadata:
name: andrewapp # 이 값이 위 ingress에서 설정한 'serviceName: andrewapp'과 일치해야 한다.
spec:
ports:
- port: 80 # 이 값이 위 ingress에서 설정한 'servicePort: 80'과 일치해야 한다.
protocol: TCP
targetPort: 80
selector:
app: mymusic
type: ClusterIP
위에서 작성한 yaml을 kubernetes cluster에 적용한다.
$ kubectl apply -n andrew -n service.yaml
실제 application이 돌아가는 예제 Web 서버를 구동한다.
##
## deploy.yaml
##
apiVersion: apps/v1
kind: Deployment
metadata:
name: mymusic
spec:
selector:
matchLabels:
app: mymusic
replicas: 1
template:
metadata:
labels:
app: mymusic # service.yaml에서 사용한 selector 정보와 동일해야 한다.
spec:
containers:
- name: mymusic
image: nginx:1.14.2
ports:
- containerPort: 80
위에서 작성한 yaml을 kubernetes cluster에 적용한다.
$ kubectl apply -n andrew -n deploy.yaml
PC에서 Web browser로 접속한다.
주소는 ingress object에 설정했던 ‘andrewapp.peter.space/......’이다.
짜잔~~~ Web Page가 잘 보일 것이다.
'kubernetes' 카테고리의 다른 글
nsenter (0) | 2021.07.13 |
---|---|
Kubernetes Port-Forward 설정 (2) | 2021.07.10 |
MetalLB 설치 (2023년 2월 14일에 설치) (1) | 2021.07.08 |
Kubernetes Container에 대한 TCPDUMP 방법 (0) | 2021.07.08 |
[Kubernetes CLI] MacOS에서 bash auto-completion 사용 (0) | 2021.07.04 |