공부하는 책
알면 더 쉬운 도커 쿠버네티스 복습을 위해 요약한 것.
kubernetes.io
kubernetes basic
목표
kubernetes 책 3장 내용 숙지
- 쿠버네티스 오브젝트
- 쿠버네티스의 구성 요소를 가볍게 알아보자
3.3 쿠버네티스의 오브젝트
- 쿠버네티스는 모든 요소를 yaml 파일로 생성하여 관리
3.3.5 인그레스
- 인그레스는 클러스터 외부에서 클러스터 내부 서비스로 접속하도록 해 준다.
- 인그레스의 구성 요소로 인그레스 리소스, 인그레스 컨트롤러가 있다.
- 단일 파드를 노출하는 것은 kubectl expose 명령어를 사용하는 것과 효과가 비슷하지만 이외의 복잡한 상황에서는 인그레스가 더 많은 기능을 제공한다.
-
종류
- GCE 용 ingress-gce
- NGINX 용 ingress-nginx
3.3.5.1 ingress-nginx 설치
참조
https://kubernetes.github.io/ingress-nginx/deploy/
요 링크… 이거 아닌듯… 나중에 참조
# 설치
% kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/mandatory.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
...
그리고 인그레스 컨트롤러 또한 외부에 노출
%kubectl expose deploy nginx-ingress-controller --type=NodePort -n ingress-nginx
service/nginx-ingress-controller exposed
% kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller NodePort 10.106.203.235 <none> 80:31580/TCP,443:31210/TCP 11s
http://localhost:31580/ 접속
404 화면 뜨면 성공 (인그레스만 설치되었을 뿐 실제로 서비스를 실행한 파드에 연결되지 않았기 때문)
3.3.5.2 hello world
서비스까지
% kubectl run nodejs-app --image zuhern/kubernetes-test-homepage --port=3000
pod/nodejs-app created
# 내꺼로 하면 에러난다.. public 인데 왜 안되냐, 아 도커hub..
% kubectl run nodejs-app --image uphiller/nodejs-hello-world --port=3000
pod/nodejs-app created
# 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
nodejs-app 1/1 Running 0 8s
# (추가) 이전에 동일한 이름으로 만든 서비스 삭제
% kubectl delete service nodejs-app
service "nodejs-app" deleted
# 서비스 생성 (인그레스를 통해 외부 노출할 것이기 대문에 --type=NodePort 사용 안함)
zuhern@zuherns-MacBookPro kubernetes % kubectl expose pod nodejs-app
service/nodejs-app exposed
# ingress 설정
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nodejs-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com # host
http:
paths:
- path: /nodejs # path
backend: # target service
serviceName: nodejs-app
servicePort: 3000
# 인그레스 생성
% kubectl apply -f ingress/nodejs-ingress
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.extensions/nodejs-ingress created
# 확인
% kubectl get ingress
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
nodejs-ingress <none> foo.bar.com 80 21s
3.3.5.2 hello world!
kubectl get ingress
로 조회하여 /etc/hosts에 인그레스에 설정한 host인 foo.bar.com 등록kubectl get svc -n ingress-nginx
조회로 나온 80:31580/TCP 의 31580을 포트로- /etc/hosts에 인그레스에 설정한 path인 nodejs를 경로에 추가
- 1,2,3 조합하여 http://foo.bar.com:31580/nodejs 도출
- curl http://foo.bar.com:31580/nodejs 하거나 브라우저로 확인