본문 바로가기
Kubernetes/활용

(기초) 쿠버네티스 활용 - nginx

by lumination 2023. 12. 12.

목표: 쿠버네티스에 nignx를 위한 deployment, service를 배포

Deployment

kubectl create -f nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-server
  labels:
    app: server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      name: nginx-server
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: nginx:1.23.3
          ports:
            - containerPort: 80
 

Service

kubectl create -f nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: server
spec:
  selector:
    app: server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

#type에 노드포트 설정하면 노드 아이피:포트로 외부에서 접근 가능함
#port = 외부에서 Service에 접근하는 포트
#targetPort = Service와 연결된 pod의  포트
 

kubectl get deploy,pod,svc,ep
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-server   1/1     1            1           69m
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-server-6c775c46d5-pkmxg   1/1     Running   0          69m
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP   148m
service/nginx-service   ClusterIP   10.110.212.55   <none>        80/TCP    68m
NAME                      ENDPOINTS           AGE
endpoints/kubernetes      192.168.0.27:6443   148m
endpoints/nginx-service   10.10.180.194:80    68m
  • ClusterIP: 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.
  • NodePort: 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.
  • LoadBalancer: 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅되는 NodePort와 ClusterIP 서비스가 자동으로 생성된다.
  • ExternalName: 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com)에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다.

kubectl get nodes -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master-node    Ready    control-plane   18h   v1.26.5   192.168.0.27   <none>        Ubuntu 22.04.3 LTS   5.15.0-86-generic   containerd://1.7.2
worker-node1   Ready    <none>          18h   v1.26.5   192.168.0.62   <none>        Ubuntu 22.04.3 LTS   5.15.0-86-generic   containerd://1.7.2

kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        18h
nginx-service   NodePort    10.106.46.122   <none>        80:30662/TCP   29m
 

 

192.168.0.62의 공인 ip인 133.186.244.84의 NodePort 30662로 접근 가능하다.

 

http://133.186.244.84:30662