본문 바로가기

Kubernetes - 외부노출방법 1부 본문

Kubernetes

Kubernetes - 외부노출방법 1부

Seongjun_You 2023. 12. 11. 23:00

배포 방법에 대해 알아본다.

 

먼저 포트포워딩이다.

해당 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
Comments