쟝이의 세상
kubenetes 서비스 노출과 버전 업데이트 본문
📎 실습 환경을 위한 파일 다운로드 및 압축 해제
$ wget http://jadecross.iptime.org:7778/k8s/lab/lab_k8s_2024.tar.gz $ tar xfz lab_k8s_2024.tar.gz
📌 외부 클라이언트로 서비스 노출하기
1) 디폴트 타입으로 서비스 생성하기
guestbook 서비스 생성
(위치: ~/lab/05)
✔️ replicaset 생성
$ kubectl create -f guestbook-replicaset.yaml
✔️ guestbook 서비스 생성
$ kubectl create -f guestbook-svc.yaml
👇🏻 guestbook 서비스의 상세 정보 확인
apiVersion: v1
kind: Service
metadata:
name: guestbook
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: guestbook
label이 app=guestbook 으로 생성된 pod가 endpoints로 지정됨
✔️pod의 IP 번호로 접속과 curl 명령으로 접속
$ curl http://10.102.249.47:8080
-> pod의 IP번호로 접속 명령어
👇🏻실행 화면

2) k8snode1 컴퓨터로 해당 서비스 pod의 IP번호로 접속

2) NodePort 타입으로 서비스 생성
guestbook-nodeport 서비스 생성
(위치: ~/lab/05)
✔️ service 생성
$ kubectl create -f guestbook-svc-nodeport.yaml
👇🏻yaml 파일 내용 확인
guestbook-svc-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: guestbook-nodeport
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30123
selector:
app: guestbook
✔️ 서비스 상세정보로 NodePort와 Cluster-IP 확인하기
생성한 서비스의 EndPoints는 label이 app=guestbook으로 설정되어 있는 pod (전에 생성한 서비스는 label이 app=guestbook으로 설정되어 있기 때문에 자동으로 endpoints에 지정) -> NodePort 30123으로 설정되어 있음 |
✔️ 서비스의 cluster-IP번호로 접속과 로컬 컴퓨터에서 NodePort로 접속
1) curl 명령어로 서비스의 cluster-IP 접속

2) 로컬 컴퓨터에서 접속

3) Loadbalancer 타입으로 서비스 생성
metalLB 설치 및 서비스 생성
(위치: ~/lab/05/metalLB)
✔️ metalLB 설치
$ kubectl create -f metallb-native.yaml #yaml 파일을 사용하여 MetalLB 설치
$ kubectl create -f metallb-ippool.yaml
$ kubectl create -f metallb-l2advertisement.yaml
👇🏻 yaml파일 보기
1) metallb-ippool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.56.200-192.168.56.250
-> 외부 공개용 IP Address Pool 생성
2) metallb-l2advertisement.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-advertisement
namespace: metallb-system
spec:
ipAddressPools:
- ip-pool
interfaces:
- enp0s3
MetalLB가 설정된 IP Address Pool(ip-pool)을 특정 네트워크 인터페이스(enp0s3)를 통해 IP주소를 네트워크에 알림
-> MetalLB가 클러스터 외부의 라우터 또는 스위치와 통신하여 해당 IP주소를 사용해 서비스를 제공할 수 있도록 한다.
✔️ guestbook-loadbalancer 서비스 생성
(위치: ~/lab/05)
$ kubectl create -f guestbook-svc-loadbalancer.yaml
👇🏻 서비스 생성 결과 화면
$ kubectl get services

✔️ 서비스 cluster-IP 접속 / 로컬 컴퓨터에서 external-IP 접속 / NodePort로 접속
👇🏻 결과 화면
1) 서비스 cluster-IP 접속

2) 로컬 컴퓨터에서 external-IP 접속

3) NodePort로 접속

=> 모두 정상적으로 접속되는 것을 확인할 수 있다.
📌 RollingUpdate
✔️ 생성되어 있는 guestbook Deployment 생성
$ kubectl create -f guestbook-deployment-v1.yaml --record
위 명령어의 record 옵션? : --record 옵션으로 변경된 Deployment는 변경사항을 기록한다. |
👇🏻 yaml 파일 보기
guestbook-deployment-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: guestbook
spec:
replicas: 3
selector:
matchLabels:
app: guestbook
template:
metadata:
labels:
app: guestbook
spec:
containers:
- image: yu3papa/k8s_guestbook:v1
name: springboot
✔️ 생성된 Deployment 확인
$ kubectl get deployment -o wide
👇🏻 결과 확인

IMAGES를 보면 v1으로 Deployment가 생성됨을 확인할 수 있다.
✔️ 변경되는 것을 확인하기 위해 롤링 업테이트 속도 낮추기
$ kubectl patch deployment guestbook -p '{"spec": {"minReadySeconds": 10}}'
👇🏻 세션창 하나를 더 열어서 업데이트 진행과정을 확인
$ while true; do curl -s http://192.168.56.201 | grep HealthCheck; sleep 1; done
출력되는 화면→ 1초에 하나씩 진행상황이 업데이트 되는 것을 확인할 수 있음
✔️ pod의 image를 v2로 변경
$ kubectl set image deployment guestbook springbookt=yu3papa/k8s_guestbook:v2
✔️ rollout status 명령어로 배포 과정 조회
$ kubectl rollouyt status deployment guestbook
👇🏻 실행 화면
1) 업데이트 확인 세션창

점차 v2로 바뀌는 것을 확인할 수 있음
2) 배포 과정 조회창

배포되고 있는 진행상황을 명령창에 기록해주는 것을 확인할 수 있음
✔️ ReplicaSet 확인
$ kubectl get rs -o wide
v2로 업데이트가 된 후에도 v1의 ReplicaSet이 남아 있는 것을 확인할 수 있다. |
'자료' 카테고리의 다른 글
mac OS homebrew (DNS 서버 구축) (0) | 2024.10.06 |
---|---|
mac OS homebrew (Apache 80포트 변경하기) (0) | 2024.10.04 |
추가 보안 적용 (0) | 2024.09.20 |
추가 보안 적용 (Ubuntu) (0) | 2024.09.17 |
시큐어 코딩이 적용된 게시판 만들기 Window (HTTP, PHP, SQL Server) (0) | 2024.09.06 |