Kubernetes - 외부노출방법 1부 본문
배포 방법에 대해 알아본다.
먼저 포트포워딩이다.
해당 yaml을 배포한다.
포트포워딩 명령어이다.
마스터노드에 들어온 ip를 워커노드 80 포트로 보낸다는 뜻이다.
로컬에서 curl을 날려본다.
포트포워딩은 많이 쓰지 않고 그냥 테스트용으로 쓰인다.
그다음 hostport와 hostNetwork는 사용자가 어디 노드로 배포했는지
알아야 접속할 수 있다.
비현실적이기에 사용하지 않는다.
NodePort에 대해 알아본다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
labels:
app: deploy-nginx
spec:
replicas: 3
selector:
matchLabels:
app: deploy-nginx
template:
metadata:
labels:
app: deploy-nginx
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: np-nginx
spec:
selector:
app: deploy-nginx
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30000 #option
type: NodePort
---으로 오브젝트를 구분해서 배포한다.
서비스와 디플로이먼트의 app이름을 같게 해준다.
nodePort는 원래 랜덤? 값으로 알고있는데 30000번으로 지정해 주었다.
type은 꼭 써준다.
nodePort로 node로 이동
port로 svc로 이동
targetPort로 pod로 이동
이 순서이다.
배포하면 svc에 하나가 생겨있다.
접속하면 nginx가 나온다.
이제 LoadBalancer에 대해 알아본다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
labels:
app: deploy-nginx
spec:
replicas: 3
selector:
matchLabels:
app: deploy-nginx
template:
metadata:
labels:
app: deploy-nginx
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: lb-nginx
spec:
selector:
app: deploy-nginx
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
역시나 app 이름 맞추어주고 type도 써준다.
port로 svc 접근 targetport로 pod 접근 순서이다.
아 참고로 로드밸런서를 사용할 때는 metallb-system이 구성되어 있어야 한다.
k get po -n metallb-system -o wide
해당 명령어로 확인을 한다.
이제 코드를 배포하고 svc를 확인하면
생겨있다.
로드밸런서를 하나 더 배포했다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-chk-ip
labels:
app: deploy-chk-ip
spec:
replicas: 3
selector:
matchLabels:
app: deploy-chk-ip
template:
metadata:
labels:
app: deploy-chk-ip
spec:
containers:
- name: chk-ip
image: sysnet4admin/chk-ip
---
apiVersion: v1
kind: Service
metadata:
name: lb-chk-ip
spec:
selector:
app: deploy-chk-ip
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
얘는 ip를 체크해 주는 목적이다.
얘도 동일하게 배포해 본다.
svc가 두 개가 되었다.
웹으로 접속해 본다.
11번은
nginx
12번은
컨테이너에 접속하면 컨테이너의 ip를 출력해 주는 기능이다.
워커노드 1번의 파드로 접속한 모양이다.
다음 Externalname이다.
얘는 좀 특이하다. 서비스인 것 같지는 않다.
외부 도메인을 연결하기 위한 서비스 객체?? 그럼 느낌이다.
아마 리다이렉션 할 때 그럴 때나 쓰지 않을까 싶다.
apiVersion: v1
kind: Service
metadata:
name: ex-url-1
namespace: default
spec:
type: ExternalName
externalName: www.naver.com
도메인은 자기 원하는 걸로 바꾸면 된다.
k get svc로 확인하면
external-ip에 도메인 주소가 있다.
k run net --image=sysnet4admin/net-tools-ifn
그리고 추후 사용할 서비스인데
옛날에 강의 들을 때 사용했던 걸로 꽤 유용해서 쓰고 있다.
스크립트 올릴 때 자주 나올 예정이다.
2부 작성 중...
'Kubernetes' 카테고리의 다른 글
Kubernetes - 볼륨 1부 (1) | 2023.12.21 |
---|---|
Kubernetes - 외부노출방법 2부 (0) | 2023.12.12 |
Kubernetes - 배포 종류 (1) | 2023.12.09 |
kubernetes - 명령어 (0) | 2023.12.06 |
Kubernetes - 환경구성 (2) | 2023.12.05 |